*IF DEF,A03_6A                                                             KMKHZ6A.2      
C *****************************COPYRIGHT******************************     KMKHZ6A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    KMKHZ6A.4      
C                                                                          KMKHZ6A.5      
C Use, duplication or disclosure of this code is subject to the            KMKHZ6A.6      
C restrictions as set forth in the contract.                               KMKHZ6A.7      
C                                                                          KMKHZ6A.8      
C                Meteorological Office                                     KMKHZ6A.9      
C                London Road                                               KMKHZ6A.10     
C                BRACKNELL                                                 KMKHZ6A.11     
C                Berkshire UK                                              KMKHZ6A.12     
C                RG12 2SZ                                                  KMKHZ6A.13     
C                                                                          KMKHZ6A.14     
C If no contract has been raised with this copy of the code, the use,      KMKHZ6A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      KMKHZ6A.16     
C to do so must first be obtained in writing from the Head of Numerical    KMKHZ6A.17     
C Modelling at the above address.                                          KMKHZ6A.18     
C ******************************COPYRIGHT******************************    KMKHZ6A.19     
!  SUBROUTINE KMKHZ  --------------------------------------------------    KMKHZ6A.20     
!!!                                                                        KMKHZ6A.21     
!!!  Purpose: To calculate the turbulent mixing coefficients KM and KH     KMKHZ6A.22     
!!!                                                                        KMKHZ6A.23     
!!!                                                                        KMKHZ6A.25     
!!!  Model            Modification history                                 KMKHZ6A.26     
!!! version  date                                                          KMKHZ6A.27     
!!!                                                                        KMKHZ6A.28     
!!!   4.4  05/09/97   New deck   R.N.B.Smith                               KMKHZ6A.29     
!!!  4.5    Jul. 98  Kill the IBM specific lines (JCThil)                  AJC1F405.131    
!!!                                                                        KMKHZ6A.30     
!!!  Programming standard:                                                 KMKHZ6A.31     
!!!                                                                        KMKHZ6A.32     
!!!  System component covered: Part of P243.                               KMKHZ6A.33     
!!!                                                                        KMKHZ6A.34     
!!!  Documentation: UMDP No.24                                             KMKHZ6A.35     
!!!                                                                        KMKHZ6A.36     
!!!---------------------------------------------------------------------   KMKHZ6A.37     
                                                                           KMKHZ6A.38     
! Arguments :-                                                             KMKHZ6A.39     
                                                                           KMKHZ6A.40     

      SUBROUTINE KMKHZ (                                                    1,6KMKHZ6A.41     
     & P_FIELD,P1,P_POINTS,BL_LEVELS                                       KMKHZ6A.42     
     &,P,P_HALF,T,Q,QCL,QCF,BT,BQ,CF,DZL                                   KMKHZ6A.43     
     &,RDZ,DELTAP,FTL,FQW                                                  KMKHZ6A.44     
     &,Z0M,Z_FULL,Z_HALF,Z_UV,Z_TQ,V_S,FB_SURF                             KMKHZ6A.45     
     &,QW,RHOKM,DB_SVL,RHOKH,TL,ZH,TV1_SD,T1_SD,Q1_SD,NTML                 ARN0F405.875    
     &,GRAD_T_ADJ,GRAD_Q_ADJ                                               KMKHZ6A.47     
     &,BTM,BQM,DQSDT,BTM_CLD,BQM_CLD,A_QSM,A_DQSDTM,RHO_TQ,RHO_UV          KMKHZ6A.48     
     &,RAD_HR,RADHR_DIM1,CUMULUS,Z_LCL,RHOKM_TOP,RHOKH_TOP,ZHT             ARN0F405.876    
     &,BL_TYPE_1,BL_TYPE_2,BL_TYPE_3,BL_TYPE_4,BL_TYPE_5,BL_TYPE_6         ARN0F405.877    
     &,UNSTABLE,NTDSC,DSC                                                  ARN0F405.878    
     &,LTIMER                                                              KMKHZ6A.50     
     & )                                                                   KMKHZ6A.51     
                                                                           KMKHZ6A.52     
      IMPLICIT NONE                                                        KMKHZ6A.53     
                                                                           KMKHZ6A.54     
      LOGICAL LTIMER             ! IN Flag for TIMER diagnostics           KMKHZ6A.55     
                                                                           KMKHZ6A.56     
      INTEGER                                                              KMKHZ6A.57     
     & P_FIELD                ! IN No. of P-grid points in whole field     KMKHZ6A.58     
     &,P1                     ! IN First P-grid point to be processed.     KMKHZ6A.59     
     &,P_POINTS               ! IN No. of P-grid points to be              KMKHZ6A.60     
!                                  processed.                              KMKHZ6A.61     
!                                  ( = P_POINTS = 1 for SCM.)              KMKHZ6A.63     
     &,BL_LEVELS              ! IN No. of atmospheric levels for           KMKHZ6A.65     
!                                  which boundary layer fluxes are         KMKHZ6A.66     
!                                  calculated.                             KMKHZ6A.67     
     &,RADHR_DIM1             ! IN Dimension of Radiative heating          KMKHZ6A.68     
!                             !    rate (P_FIELD but used for              KMKHZ6A.69     
!                             !    dynamic allocation)                     KMKHZ6A.70     
                                                                           KMKHZ6A.71     
      REAL                                                                 KMKHZ6A.72     
     & BQ(P_FIELD,BL_LEVELS)  ! IN A buoyancy parameter for clear air      KMKHZ6A.73     
!                             !    on p,T,q-levels (full levels).          KMKHZ6A.74     
     &,BT(P_FIELD,BL_LEVELS)  ! IN A buoyancy parameter for clear air      KMKHZ6A.75     
!                             !    on p,T,q-levels (full levels).          KMKHZ6A.76     
     &,BQM(P_FIELD,BL_LEVELS) ! IN A buoyancy parameter for clear air      KMKHZ6A.77     
!                             !    on intermediate levels (half levels):   KMKHZ6A.78     
!                             !    (*,K) elements are k+1/2 values.        KMKHZ6A.79     
     &,BTM(P_FIELD,BL_LEVELS) ! IN A buoyancy parameter for clear air      KMKHZ6A.80     
!                             !    on intermediate levels (half levels):   KMKHZ6A.81     
!                             !    (*,K) elements are k+1/2 values.        KMKHZ6A.82     
     &,BQM_CLD(P_FIELD,BL_LEVELS)                                          KMKHZ6A.83     
!                             ! IN A buoyancy parameter for cloudy air     KMKHZ6A.84     
!                             !    on intermediate levels (half levels):   KMKHZ6A.85     
!                             !    (*,K) elements are k+1/2 values.        KMKHZ6A.86     
     &,BTM_CLD(P_FIELD,BL_LEVELS)                                          KMKHZ6A.87     
!                             ! IN A buoyancy parameter for cloudy air     KMKHZ6A.88     
!                             !    on intermediate levels (half levels):   KMKHZ6A.89     
!                             !    (*,K) elements are k+1/2 values.        KMKHZ6A.90     
     &,A_QSM(P_FIELD,BL_LEVELS)                                            KMKHZ6A.91     
!                             ! IN Saturated lapse rate factor             KMKHZ6A.92     
!                             !    on intermediate levels (half levels):   KMKHZ6A.93     
!                             !    (*,K) elements are k+1/2 values.        KMKHZ6A.94     
     &,A_DQSDTM(P_FIELD,BL_LEVELS)                                         KMKHZ6A.95     
!                             ! IN Saturated lapse rate factor             KMKHZ6A.96     
!                             !    on intermediate levels (half levels):   KMKHZ6A.97     
!                             !    (*,K) elements are k+1/2 values.        KMKHZ6A.98     
     &,P(P_FIELD,BL_LEVELS)   ! IN P(*,K) is pressure at full level k.     KMKHZ6A.99     
     &,P_HALF(P_FIELD,BL_LEVELS)                                           KMKHZ6A.100    
!                             ! IN P_HALF(*,K) is pressure at half         KMKHZ6A.101    
!                             !    level k-1/2.                            KMKHZ6A.102    
     &,T(P_FIELD,BL_LEVELS)   ! IN Temperature (K).                        KMKHZ6A.103    
     &,Q(P_FIELD,BL_LEVELS)   ! IN Sp humidity (kg water per kg air).      KMKHZ6A.104    
     &,QCF(P_FIELD,BL_LEVELS) ! IN Cloud ice (kg per kg air).              KMKHZ6A.105    
     &,QCL(P_FIELD,BL_LEVELS) ! IN Cloud liquid water (kg per kg air).     KMKHZ6A.106    
     &,CF(P_FIELD,BL_LEVELS)  ! IN Cloud fractions for boundary levs.      KMKHZ6A.107    
     &,DZL(P_FIELD,BL_LEVELS) ! IN Layer depths (m).  DZL(,K) is the       KMKHZ6A.108    
!                                  distance from layer boundary K-1/2      KMKHZ6A.109    
!                                  to layer boundary K+1/2.  For K=1       KMKHZ6A.110    
!                                  the lower boundary is the surface.      KMKHZ6A.111    
                                                                           KMKHZ6A.112    
      REAL                                                                 KMKHZ6A.113    
     & RDZ(P_FIELD,BL_LEVELS) ! IN Reciprocal of distance between          KMKHZ6A.114    
!                                  full levels (m-1).  1/RDZ(,K) is        KMKHZ6A.115    
!                                  the vertical distance from level        KMKHZ6A.116    
!                                  K-1 to level K, except that for         KMKHZ6A.117    
!                                  K=1 it is the height of the             KMKHZ6A.118    
!                                  lowest atmospheric full level.          KMKHZ6A.119    
     &,Z0M(P_FIELD)           ! IN Roughness length for momentum (m).      KMKHZ6A.120    
     &,Z_FULL(P_FIELD,BL_LEVELS) ! IN Z_FULL(*,K) is the height of the     KMKHZ6A.121    
!                                !    k-th full level above the surface.   KMKHZ6A.122    
     &,Z_HALF(P_FIELD,BL_LEVELS) ! IN Z_HALF(*,K) is the height of level   KMKHZ6A.123    
!                                     k-1/2 above the surface (m).         KMKHZ6A.124    
     &,DELTAP(P_FIELD,BL_LEVELS) ! IN Pressure difference between          KMKHZ6A.125    
!                                !    half-levels (Pa).                    KMKHZ6A.126    
     &,RAD_HR(RADHR_DIM1,BL_LEVELS)                                        KMKHZ6A.127    
!                                ! IN Radiative heating rate               KMKHZ6A.128    
!                                !    (Kelvins/s)                          KMKHZ6A.129    
     &,V_S(P_FIELD)              ! IN Surface friction velocity (m/s)      KMKHZ6A.130    
     &,FB_SURF(P_FIELD)          ! IN Surface buoyancy flux over density   KMKHZ6A.131    
!                                     (m^2/s^3).                           KMKHZ6A.132    
     &,FQW(P_FIELD,BL_LEVELS)    ! IN "Explicit" flux of QW (i.e.          KMKHZ6A.133    
!                                      evaporation) from layer below       KMKHZ6A.134    
!                                      on P-grid (kg per sq m per s).      KMKHZ6A.135    
     &,FTL(P_FIELD,BL_LEVELS)    ! IN "Explicit" flux of TL = H/CP         KMKHZ6A.136    
!                                     (sensible heat/CP) from layer        KMKHZ6A.137    
!                                     below, on P-grid.                    KMKHZ6A.138    
     &,TV1_SD(P_FIELD)           ! IN Standard Deviation of level 1        KMKHZ6A.139    
!                                !    virtual temperature (K).             KMKHZ6A.140    
     &,T1_SD(P_FIELD)            ! IN Standard Deviation of level 1        KMKHZ6A.141    
!                                !    temperature (K).                     KMKHZ6A.142    
     &,Q1_SD(P_FIELD)            ! IN Standard Deviation of level 1        KMKHZ6A.143    
!                                !    specific humidity (kg/kg).           KMKHZ6A.144    
     &,DQSDT(P_FIELD,BL_LEVELS)  ! IN Partial derivative of QSAT w.r.t.    KMKHZ6A.145    
!                                !    temperature.                         KMKHZ6A.146    
     &,Z_UV(P_FIELD,BL_LEVELS)   ! IN For a vertically staggered grid      KMKHZ6A.147    
!                                !    with a u,v-level first above the     KMKHZ6A.148    
!                                !    surface, Z_UV(*,K) is the height     KMKHZ6A.149    
!                                !    of the k-th u,v-level (half level    KMKHZ6A.150    
!                                !    k-1/2) above the surface;            KMKHZ6A.151    
!                                !    for an unstaggered grid the          KMKHZ6A.152    
!                                !    heights of the half-levels           KMKHZ6A.153    
!                                !    0.5 to BL_LEVELS-0.5 should be       KMKHZ6A.154    
!                                !    input to elements 1 to BL_LEVELS.    KMKHZ6A.155    
!                                !    (1st value not used in either        KMKHZ6A.156    
!                                !     case.)                              KMKHZ6A.157    
     &,Z_TQ(P_FIELD,BL_LEVELS)   ! IN For a vertically staggered grid      KMKHZ6A.158    
!                                !    with a u,v-level first above the     KMKHZ6A.159    
!                                !    surface, Z_TQ(*,K) is the height     KMKHZ6A.160    
!                                !    of the k-th T,q-level (full level    KMKHZ6A.161    
!                                !    k) above the surface;                KMKHZ6A.162    
!                                !    for an unstaggered grid the          KMKHZ6A.163    
!                                !    heights of the half levels           KMKHZ6A.164    
!                                !    1.5 to BL_LEVELS+0.5 should be       KMKHZ6A.165    
!                                !    input to elements 1 to BL_LEVELS.    KMKHZ6A.166    
!                                !    (value for BL_LEVELS not used        KMKHZ6A.167    
!                                !    in either case.)                     KMKHZ6A.168    
!                                                                          KMKHZ6A.169    
     &,RHO_UV(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid      KMKHZ6A.170    
!                                !    with a u,v-level first above the     KMKHZ6A.171    
!                                !    surface, RHO_UV(*,K) is the          KMKHZ6A.172    
!                                !    density at the k-th u,v-level        KMKHZ6A.173    
!                                !    above the surface;                   KMKHZ6A.174    
!                                !    for an unstaggered grid the          KMKHZ6A.175    
!                                !    densities at the layer interfaces    KMKHZ6A.176    
!                                !    (half-levels) 0.5 to BL_LEVELS-0.5   KMKHZ6A.177    
!                                !    should be input to elements 1 to     KMKHZ6A.178    
!                                !    BL_LEVELS.                           KMKHZ6A.179    
!                                !    (1st value not used in either        KMKHZ6A.180    
!                                !    case.)                               KMKHZ6A.181    
     &,RHO_TQ(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid      KMKHZ6A.182    
!                                !    with a u,v-level first above the     KMKHZ6A.183    
!                                !    surface, RHO_TQ(*,K) is the          KMKHZ6A.184    
!                                !    density of the k-th T,q-level        KMKHZ6A.185    
!                                !    above the surface;                   KMKHZ6A.186    
!                                !    for an unstaggered grid the          KMKHZ6A.187    
!                                !    densities at the layer interfaces    KMKHZ6A.188    
!                                !    (half-levels) 1.5 to BL_LEVELS+0.5   KMKHZ6A.189    
!                                !    should be input to elements 1 to     KMKHZ6A.190    
!                                !    BL_LEVELS.                           KMKHZ6A.191    
!                                !    (value for BL_LEVELS not used        KMKHZ6A.192    
!                                !    in either case.)                     KMKHZ6A.193    
!                                                                          KMKHZ6A.194    
     &,QW(P_FIELD,BL_LEVELS)     ! IN Total water content (kg per kg       KMKHZ6A.195    
!                                     air).                                KMKHZ6A.196    
     &,TL(P_FIELD,BL_LEVELS)     ! IN Liquid/frozen water temperature      KMKHZ6A.197    
!                                     (K).                                 KMKHZ6A.198    
      REAL                                                                 KMKHZ6A.199    
     & ZH(P_FIELD)            ! INOUT Height of the top of the surface     ARN0F405.879    
!                             !       based turbulently mixed layer (m).   ARN0F405.880    
                                                                           KMKHZ6A.208    
      REAL                                                                 KMKHZ6A.209    
     & DB_SVL(P_FIELD,2:BL_LEVELS)                                         ARN0F405.881    
!                             ! OUT Buoyancy jump across layer             ARN0F405.882    
!                                   interface based on SVL.                ARN0F405.883    
     &,GRAD_T_ADJ(P_FIELD)    ! OUT Temperature gradient adjustment        KMKHZ6A.213    
!                                   for non-local mixing in unstable       KMKHZ6A.214    
!                                   turbulent boundary layer.              KMKHZ6A.215    
     &,GRAD_Q_ADJ(P_FIELD)    ! OUT Humidity gradient adjustment           KMKHZ6A.216    
!                                   for non-local mixing in unstable       KMKHZ6A.217    
!                                   turbulent boundary layer.              KMKHZ6A.218    
     &,Z_LCL(P_FIELD)         ! OUT Height of lifting condensation         ARN0F405.884    
!                                   level.                                 ARN0F405.885    
     &,RHOKM(P_FIELD,2:BL_LEVELS)                                          ARN0F405.886    
!                             ! OUT Non-local turbulent mixing             ARN0F405.887    
!                             !     coefficient for momentum.              ARN0F405.888    
     &,RHOKH(P_FIELD,2:BL_LEVELS)                                          ARN0F405.889    
!                             ! OUT Non-local turbulent mixing             ARN0F405.890    
!                             !     coefficient for scalars.               ARN0F405.891    
     &,RHOKM_TOP(P_FIELD,2:BL_LEVELS)                                      ARN0F405.892    
!                             ! OUT Top-down turbulent mixing              ARN0F405.893    
!                             !     coefficient for momentum.              ARN0F405.894    
     &,RHOKH_TOP(P_FIELD,2:BL_LEVELS)                                      ARN0F405.895    
!                             ! OUT Top-down turbulent mixing              ARN0F405.896    
!                             !     coefficient for scalars.               ARN0F405.897    
     &,ZHT(P_FIELD)           ! OUT Height below which there may be        ARN0F405.898    
!                             !     turbulent mixing (m).                  ARN0F405.899    
     &,BL_TYPE_1(P_FIELD)     ! OUT Indicator set to 1.0 if stable         ARN0F405.900    
!                             !     b.l. diagnosed, 0.0 otherwise.         ARN0F405.901    
     &,BL_TYPE_2(P_FIELD)     ! OUT Indicator set to 1.0 if Sc over        ARN0F405.902    
!                             !     stable surface layer diagnosed,        ARN0F405.903    
!                             !     0.0 otherwise.                         ARN0F405.904    
     &,BL_TYPE_3(P_FIELD)     ! OUT Indicator set to 1.0 if well mixed     ARN0F405.905    
!                             !     b.l. diagnosed, 0.0 otherwise.         ARN0F405.906    
     &,BL_TYPE_4(P_FIELD)     ! OUT Indicator set to 1.0 if decoupled      ARN0F405.907    
!                             !     Sc layer (not over cumulus)            ARN0F405.908    
!                             !     diagnosed, 0.0 otherwise.              ARN0F405.909    
     &,BL_TYPE_5(P_FIELD)     ! OUT Indicator set to 1.0 if decoupled      ARN0F405.910    
!                             !     Sc layer over cumulus diagnosed,       ARN0F405.911    
!                             !     0.0 otherwise.                         ARN0F405.912    
     &,BL_TYPE_6(P_FIELD)     ! OUT Indicator set to 1.0 if a cumulus      ARN0F405.913    
!                             !     capped b.l. diagnosed,                 ARN0F405.914    
!                             !     0.0 otherwise.                         ARN0F405.915    
                                                                           ARN0F405.916    
      INTEGER                                                              KMKHZ6A.219    
     & NTML(P_FIELD)          ! OUT Number of model levels in the          KMKHZ6A.220    
!                                   turbulently mixed layer.               KMKHZ6A.221    
     &,NTDSC(P_FIELD)         ! OUT Top level for turbulent mixing in      ARN0F405.917    
!                             !     cloud layer.                           ARN0F405.918    
                                                                           KMKHZ6A.222    
      LOGICAL                                                              ARN0F405.919    
     & CUMULUS(P_FIELD)       ! OUT Flag for cumulus in the b.l.           ARN0F405.920    
     &,UNSTABLE(P_FIELD)      ! OUT Flag to indicate an unstable           ARN0F405.921    
!                                   boundary layer forced from             ARN0F405.922    
!                                   the surface.                           ARN0F405.923    
     &,DSC(P_FIELD)           ! OUT Flag set if decoupled stratocumulus    ARN0F405.924    
!                             !     layer found.                           ARN0F405.925    
                                                                           KMKHZ6A.223    
                                                                           ARN0F405.926    
!!----------------------------------------------------------------------   KMKHZ6A.224    
!    External references :-                                                KMKHZ6A.225    
      EXTERNAL TIMER, QSAT, EXCF_NL                                        KMKHZ6A.226    
                                                                           KMKHZ6A.227    
!!----------------------------------------------------------------------   KMKHZ6A.228    
!    Local and other symbolic constants :-                                 KMKHZ6A.229    
*CALL C_LHEAT                                                              KMKHZ6A.230    
*CALL C_R_CP                                                               KMKHZ6A.231    
*CALL C_G                                                                  KMKHZ6A.232    
*CALL C_0_DG_C                                                             KMKHZ6A.233    
*CALL C_EPSLON                                                             KMKHZ6A.234    
*CALL C_GAMMA                                                              KMKHZ6A.235    
                                                                           KMKHZ6A.236    
      REAL ETAR,GRCP,LCRCP,LFRCP,LS,LSRCP                                  KMKHZ6A.237    
      PARAMETER (                                                          KMKHZ6A.238    
     & ETAR=1.0/(1.0-EPSILON)   ! Used in buoyancy parameter BETAC.        KMKHZ6A.239    
     &,GRCP=G/CP                ! Adiabatic lapse rate.                    KMKHZ6A.240    
     &,LCRCP=LC/CP              ! Latent heat of condensation / CP.        KMKHZ6A.241    
     &,LFRCP=LF/CP              ! Latent heat of fusion / CP.              KMKHZ6A.242    
     &,LS=LC+LF                 ! Latent heat of sublimation.              KMKHZ6A.243    
     &,LSRCP=LS/CP              ! Latent heat of sublimation / CP.         KMKHZ6A.244    
     &)                                                                    KMKHZ6A.245    
      REAL A_PLUME,B_PLUME,A_GRAD_ADJ,MAX_T_GRAD                           KMKHZ6A.246    
     &    ,MIN_SVL_GRAD,SC_CFTOL,CT_RESID,LGF,FGF                          ARN0F405.927    
      PARAMETER (                                                          KMKHZ6A.247    
     & A_PLUME=0.4                                                         ARN0F405.928    
     &,B_PLUME=3.26                                                        KMKHZ6A.249    
     &,A_GRAD_ADJ=3.26                                                     KMKHZ6A.250    
     &,MAX_T_GRAD=1.0E-3                                                   ARN0F405.929    
     &,MIN_SVL_GRAD=1.0E-3  ! Minimum SVL gradient in a mixed layer.       ARN0F405.930    
     &,SC_CFTOL=0.1         ! Cloud fraction required for a                ARN0F405.931    
                            ! stratocumulus layer to be diagnosed.         ARN0F405.932    
     &,CT_RESID=500.0       ! Approximate parcel cloud top residence       ARN0F405.933    
                            ! time (s).                                    ARN0F405.934    
     &,LGF=1.0              ! Adiabatic gradient factor for cloud          ARN0F405.935    
!                           ! liquid water.                                ARN0F405.936    
     &,FGF=0.0)             ! Adiabatic gradient factor for cloud          ARN0F405.937    
!                           ! frozen water.                                ARN0F405.938    
                                                                           KMKHZ6A.252    
!                                                                          KMKHZ6A.253    
!  Define local storage.                                                   KMKHZ6A.254    
!                                                                          KMKHZ6A.255    
!  (a) Workspace. 6*BL_LEVELS-1 blocks of real workspace are required      KMKHZ6A.256    
!      plus 1 block of logical.                                            KMKHZ6A.257    
!                                                                          KMKHZ6A.258    
!                                                                          KMKHZ6A.259    
      LOGICAL                                                              KMKHZ6A.260    
     & TOPBL(P_FIELD)            ! Flag set when top of boundary layer     KMKHZ6A.261    
!                                ! is reached.                             KMKHZ6A.262    
     &,CLOUD_BASE(P_FIELD)       ! Flag set when cloud base is reached.    KMKHZ6A.263    
!                                                                          KMKHZ6A.264    
     &,ABOVE_LCL(P_FIELD)        ! Flag set when parcel above LCL.         ARN0F405.939    
     &,COUPLED(P_FIELD)          ! Flag to indicate stratocumulus layer    ARN0F405.940    
!                                ! weakly coupled to surface (i.e.         ARN0F405.941    
!                                ! weakly decoupled).                      ARN0F405.942    
                                                                           ARN0F405.943    
      REAL                                                                 KMKHZ6A.265    
     & QS(P_FIELD)               ! Saturated sp humidity at pressure and   KMKHZ6A.266    
!                                ! temperature of sucessive levels.        KMKHZ6A.267    
     &,QCL_IC_BOT(P_FIELD,BL_LEVELS)  ! In-cloud liquid water content      KMKHZ6A.268    
!                                     ! at the bottom of the model layer   KMKHZ6A.269    
     &,QCF_IC_BOT(P_FIELD,BL_LEVELS)  ! In-cloud frozen water content      KMKHZ6A.270    
!                                     ! at the bottom of the model layer   KMKHZ6A.271    
     &,QCL_IC_TOP(P_FIELD,BL_LEVELS)  ! In-cloud liquid water content      KMKHZ6A.272    
!                                     ! at the top of the model layer.     KMKHZ6A.273    
     &,QCF_IC_TOP(P_FIELD,BL_LEVELS)  ! In-cloud frozen water content      KMKHZ6A.274    
!                                     ! at the top of the model layer.     KMKHZ6A.275    
     &,CFL(P_FIELD,BL_LEVELS)         ! Liquid cloud fraction.             KMKHZ6A.276    
     &,CFF(P_FIELD,BL_LEVELS)         ! Frozen cloud fraction.             KMKHZ6A.277    
     &,DQCLDZ(P_FIELD,BL_LEVELS)      ! Vertical gradient of in-cloud      KMKHZ6A.278    
!                                     ! liquid cloud water in a            KMKHZ6A.279    
!                                     ! well mixed layer.                  ARN0F405.944    
     &,DQCFDZ(P_FIELD,BL_LEVELS)      ! Vertical gradient of in-cloud      KMKHZ6A.281    
!                                     ! frozen cloud water in a            KMKHZ6A.282    
!                                     ! well-mixed layer.                  KMKHZ6A.283    
     &,CHI_S(P_FIELD,2:BL_LEVELS)     ! Mixing fraction of just saturate   KMKHZ6A.284    
!                                     ! mixture.                           KMKHZ6A.285    
     &,DB(P_FIELD,2:BL_LEVELS)        ! Buoyancy jump across layer         ARN0F405.945    
!                                     ! interface.                         ARN0F405.946    
     &,BFLUX_SURF(P_FIELD)            ! Surface buoyancy flux using        ARN0F405.947    
!                                     ! clear air buoyancy parameters.     ARN0F405.948    
     &,BFLUX_SAT_SURF(P_FIELD)        ! Surface buoyancy flux using        ARN0F405.949    
!                                     ! cloudy buoyancy parameters.        ARN0F405.950    
     &,DB_TOP(P_FIELD)                ! Buoyancy jump at the top of the    KMKHZ6A.287    
!                                     ! boundary layer.                    KMKHZ6A.288    
     &,DB_CLD(P_FIELD,2:BL_LEVELS)    ! In-cloud buoyancy jump across      KMKHZ6A.289    
!                                     ! layer interface.                   KMKHZ6A.290    
     &,DF_OVER_CP(P_FIELD,BL_LEVELS)  ! Radiative flux change over layer   KMKHZ6A.291    
!                                     ! divided by c_P.                    KMKHZ6A.292    
     &,DF_TOP_OVER_CP(P_FIELD)        ! Radiative flux change at cloud t   KMKHZ6A.293    
!                                     ! divided by c_P.                    KMKHZ6A.294    
     &,SVL_PLUME(P_FIELD)             ! Liquid/frozen water static         ARN0F405.951    
!                                     ! energy over CP for a plume         ARN0F405.952    
!                                     ! parcel rising without dilution     ARN0F405.953    
!                                     ! from level 1.                      KMKHZ6A.301    
     &,ENV_SVL_KM1(P_FIELD)           ! Density (virtual) static energy    ARN0F405.954    
!                                     ! over CP for last layer.            ARN0F405.955    
!                                     ! considered.                        ARN0F405.956    
     &,PAR_SVL_KM1(P_FIELD)           ! Density (virtual) static energy    ARN0F405.957    
                                      ! over CP of parcel at last level    ARN0F405.958    
!                                     ! considered.                        ARN0F405.959    
     &,Z_CLD(P_FIELD)                 ! Cloud fraction weighted            KMKHZ6A.305    
!                                     ! thickness of b.l. cloud.           KMKHZ6A.306    
     &,BT_TOP(P_FIELD)                ! Buoyancy parameter at the top of   KMKHZ6A.307    
!                                     ! the turbulently mixed layer.       ARN0F405.960    
     &,BTT_TOP(P_FIELD)               ! In-cloud buoyancy parameter at     KMKHZ6A.309    
!                                     ! the top of the turbulently         ARN0F405.961    
!                                     ! mixed layer.                       ARN0F405.962    
     &,BTC_TOP(P_FIELD)               ! Cloud fraction weighted buoyancy   KMKHZ6A.311    
!                                     ! parameter at the top of the b.l.   KMKHZ6A.312    
     &,DB_TOP_CLD(P_FIELD)            ! In-cloud buoyancy jump at the      KMKHZ6A.313    
!                                     ! top of the b.l.                    KMKHZ6A.314    
     &,CLD_FACTOR(P_FIELD)            ! Fraction of grid box potentially   KMKHZ6A.315    
!                                     ! giving evaporative entrainment.    KMKHZ6A.316    
     &,CHI_S_TOP(P_FIELD)             ! Mixing fraction of just saturate   KMKHZ6A.317    
!                                     ! mixture at top of the b.l.         KMKHZ6A.318    
     &,ZETA_S(P_FIELD)                ! Non-cloudy fraction of mixing      KMKHZ6A.319    
!                                     ! layer for surface forced           KMKHZ6A.320    
!                                     ! entrainment term.                  KMKHZ6A.321    
     &,ZETA_R(P_FIELD)                ! Non-cloudy fraction of mixing      KMKHZ6A.322    
!                                     ! layer for cloud top radiative      KMKHZ6A.323    
!                                     ! cooling entrainment term.          KMKHZ6A.324    
     &,ALPHA_R(P_FIELD)               ! Fraction of the cloud top          KMKHZ6A.325    
!                                     ! radiative cooling assumed to       KMKHZ6A.326    
!                                     ! act above the minimum turbulent    KMKHZ6A.327    
!                                     ! flux level.                        KMKHZ6A.328    
     &,ZC(P_FIELD)                    ! Cloud depth (not cloud fraction    KMKHZ6A.329    
!                                     ! weighted).                         KMKHZ6A.330    
     &,T_LCL(P_FIELD)                 ! Temperature at liftng condensati   KMKHZ6A.331    
!                                     ! level.                             KMKHZ6A.332    
     &,P_LCL(P_FIELD)                 ! Pressure at lifting condensation   KMKHZ6A.333    
!                                     ! level.                             KMKHZ6A.334    
     &,ZHSC(P_FIELD)                  ! Height of cloud layer top above    ARN0F405.963    
!                                     ! surface (m).                       ARN0F405.964    
     &,DSVL_TOP(P_FIELD)              ! s_VL jump at cloud layer top(K)    ARN0F405.965    
     &,DSCDEPTH(P_FIELD)              ! Depth of cloud layer (m).          ARN0F405.966    
     &,DB_DSCT(P_FIELD)               ! Buoyancy jump at the top of the    ARN0F405.967    
!                                     ! surface mixed layer.               ARN0F405.968    
     &,SVL(P_FIELD,BL_LEVELS)         ! Liquid/frozen water virtual        ARN0F405.969    
!                                     ! static energy over CP.             ARN0F405.970    
     &,DSVL_KP2(P_FIELD)              ! Liquid/frozen water virtual        ARN0F405.971    
!                                     ! static energy gradient over CP.    ARN0F405.972    
     &,DF_DSCT_OVER_CP(P_FIELD)       ! Radiative flux change at           ARN0F405.973    
!                                     ! decoupled stratocumulus top        ARN0F405.974    
!                                     ! divided by c_P.                    ARN0F405.975    
     &,BT_DSCT(P_FIELD)               ! Buoyancy parameter at the top of   ARN0F405.976    
!                                     ! the decoupled Sc.                  ARN0F405.977    
     &,BTT_DSCT(P_FIELD)              ! In-cloud buoyancy parameter at     ARN0F405.978    
!                                     ! the top of the decoupled Sc.       ARN0F405.979    
     &,BTC_DSCT(P_FIELD)              ! Cloud fraction weighted buoyancy   ARN0F405.980    
!                                     ! parameter at the top of the        ARN0F405.981    
!                                     ! decoupled Sc.                      ARN0F405.982    
     &,DB_DSCT_CLD(P_FIELD)           ! In-cloud buoyancy jump at the      ARN0F405.983    
!                                     ! top of the decoupled Sc.           ARN0F405.984    
     &,CHI_S_DSCT(P_FIELD)            ! Mixing fraction of just            ARN0F405.985    
!                                     ! saturated mixture at top of        ARN0F405.986    
!                                     ! the decoupled Sc.                  ARN0F405.987    
     &,ZETA_R_DSC(P_FIELD)            ! Non-cloudy fraction of decoupled   ARN0F405.988    
!                                     ! Sc layer for cloud top radiative   ARN0F405.989    
!                                     ! cooling entrainment term.          ARN0F405.990    
     &,ALPHA_R_DSC(P_FIELD)           ! Fraction of the cloud top          ARN0F405.991    
!                                     ! radiative cooling assumed to       ARN0F405.992    
!                                     ! act above the minimum turbulent    ARN0F405.993    
!                                     ! flux level for the decoupled Sc.   ARN0F405.994    
     &,ZC_DSC(P_FIELD)                ! Cloud depth (not cloud fraction    ARN0F405.995    
!                                     ! weighted).                         ARN0F405.996    
     &,Z_CLD_DSC(P_FIELD)             ! Cloud fraction weighted            ARN0F405.997    
!                                     ! thickness of the decoupled Sc      ARN0F405.998    
!                                     ! layer.                             ARN0F405.999    
     &,CLD_FACTOR_DSC(P_FIELD)        ! Fraction of grid box potentially   ARN0F405.1000   
!                                     ! giving evaporative entrainment.    ARN0F405.1001   
     &,ZHPAR(P_FIELD)                 ! Temporary store of ZH before LCL   ARN0F405.1002   
!                                     ! test.                              ARN0F405.1003   
!                                                                          KMKHZ6A.337    
      INTEGER                                                              KMKHZ6A.338    
     & K_CLOUD_TOP(P_FIELD)      ! Level number of top of b.l. cloud.      KMKHZ6A.339    
     &,NLCL(P_FIELD)             ! No. of model layers below the lifting   KMKHZ6A.340    
!                                ! condensation level.                     KMKHZ6A.341    
     &,NTPAR(P_FIELD)            ! Temporary location to save initial      ARN0F405.1004   
!                                ! NTML before LCL test.                   ARN0F405.1005   
                                                                           KMKHZ6A.342    
!                                                                          KMKHZ6A.343    
!  (b) Scalars.                                                            KMKHZ6A.344    
!                                                                          KMKHZ6A.345    
      REAL                                                                 KMKHZ6A.346    
     & VIRT_FACTOR       ! Temporary in calculation of buoyancy            KMKHZ6A.347    
!                        ! parameters.                                     KMKHZ6A.348    
     &,DTLDZ             ! Vertical gradient of TL in a well-mixed         KMKHZ6A.349    
!                        ! layer.                                          KMKHZ6A.350    
     &,DQW               ! Total water content change across layer         KMKHZ6A.351    
!                        ! interface.                                      KMKHZ6A.352    
     &,DTL               ! Liquid/ice static energy change across          KMKHZ6A.353    
!                        ! layer interface.                                KMKHZ6A.354    
     &,DQCL              ! Cloud liquid water change across layer          KMKHZ6A.355    
!                        ! interface.                                      KMKHZ6A.356    
     &,DQCF              ! Cloud frozen water change across layer          KMKHZ6A.357    
!                        ! interface.                                      KMKHZ6A.358    
     &,VAP_PRESS         ! Vapour pressure.                                KMKHZ6A.359    
     &,GRAD_CLD          ! Humidity gradient in layer above LCL.           KMKHZ6A.360    
     &,GRAD_SUB          ! Humidity gradient in layer below LCL.           KMKHZ6A.361    
     &,Q_VAP_PARC        ! Vapour content of parcel.                       ARN0F405.1006   
     &,Q_LIQ_PARC        ! Condensed water content of parcel.              ARN0F405.1007   
     &,T_PARC            ! Temperature of parcel.                          ARN0F405.1008   
     &,T_DENS_PARC       ! Density potential temperature of parcel.        ARN0F405.1009   
     &,T_DENS_ENV        ! Density potential temperature of environment.   ARN0F405.1010   
     &,DENV_BYDZ         ! Gradient of density potential                   ARN0F405.1011   
!                        ! temperature in the environment.                 ARN0F405.1012   
     &,DPAR_BYDZ         ! Gradient of density potential                   ARN0F405.1013   
!                        ! temperature of the parcel.                      ARN0F405.1014   
     &,D_SIEMS           ! Siems et al. (1990) cloud-top entrainment       ARN0F405.1015   
!                        ! instability parameter.                          ARN0F405.1016   
     &,DSVL_KP1          ! s_VL gradient between previous layers.          ARN0F405.1017   
!                                                                          KMKHZ6A.364    
      INTEGER                                                              KMKHZ6A.365    
     & I       ! Loop counter (horizontal field index).                    KMKHZ6A.366    
     &,J       ! Offset counter in certain I loops.                        KMKHZ6A.367    
     &,K       ! Loop counter (vertical level index).                      KMKHZ6A.368    
     &,KM1     ! K-1                                                       KMKHZ6A.369    
     &,MBL     ! Maximum number of model layers allowed in the rapidly     KMKHZ6A.370    
!              ! mixing layer; set to BL_LEVELS-1.                         KMKHZ6A.371    
     &,INV_DROP   ! Set to 1 if inversion spread over 2 levels.            ARN0F405.1018   
     &,K_RAD_SMLT ! Highest SML level for radiative divergence calc.       ARN0F405.1019   
     &,K_RAD_LIM                                                           ARN0F405.1020   
!                                                                          KMKHZ6A.372    
!-----------------------------------------------------------------------   KMKHZ6A.373    
!!  0.  Check that the scalars input to define the grid are consistent.    KMKHZ6A.374    
!!      See comments to routine SF_EXCH for details.                       KMKHZ6A.375    
!-----------------------------------------------------------------------   KMKHZ6A.376    
                                                                           KMKHZ6A.377    
      IF (LTIMER) THEN                                                     KMKHZ6A.378    
        CALL TIMER('KMKHZ   ',3)                                           KMKHZ6A.379    
      ENDIF                                                                KMKHZ6A.380    
                                                                           KMKHZ6A.381    
!  Set MBL, "maximum number of boundary levels" for the purposes of        KMKHZ6A.382    
!  boundary layer height calculation.                                      KMKHZ6A.383    
                                                                           KMKHZ6A.384    
      MBL = BL_LEVELS - 1                                                  KMKHZ6A.385    
                                                                           KMKHZ6A.386    
!                                                                          KMKHZ6A.387    
!-----------------------------------------------------------------------   KMKHZ6A.388    
!! 0.1 Set TOPBL to .FALSE. and calculate boundary layer top using         KMKHZ6A.389    
!!     a non-local, plume method.                                          ARN0F405.1021   
! ----------------------------------------------------------------------   KMKHZ6A.391    
!                                                                          KMKHZ6A.392    
      DO I = P1,P1-1+P_POINTS                                              KMKHZ6A.393    
        SVL_PLUME(I) = TL(I,1) + GRCP * 0.5 * DZL(I,1) + A_PLUME +         ARN0F405.1022   
     &                 MIN( MAX_T_GRAD * ZH(I) , B_PLUME * TV1_SD(I) )     KMKHZ6A.396    
                                                                           ARN0F405.1023   
!                                                                          KMKHZ6A.397    
!-----------------------------------------------------------------------   KMKHZ6A.398    
!! 0.2 Calculate temperature and pressure of lifting condensation level    KMKHZ6A.399    
!!     using approximations from Bolton (1980)                             KMKHZ6A.400    
!-----------------------------------------------------------------------   KMKHZ6A.401    
!                                                                          KMKHZ6A.402    
        VAP_PRESS = Q(I,1) * P(I,1) / (100.0*EPSILON)                      KMKHZ6A.403    
        IF (VAP_PRESS .GT .0.0) THEN                                       KMKHZ6A.404    
          T_LCL(I) =  2840.0/(ALOG(T(I,1))/KAPPA-ALOG(VAP_PRESS)-4.805)    KMKHZ6A.405    
     &                + 55.0                                               KMKHZ6A.406    
          P_LCL(I) = P(I,1) * (T_LCL(I)/T(I,1))**(1.0/KAPPA)               KMKHZ6A.407    
        ELSE                                                               KMKHZ6A.408    
          P_LCL(I) = P_HALF(I,1)                                           KMKHZ6A.409    
        ENDIF                                                              KMKHZ6A.410    
        PAR_SVL_KM1(I) = SVL_PLUME(I) * ( 1.0 + C_VIRTUAL*Q(I,1) -         ARN0F405.1024   
     &                                          QCL(I,1) - QCF(I,1) )      ARN0F405.1025   
        ENV_SVL_KM1(I) = TL(I,1) + GRCP * 0.5 * DZL(I,1)                   ARN0F405.1026   
        CUMULUS(I)= .FALSE.                                                ARN0F405.1027   
        TOPBL(I) = .FALSE.                                                 KMKHZ6A.412    
        NTML(I) = 1                                                        KMKHZ6A.413    
        NLCL(I) = 1                                                        KMKHZ6A.414    
        Z_LCL(I) = Z_HALF(I,1)                                             ARN0F405.1028   
      ENDDO                                                                KMKHZ6A.415    
!                                                                          KMKHZ6A.416    
!-----------------------------------------------------------------------   KMKHZ6A.417    
!! 0.3 Now compare plume s_VL with each model layer s_VL in turn to        KMKHZ6A.418    
!!     find the first time that plume has negative buoyancy.               KMKHZ6A.419    
!-----------------------------------------------------------------------   KMKHZ6A.420    
!                                                                          KMKHZ6A.421    
      DO  K = 2,BL_LEVELS                                                  KMKHZ6A.422    
        CALL QSAT(QS(P1),T(P1,K),P(P1,K),P_POINTS)                         ARN0F405.1029   
        DO I = P1,P1-1+P_POINTS                                            KMKHZ6A.423    
          IF ( P_LCL(I) .LT. P_HALF(I,K) ) THEN                            KMKHZ6A.424    
!           !-----------------------------------------------------------   ARN0F405.1030   
!           ! Below the lifting condensation level                         ARN0F405.1031   
!           ! potential temperature is constant.                           ARN0F405.1032   
!           !-----------------------------------------------------------   ARN0F405.1033   
            T_PARC = SVL_PLUME(I) - GRCP * Z_FULL(I,K)                     ARN0F405.1034   
            Q_VAP_PARC = Q(I,1)                                            ARN0F405.1035   
            Q_LIQ_PARC = 0.0                                               ARN0F405.1036   
            Z_LCL(I) = Z_HALF(I,K)                                         KMKHZ6A.425    
            NLCL(I) = K-1                                                  KMKHZ6A.426    
            ABOVE_LCL(I) = .FALSE.                                         ARN0F405.1037   
          ELSE                                                             ARN0F405.1038   
!           !-----------------------------------------------------------   ARN0F405.1039   
!           ! Above the lifting condenstion level                          ARN0F405.1040   
!           ! calculate parcel potential temperature by linearising        ARN0F405.1041   
!           ! q_sat about the environmental temperature.                   ARN0F405.1042   
!           !-----------------------------------------------------------   ARN0F405.1043   
            T_PARC = ( SVL_PLUME(I) - GRCP * Z_FULL(I,K)                   ARN0F405.1044   
     &                 + LCRCP * (QW(I,1) - QS(I) + DQSDT(I,K)*T(I,K))     ARN0F405.1045   
     &               ) / (1.0 + LCRCP*DQSDT(I,K))                          ARN0F405.1046   
            IF (T_PARC .LT. TM) THEN                                       ARN0F405.1047   
              T_PARC = ( SVL_PLUME(I) - GRCP * Z_FULL(I,K)                 ARN0F405.1048   
     &                   + LSRCP * (QW(I,1) - QS(I) + DQSDT(I,K)*T(I,K))   ARN0F405.1049   
     &                 ) / (1.0 + LSRCP*DQSDT(I,K))                        ARN0F405.1050   
          ENDIF                                                            KMKHZ6A.427    
            Q_VAP_PARC = QS(I) + DQSDT(I,K) * (T_PARC - T(I,K))            ARN0F405.1051   
            Q_LIQ_PARC = QW(I,1) - Q_VAP_PARC                              ARN0F405.1052   
            ABOVE_LCL(I) = .TRUE.                                          ARN0F405.1053   
          ENDIF                                                            ARN0F405.1054   
!                                                                          KMKHZ6A.428    
          T_DENS_PARC = T_PARC *                                           ARN0F405.1055   
     &                  (1.0 + C_VIRTUAL*Q_VAP_PARC - Q_LIQ_PARC)          ARN0F405.1056   
          T_DENS_ENV = T(I,K) *                                            ARN0F405.1057   
     &                  (1.0 + C_VIRTUAL*Q(I,K) - QCL(I,K) - QCF(I,K))     ARN0F405.1058   
!         !-------------------------------------------------------------   ARN0F405.1059   
!         ! Find vertical gradients in parcel and environment SVL          ARN0F405.1060   
!         ! (using values from level below (i.e. K-1)).                    ARN0F405.1061   
!         !-------------------------------------------------------------   ARN0F405.1062   
          DPAR_BYDZ = (T_DENS_PARC + GRCP*Z_FULL(I,K) -                    ARN0F405.1063   
     &                 PAR_SVL_KM1(I)) / (Z_FULL(I,K) - Z_FULL(I,K-1))     ARN0F405.1064   
          DENV_BYDZ = (T_DENS_ENV + GRCP*Z_FULL(I,K) -                     ARN0F405.1065   
     &                 ENV_SVL_KM1(I)) / (Z_FULL(I,K) - Z_FULL(I,K-1))     ARN0F405.1066   
          IF ( .NOT.TOPBL(I) .AND.                                         KMKHZ6A.432    
     &         (  ( T_DENS_PARC-T_DENS_ENV .LE. 0.0 ) .OR.                 ARN0F405.1067   
!                                                                          ARN0F405.1068   
!                      plume non buoyant                                   ARN0F405.1069   
!                                                                          ARN0F405.1070   
     &         (ABOVE_LCL(I) .AND. (DENV_BYDZ .GT. 1.25*DPAR_BYDZ)) .OR.   ARN0F405.1071   
!                                                                          ARN0F405.1072   
!                      or environmental virtual temperature gradient       ARN0F405.1073   
!                      significantly larger than parcel gradient           ARN0F405.1074   
!                      above lifting condensation level                    ARN0F405.1075   
!                                                                          ARN0F405.1076   
     &           (K .GT. MBL)                                              KMKHZ6A.438    
!                      or max no. of model layers in b.l. reached          ARN0F405.1077   
     &         )                                                           KMKHZ6A.440    
     &         ) THEN                                                      KMKHZ6A.441    
!                                                                          KMKHZ6A.442    
            TOPBL(I) = .TRUE.                                              KMKHZ6A.443    
            ZH(I) = Z_HALF(I,K)                                            KMKHZ6A.444    
            NTML(I) = K-1                                                  KMKHZ6A.445    
          ENDIF                                                            KMKHZ6A.446    
          ENV_SVL_KM1(I) = T_DENS_ENV + GRCP*Z_FULL(I,K)                   ARN0F405.1078   
          PAR_SVL_KM1(I) = T_DENS_PARC + GRCP*Z_FULL(I,K)                  ARN0F405.1079   
        ENDDO                                                              KMKHZ6A.448    
      ENDDO                                                                KMKHZ6A.449    
!-----------------------------------------------------------------------   KMKHZ6A.450    
!! 0.3a Look for decoupled cloudy mixed layer above b.l. top at ZH:        ARN0F405.1080   
!!      find cloud base above surface mixed layer inversion,               ARN0F405.1081   
!!        i.e. above NTML+1,                                               ARN0F405.1082   
!!      then cloud top (i.e. CF < SC_CFTOL)                                ARN0F405.1083   
!!      and finally check that cloud is well mixed.                        ARN0F405.1084   
!-----------------------------------------------------------------------   ARN0F405.1085   
!      Initialise variables and calculate SVL: conserved variable used     ARN0F405.1086   
!      to test for well mixed layers.                                      ARN0F405.1087   
!                                                                          ARN0F405.1088   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1089   
        CLOUD_BASE(I) = .FALSE.                                            ARN0F405.1090   
        DSC(I) = .FALSE.                                                   ARN0F405.1091   
        COUPLED(I) = .FALSE.                                               ARN0F405.1092   
        ZHSC(I) = 0.0                                                      ARN0F405.1093   
        NTDSC(I) = 0                                                       ARN0F405.1094   
      ENDDO                                                                ARN0F405.1095   
                                                                           ARN0F405.1096   
      DO K = 1,BL_LEVELS                                                   ARN0F405.1097   
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.1098   
         SVL(I,K) = TL(I,K) * ( 1.0 + C_VIRTUAL*QW(I,K) ) +                ARN0F405.1099   
     &           GRCP * Z_FULL(I,K)                                        ARN0F405.1100   
        ENDDO                                                              ARN0F405.1101   
      ENDDO                                                                ARN0F405.1102   
!                                                                          ARN0F405.1103   
      DO K=3,MBL                                                           ARN0F405.1104   
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.1105   
!       !--------------------------------------------------------------    ARN0F405.1106   
!       ! Find cloud base (where cloud here means CF > SC_CFTOL).          ARN0F405.1107   
!       !--------------------------------------------------------------    ARN0F405.1108   
          IF ( K .GT. NTML(I)+1 .AND. CF(I,K) .GT. SC_CFTOL                ARN0F405.1109   
     &                          .AND. .NOT.CLOUD_BASE(I)                   ARN0F405.1110   
!                                  not yet found cloud base                ARN0F405.1111   
     &                          .AND. .NOT.DSC(I) ) THEN                   ARN0F405.1112   
!                                  not yet found a Sc layer                ARN0F405.1113   
            CLOUD_BASE(I) = .TRUE.                                         ARN0F405.1114   
          ENDIF                                                            ARN0F405.1115   
          IF ( CLOUD_BASE(I) .AND. .NOT.DSC(I) .AND. (                     ARN0F405.1116   
!                  found cloud base but not yet reached cloud top          ARN0F405.1117   
     &                            (CF(I,K+1).LT.SC_CFTOL) )                ARN0F405.1118   
!                  got to cloud top                                        ARN0F405.1119   
     &       ) THEN                                                        ARN0F405.1120   
!           !-----------------------------------------------------------   ARN0F405.1121   
!           ! Look to see if at least top of cloud is well mixed:          ARN0F405.1122   
!           ! test SVL-gradient for top 2 pairs of levels, in case         ARN0F405.1123   
!           ! cloud top extends into the inversion.                        ARN0F405.1124   
!           ! Parcel descent in Section 4.0 below will determine depth     ARN0F405.1125   
!           ! of mixed layer.                                              ARN0F405.1126   
!           !----------------------------------------------------------    ARN0F405.1127   
            IF ( 2.0*(SVL(I,K)-SVL(I,K-1)) /                               ARN0F405.1128   
     &           (DZL(I,K)+DZL(I,K-1)) .LT. MIN_SVL_GRAD ) THEN            ARN0F405.1129   
              DSC(I) = .TRUE.                                              ARN0F405.1130   
              NTDSC(I) = K                                                 ARN0F405.1131   
              ZHSC(I)  = Z_HALF(I,K+1)                                     ARN0F405.1132   
            ELSEIF ( 2.0*(SVL(I,K-1)-SVL(I,K-2)) /                         ARN0F405.1133   
     &               (DZL(I,K-1)+DZL(I,K-2)) .LT. MIN_SVL_GRAD ) THEN      ARN0F405.1134   
              DSC(I) = .TRUE.                                              ARN0F405.1135   
              NTDSC(I) = K-1                                               ARN0F405.1136   
              ZHSC(I)  = Z_HALF(I,K)                                       ARN0F405.1137   
            ELSE                                                           ARN0F405.1138   
              CLOUD_BASE(I) = .FALSE.                                      ARN0F405.1139   
            ENDIF                                                          ARN0F405.1140   
          ENDIF                                                            ARN0F405.1141   
        ENDDO                                                              ARN0F405.1142   
      ENDDO                                                                ARN0F405.1143   
!-----------------------------------------------------------------------   ARN0F405.1144   
!! 0.4 Save parcel ascent top: this will be used to allow mixing and       ARN0F405.1145   
!!     entrainment into decoupled Sc of single layer thickness when it     ARN0F405.1146   
!!     occurs above Cu.                                                    ARN0F405.1147   
!-----------------------------------------------------------------------   ARN0F405.1148   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1149   
        ZHPAR(I) = ZH(I)                                                   ARN0F405.1150   
        NTPAR(I) = NTML(I)                                                 ARN0F405.1151   
      ENDDO                                                                ARN0F405.1152   
!                                                                          ARN0F405.1153   
!-----------------------------------------------------------------------   ARN0F405.1154   
!     Test height derived above against lifting condensation level         KMKHZ6A.451    
!-----------------------------------------------------------------------   KMKHZ6A.452    
      DO I = P1,P1-1+P_POINTS                                              KMKHZ6A.453    
!-----------------------------------------------------------------------   KMKHZ6A.454    
!     Check lifting condensation levels against height of parcel ascent,   KMKHZ6A.455    
!     if lifting condensation level lower than parcel ascent then decide   KMKHZ6A.456    
!     on type of cloudy layer. If lifting condensation level at or below   KMKHZ6A.457    
!     low grid point, assume fog layer and turbulent mixing. For           KMKHZ6A.458    
!     gradient tests assume any if LCL and top of parcel ascent is less    KMKHZ6A.459    
!     than two levels then stratocumulus.                                  KMKHZ6A.460    
!-----------------------------------------------------------------------   KMKHZ6A.461    
        IF ( (NTML(I)-NLCL(I) .GE. 2) .AND. (NLCL(I) .GT. 1) ) THEN        KMKHZ6A.462    
!-----------------------------------------------------------------------   KMKHZ6A.463    
!     Cloudy boundary layer, diagnose whether stratocumulus or cumulus.    KMKHZ6A.464    
!     For stratocumulus top of mixed layer = ZH                            KMKHZ6A.465    
!     For cumulus top of mixed layer = ZLCL                                KMKHZ6A.466    
!     Diagnosis is done by comparing gradients                             KMKHZ6A.467    
!-----------------------------------------------------------------------   KMKHZ6A.468    
          IF (NTML(I) .EQ. MBL) THEN                                       ARN0F405.1155   
            CUMULUS(I) = .TRUE.                                            ARN0F405.1156   
            ZH(I) = Z_LCL(I)                                               KMKHZ6A.470    
            NTML(I) = NLCL(I)                                              KMKHZ6A.471    
          ELSE                                                             KMKHZ6A.472    
            GRAD_CLD =  ABS( QW(I,NTML(I)) - QW(I,NLCL(I)) ) /             KMKHZ6A.473    
     &                 ( Z_FULL(I,NTML(I)) - Z_FULL(I,NLCL(I)) )           KMKHZ6A.474    
            GRAD_SUB =  ABS( QW(I,NLCL(I)) - QW(I,1) ) /                   KMKHZ6A.475    
     &                 ( Z_FULL(I,NLCL(I)) - Z_FULL(I,1) )                 KMKHZ6A.476    
            IF (GRAD_CLD .GT. 1.10*GRAD_SUB) THEN                          KMKHZ6A.477    
!-----------------------------------------------------------------------   KMKHZ6A.478    
!     Not well mixed, however it is possible that the depth of a well      KMKHZ6A.479    
!     mixed boundary layer has increased but not yet been mixed yet so     KMKHZ6A.480    
!     test gradient from next level down.                                  KMKHZ6A.481    
!-----------------------------------------------------------------------   KMKHZ6A.482    
                                                                           KMKHZ6A.483    
              GRAD_CLD =  ABS( QW(I,NTML(I)-1) - QW(I,NLCL(I)) ) /         KMKHZ6A.485    
     &                   ( Z_FULL(I,NTML(I)-1) - Z_FULL(I,NLCL(I)) )       KMKHZ6A.486    
                                                                           ARN0F405.1157   
              IF ( GRAD_CLD .GT. 1.10*GRAD_SUB) THEN                       KMKHZ6A.487    
!-----------------------------------------------------------------------   KMKHZ6A.488    
!      Diagnoss a cumulus layer and set mixed layer depth to Z_LCL         KMKHZ6A.489    
!-----------------------------------------------------------------------   KMKHZ6A.490    
                IF (P_LCL(I) .LT. (P(I,NLCL(I)))) THEN                     ARN0F405.1158   
!-----------------------------------------------------------------------   ARN0F405.1159   
!      If LCL is diagnosed in the upper half of the layer set Z_LCL to     ARN0F405.1160   
!      the height of the upper layer interface                             ARN0F405.1161   
!      (in code above LCL is always set to the lower interface).           ARN0F405.1162   
!-----------------------------------------------------------------------   ARN0F405.1163   
                  NLCL(I) = NLCL(I)+1                                      ARN0F405.1164   
                  Z_LCL(I) = Z_HALF(I,NLCL(I)+1)                           ARN0F405.1165   
              ENDIF                                                        KMKHZ6A.493    
                CUMULUS(I) = .TRUE.                                        ARN0F405.1166   
                ZH(I) = Z_LCL(I)                                           ARN0F405.1167   
                NTML(I) = NLCL(I)                                          ARN0F405.1168   
            ENDIF                                                          KMKHZ6A.494    
          ENDIF                                                            KMKHZ6A.495    
        ENDIF                                                              KMKHZ6A.496    
        ENDIF                                                              ARN0F405.1169   
      ENDDO                                                                KMKHZ6A.497    
!                                                                          KMKHZ6A.498    
      CALL QSAT(QS(P1),T(P1,1),P(P1,1),P_POINTS)                           KMKHZ6A.499    
!                                                                          KMKHZ6A.500    
!-----------------------------------------------------------------------   ARN0F405.1170   
!!  0.4a Check whether the inversion at NTML is spread over 2 levels.      ARN0F405.1171   
!!       If it is, we want the lower as it may indicate a deepening        ARN0F405.1172   
!!       layer which will deepen too fast if we jump up a level too        ARN0F405.1173   
!!       soon. Note that NTML does not change if it is at NLCL (ie. Cu).   ARN0F405.1174   
!-----------------------------------------------------------------------   ARN0F405.1175   
!                                                                          ARN0F405.1176   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1177   
        IF ( NTML(I).GT.1 .AND. .NOT.CUMULUS(I) ) THEN                     ARN0F405.1178   
          K=NTML(I)                                                        ARN0F405.1179   
          IF ( 2.0*(SVL(I,K)-SVL(I,K-1)) /                                 ARN0F405.1180   
     &         (DZL(I,K)+DZL(I,K-1)) .GT. MIN_SVL_GRAD ) THEN              ARN0F405.1181   
            NTML(I) = K-1                                                  ARN0F405.1182   
            ZH(I)  = Z_HALF(I,K)                                           ARN0F405.1183   
          ENDIF                                                            ARN0F405.1184   
        ENDIF                                                              ARN0F405.1185   
      ENDDO                                                                ARN0F405.1186   
!                                                                          ARN0F405.1187   
!-----------------------------------------------------------------------   ARN0F405.1188   
!! 0.4aa If no decoupled cloud layer above ZHPAR was found but the layer   ARN0F405.1189   
!!       to ZHPAR is cloudy, declare this layer a decoupled cloud layer    ARN0F405.1190   
!!       and set ZHSC and NTDSC accordingly.  Note that if the             ARN0F405.1191   
!!       subsequent tests indicate a well mixed cloud layer to the         ARN0F405.1192   
!!       surface, the decoupled layer will be switched off.                ARN0F405.1193   
!-----------------------------------------------------------------------   ARN0F405.1194   
!                                                                          ARN0F405.1195   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1196   
        IF ( .NOT.DSC(I) .AND. CF(I,NTPAR(I)) .GT. SC_CFTOL ) THEN         ARN0F405.1197   
          DSC(I)  = .TRUE.                                                 ARN0F405.1198   
                                                                           ARN0F405.1199   
          IF ( ZHPAR(I) .GT. ZH(I) .AND. NTPAR(I) .GT. 1 ) THEN            ARN0F405.1200   
!           ! May still need to lower this inversion, as at section 0.4a   ARN0F405.1201   
            K=NTPAR(I)                                                     ARN0F405.1202   
            IF ( 2.0*(SVL(I,K)-SVL(I,K-1)) /                               ARN0F405.1203   
     &           (DZL(I,K)+DZL(I,K-1)) .GT. MIN_SVL_GRAD ) THEN            ARN0F405.1204   
              NTPAR(I) = K - 1                                             ARN0F405.1205   
              ZHPAR(I)  = Z_HALF(I,K)                                      ARN0F405.1206   
            ENDIF                                                          ARN0F405.1207   
          ENDIF                                                            ARN0F405.1208   
          ZHSC(I) = ZHPAR(I)                                               ARN0F405.1209   
          NTDSC(I)= NTPAR(I)                                               ARN0F405.1210   
        ENDIF                                                              ARN0F405.1211   
      ENDDO                                                                ARN0F405.1212   
!-----------------------------------------------------------------------   ARN0F405.1213   
!! 0.4b Calculate the radiative flux changes across cloud top for the      ARN0F405.1214   
!!     stratocumulus layer and thence a first guess for the top-down       ARN0F405.1215   
!!     mixing depth of this layer, DSCDEPTH.                               ARN0F405.1216   
!-----------------------------------------------------------------------   ARN0F405.1217   
!     Initialise variables                                                 ARN0F405.1218   
!------------------------------                                            ARN0F405.1219   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1220   
        K_CLOUD_TOP(I) = 0                                                 ARN0F405.1221   
        DF_DSCT_OVER_CP(I) = 0.0                                           ARN0F405.1222   
      ENDDO                                                                ARN0F405.1223   
                                                                           ARN0F405.1224   
      DO K = 1,BL_LEVELS-1                                                 ARN0F405.1225   
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.1226   
                                                                           ARN0F405.1227   
          DF_OVER_CP(I,K) = DELTAP(I,K)/G * RAD_HR(I,K)                    ARN0F405.1228   
!         !-------------------------------------------------------------   ARN0F405.1229   
!         ! Find the layer with the greatest radiative flux jump and       ARN0F405.1230   
!         ! assume that this is the top decoupled Sc layer.  If this is    ARN0F405.1231   
!         ! above the surface mixed layer (SML) (which implies strong      ARN0F405.1232   
!         ! decoupling), limit the search to levels above the SML.         ARN0F405.1233   
!         !-------------------------------------------------------------   ARN0F405.1234   
          K_RAD_LIM = 0                                                    ARN0F405.1235   
          IF ( NTDSC(I) .GT. NTML(I) ) K_RAD_LIM = NTML(I)+1               ARN0F405.1236   
                                                                           ARN0F405.1237   
          IF ( DSC(I) .AND. K .GT. K_RAD_LIM .AND.                         ARN0F405.1238   
     &         K .LE. NTDSC(I)+2 .AND.                                     ARN0F405.1239   
     &         DF_OVER_CP(I,K) .GT. DF_DSCT_OVER_CP(I) ) THEN              ARN0F405.1240   
            K_CLOUD_TOP(I) = K                                             ARN0F405.1241   
            DF_DSCT_OVER_CP(I) = DF_OVER_CP(I,K)                           ARN0F405.1242   
          ENDIF                                                            ARN0F405.1243   
                                                                           ARN0F405.1244   
        ENDDO                                                              ARN0F405.1245   
      ENDDO                                                                ARN0F405.1246   
!-----------------------------------------------------------------------   ARN0F405.1247   
!     If cloud top extends into the level above NTDSC (so that the         ARN0F405.1248   
!     radiative divergence maximum is at NTDSC+1) but there is             ARN0F405.1249   
!     additional `cloud top' cooling at NTDSC, add this on to              ARN0F405.1250   
!     DF_DSCT_OVER_CP.                                                     ARN0F405.1251   
!-----------------------------------------------------------------------   ARN0F405.1252   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1253   
        IF ( DSC(I) .AND. K_CLOUD_TOP(I) .EQ. NTDSC(I)+1 ) THEN            ARN0F405.1254   
          K=NTDSC(I)                                                       ARN0F405.1255   
          DF_OVER_CP(I,K) = DELTAP(I,K)/G * RAD_HR(I,K)                    ARN0F405.1256   
          IF (DF_OVER_CP(I,K) .GT. 0.0 )                                   ARN0F405.1257   
     &      DF_DSCT_OVER_CP(I) = DF_DSCT_OVER_CP(I) + DF_OVER_CP(I,K)      ARN0F405.1258   
        ENDIF                                                              ARN0F405.1259   
      ENDDO                                                                ARN0F405.1260   
!-----------------------------------------------------------------------   ARN0F405.1261   
!     Set DSCDEPTH, the depth of the DSC layer.  Note that this estimate   ARN0F405.1262   
!     will be the length-scale used to calculate the entrainment rate      ARN0F405.1263   
!     (although the dependence is only weak) but that a more accurate      ARN0F405.1264   
!     plume descent (dependent on w_e) is subsequently used to determine   ARN0F405.1265   
!     the depth over which the top-down mixing profiles will be applied.   ARN0F405.1266   
!     If DSC is FALSE, DSCDEPTH = 0.  The plume descent here uses          ARN0F405.1267   
!     a radiative perturbation to the cloud-top SVL based roughly on a     ARN0F405.1268   
!     typical cloud-top residence time.  If the plume does not sink and    ARN0F405.1269   
!     the cloud is decoupled from the surface, then it is assumed to be    ARN0F405.1270   
!     stable, i.e. St rather than Sc, and no mixing or entrainment is      ARN0F405.1271   
!     applied to it.                                                       ARN0F405.1272   
!-----------------------------------------------------------------------   ARN0F405.1273   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1274   
        DSCDEPTH(I) = 0.0                                                  ARN0F405.1275   
        IF ( DSC(I) ) THEN                                                 ARN0F405.1276   
          IF (K_CLOUD_TOP(I) .GT. 0) THEN                                  ARN0F405.1277   
            SVL_PLUME(I) = SVL(I,NTDSC(I))                                 ARN0F405.1278   
     &             + CT_RESID * MIN( RAD_HR(I,K_CLOUD_TOP(I)), 0.0)        ARN0F405.1279   
          ELSE                                                             ARN0F405.1280   
            SVL_PLUME(I) = SVL(I,NTDSC(I))                                 ARN0F405.1281   
          ENDIF                                                            ARN0F405.1282   
                                                                           ARN0F405.1283   
          IF ( K_CLOUD_TOP(I) .EQ. NTDSC(I)+1 )                            ARN0F405.1284   
     &      SVL_PLUME(I)=SVL_PLUME(I)                                      ARN0F405.1285   
     &             + CT_RESID * MIN( RAD_HR(I,NTDSC(I)), 0.0)              ARN0F405.1286   
                                                                           ARN0F405.1287   
        ELSE                                                               ARN0F405.1288   
          SVL_PLUME(I)=0.0                                                 ARN0F405.1289   
        ENDIF                                                              ARN0F405.1290   
      ENDDO                                                                ARN0F405.1291   
                                                                           ARN0F405.1292   
      DO K=BL_LEVELS-1,1,-1                                                ARN0F405.1293   
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.1294   
          IF ( K.LT.NTDSC(I)       ! layer must at least 2 levels deep     ARN0F405.1295   
     &             .AND. SVL_PLUME(I)-SVL(I,K) .LT. 0.01 ) THEN            ARN0F405.1296   
            DSCDEPTH(I) = ZHSC(I) - Z_HALF(I,K)                            ARN0F405.1297   
          ENDIF                                                            ARN0F405.1298   
        ENDDO                                                              ARN0F405.1299   
      ENDDO                                                                ARN0F405.1300   
!-----------------------------------------------------------------------   ARN0F405.1301   
!! 0.4c If the layer to ZH is cloud capped and there is no Cu or           ARN0F405.1302   
!!     decoupled Sc above (indicated by NTML=NTDSC), set spare logical     ARN0F405.1303   
!!     CLOUD_BASE to true and try looking for a weak,                      ARN0F405.1304   
!!     possibly diurnally decoupling, inversion below ZH using local       ARN0F405.1305   
!!     gradients method.  If one is found, lower ZH to this decoupling     ARN0F405.1306   
!!     inversion leaving ZHSC at cloud-top.                                ARN0F405.1307   
!!     If DSCDEPTH was found to be zero above, set DSCDEPTH=ZHSC-ZH.       ARN0F405.1308   
!-----------------------------------------------------------------------   ARN0F405.1309   
      K=1                                                                  ARN0F405.1310   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1311   
        CLOUD_BASE(I) = .FALSE.                                            ARN0F405.1312   
        IF ( NTML(I) .EQ. NTDSC(I) ) THEN                                  ARN0F405.1313   
!-----------------------------------------------------------------------   ARN0F405.1314   
!       Well mixed cloudy layer mixing up to ZH: reset decoupled layer     ARN0F405.1315   
!       parameters ready to look for decoupling inversion below ZH.        ARN0F405.1316   
!-----------------------------------------------------------------------   ARN0F405.1317   
          DSC(I)  = .FALSE.                                                ARN0F405.1318   
          ZHSC(I) = 0.0                                                    ARN0F405.1319   
          NTDSC(I)= 0                                                      ARN0F405.1320   
          CLOUD_BASE(I) = .TRUE.                                           ARN0F405.1321   
        ENDIF                                                              ARN0F405.1322   
        DSVL_KP2(I)= 2.0*(SVL(I,K+2) - SVL(I,K+1)) /                       ARN0F405.1323   
     &                   (DZL(I,K+2) + DZL(I,K+1))                         ARN0F405.1324   
      ENDDO                                                                ARN0F405.1325   
                                                                           ARN0F405.1326   
      DO K=2,MBL-1                                                         ARN0F405.1327   
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.1328   
!----------------------------------------------------------------------    ARN0F405.1329   
!! 0.4d Local gradients method: find where s_VL gradient decreases from    ARN0F405.1330   
!!      a non-trivial positive value (ie. greater than MAX_T_GRAD).        ARN0F405.1331   
!!      The inversion is then at the max s_VL-gradient height.             ARN0F405.1332   
!----------------------------------------------------------------------    ARN0F405.1333   
          DSVL_KP1 = DSVL_KP2(I)                                           ARN0F405.1334   
          DSVL_KP2(I) = 2.0*(SVL(I,K+2) - SVL(I,K+1)) /                    ARN0F405.1335   
     &                      (DZL(I,K+2) + DZL(I,K+1))                      ARN0F405.1336   
          IF ( K.LT.NTML(I) .AND. .NOT.DSC(I) .AND. CLOUD_BASE(I) .AND.    ARN0F405.1337   
!                     Below apparently well-mixed cloud-layer top          ARN0F405.1338   
     &      (DSVL_KP1 .GT. MAX_T_GRAD .AND. DSVL_KP2(I) .LT. DSVL_KP1)     ARN0F405.1339   
!                     and gradient conditions satisfied                    ARN0F405.1340   
     &       ) THEN                                                        ARN0F405.1341   
            DSC(I) = .TRUE.                                                ARN0F405.1342   
            NTDSC(I) = NTML(I)                                             ARN0F405.1343   
            ZHSC(I)  = Z_HALF(I,NTDSC(I)+1)                                ARN0F405.1344   
            NTML(I) = K                                                    ARN0F405.1345   
            ZH(I)  = Z_HALF(I,NTML(I)+1)                                   ARN0F405.1346   
!           !-----------------------------------------------------------   ARN0F405.1347   
!           ! As in section 0.4c, check whether this ZH is at the base     ARN0F405.1348   
!           ! of the inversion and if it is not, lower it.                 ARN0F405.1349   
!           !-----------------------------------------------------------   ARN0F405.1350   
            IF ( 2.0*(SVL(I,K) - SVL(I,K-1)) /                             ARN0F405.1351   
     &               (DZL(I,K) + DZL(I,K-1)) .GT. MIN_SVL_GRAD ) THEN      ARN0F405.1352   
              NTML(I) = K-1                                                ARN0F405.1353   
              ZH(I) = Z_HALF(I,K)                                          ARN0F405.1354   
            ENDIF                                                          ARN0F405.1355   
!           !-----------------------------------------------------------   ARN0F405.1356   
!           ! Reset DSCDEPTH, if top-down mixing is only weak at present   ARN0F405.1357   
!           !-----------------------------------------------------------   ARN0F405.1358   
            IF ( DSCDEPTH(I) .EQ. 0.0 )                                    ARN0F405.1359   
     &               DSCDEPTH(I) = ZHSC(I) - Z_HALF(I,NTDSC(I)-1)          ARN0F405.1360   
          ENDIF                                                            ARN0F405.1361   
        ENDDO                                                              ARN0F405.1362   
      ENDDO                                                                ARN0F405.1363   
!----------------------------------------------------------------------    ARN0F405.1364   
!!  0.4e Tidy up variables associated with decoupled layer.                ARN0F405.1365   
!----------------------------------------------------------------------    ARN0F405.1366   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1367   
        IF (CUMULUS(I) .AND. DSC(I))                                       ARN0F405.1368   
     &    DSCDEPTH(I)=MIN( DSCDEPTH(I),ZHSC(I)-Z_HALF(I,NTML(I)+2) )       ARN0F405.1369   
        IF ( DSCDEPTH(I) .EQ. 0.0 ) THEN                                   ARN0F405.1370   
          IF (NTDSC(I) .EQ. NTPAR(I)) THEN                                 ARN0F405.1371   
!           !----------------------------------------------------------    ARN0F405.1372   
!           ! Indicates a Sc layer over Cu: force mixing over single       ARN0F405.1373   
!           ! layer.                                                       ARN0F405.1374   
!           !----------------------------------------------------------    ARN0F405.1375   
            DSCDEPTH(I) = DZL(I,NTDSC(I))                                  ARN0F405.1376   
          ELSE                                                             ARN0F405.1377   
            DSC(I)=.FALSE.                                                 ARN0F405.1378   
            NTDSC(I)=0                                                     ARN0F405.1379   
            ZHSC(I)=0.0                                                    ARN0F405.1380   
            DF_DSCT_OVER_CP(I) = 0.0                                       ARN0F405.1381   
          ENDIF                                                            ARN0F405.1382   
        ENDIF                                                              ARN0F405.1383   
!       !---------------------------------------------------------------   ARN0F405.1384   
!       ! These next two tests should not be necessary but put in to be    ARN0F405.1385   
!       ! fail-safe.                                                       ARN0F405.1386   
!       !---------------------------------------------------------------   ARN0F405.1387   
        IF (.NOT.DSC(I)) DSCDEPTH(I) = 0.0                                 ARN0F405.1388   
        IF (NTDSC(I) .EQ. NTML(I)) THEN                                    ARN0F405.1389   
!         ! Clearly modelling the same layer                               ARN0F405.1390   
          DSC(I) = .FALSE.                                                 ARN0F405.1391   
          NTDSC(I) = 0                                                     ARN0F405.1392   
          ZHSC(I) = 0.0                                                    ARN0F405.1393   
          DF_DSCT_OVER_CP(I) = 0.0                                         ARN0F405.1394   
          DSCDEPTH(I) = 0.0                                                ARN0F405.1395   
        ENDIF                                                              ARN0F405.1396   
      ENDDO                                                                ARN0F405.1397   
!                                                                          ARN0F405.1398   
!----------------------------------------------------------------------    ARN0F405.1399   
!     If decoupled cloud layer found test to see if it is, in fact,        ARN0F405.1400   
!     coupled to the surface mixed-layer: if SVL difference between        ARN0F405.1401   
!     NTML and NTDSC is less than 0.2K then assume coupled.  This will     ARN0F405.1402   
!     mean that the surface-driven entrainment term will be applied at     ARN0F405.1403   
!     ZHSC, no entrainment will be applied at ZH and ZHSC will be the      ARN0F405.1404   
!     lengthscale used in the entrainment inputs.                          ARN0F405.1405   
!----------------------------------------------------------------------    ARN0F405.1406   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1407   
        COUPLED(I) = .FALSE.                                               ARN0F405.1408   
        IF ( DSC(I) ) THEN                                                 ARN0F405.1409   
!         !------------------------------------------------------------    ARN0F405.1410   
!         ! Note this IF test structure is required because if DSC is      ARN0F405.1411   
!         ! false then NTDSC = 0 and cannot be used to index SVL.          ARN0F405.1412   
!         !------------------------------------------------------------    ARN0F405.1413   
          IF ( SVL(I,NTDSC(I)) - SVL(I,NTML(I)) .LT. 0.2 )                 ARN0F405.1414   
     &       COUPLED(I) = .TRUE.                                           ARN0F405.1415   
        ENDIF                                                              ARN0F405.1416   
      ENDDO                                                                ARN0F405.1417   
!                                                                          ARN0F405.1418   
      DO I = P1,P1+P_POINTS-1                                              KMKHZ6A.501    
!                                                                          KMKHZ6A.502    
!-----------------------------------------------------------------------   KMKHZ6A.503    
!! 0.5 Calculate the within-layer vertical gradients of cloud liquid       KMKHZ6A.504    
!!     and frozen water for the layer 1                                    KMKHZ6A.505    
!-----------------------------------------------------------------------   KMKHZ6A.506    
!                                                                          KMKHZ6A.507    
        VIRT_FACTOR = 1.0 + C_VIRTUAL*Q(I,1) - QCL(I,1) - QCF(I,1)         KMKHZ6A.508    
!                                                                          KMKHZ6A.509    
        GRAD_T_ADJ(I) = MIN( MAX_T_GRAD ,                                  KMKHZ6A.510    
     &                       A_GRAD_ADJ * T1_SD(I) / ZH(I) )               KMKHZ6A.511    
!        IF (T1_SD(I) .GT. 0.0) THEN                                       KMKHZ6A.512    
!          GRAD_Q_ADJ(I) = (Q1_SD(I) / T1_SD(I)) * GRAD_T_ADJ(I)           KMKHZ6A.513    
!        ELSE                                                              KMKHZ6A.514    
          GRAD_Q_ADJ(I) = 0.0                                              KMKHZ6A.515    
!        ENDIF                                                             KMKHZ6A.516    
        DTLDZ = -GRCP + GRAD_T_ADJ(I)                                      KMKHZ6A.517    
        DQCLDZ(I,1) = -LGF * ( DTLDZ*DQSDT(I,1) +                          ARN0F405.1419   
     &                   G*QS(I)/(R*T(I,1)*VIRT_FACTOR) )                  KMKHZ6A.519    
     &                  / (1.0 + LCRCP*DQSDT(I,1))                         KMKHZ6A.520    
        DQCFDZ(I,1) = -FGF * ( DTLDZ*DQSDT(I,1) +                          ARN0F405.1420   
     &                   G*QS(I)/(R*T(I,1)*VIRT_FACTOR) )                  KMKHZ6A.522    
     &                  / (1.0 + LSRCP*DQSDT(I,1))                         KMKHZ6A.523    
!                                                                          KMKHZ6A.524    
!-----------------------------------------------------------------------   KMKHZ6A.525    
!! 0.6 Calculate the cloud liquid and frozen water contents at the         KMKHZ6A.526    
!!     top and bottom of layer 1                                           KMKHZ6A.527    
!-----------------------------------------------------------------------   KMKHZ6A.528    
!                                                                          KMKHZ6A.529    
        IF ( QCL(I,1) + QCF(I,1) .GT. 0.0 ) THEN                           KMKHZ6A.530    
          CFL(I,1) = CF(I,1) * QCL(I,1)/(QCL(I,1)+QCF(I,1))                KMKHZ6A.531    
          CFF(I,1) = CF(I,1) * QCF(I,1)/(QCL(I,1)+QCF(I,1))                KMKHZ6A.532    
        ELSE                                                               KMKHZ6A.533    
          CFL(I,1) = 0.0                                                   KMKHZ6A.534    
          CFF(I,1) = 0.0                                                   KMKHZ6A.535    
        ENDIF                                                              KMKHZ6A.536    
!                                                                          KMKHZ6A.537    
        IF (CFL(I,1) .GT. 0.0) THEN                                        KMKHZ6A.538    
          QCL_IC_TOP(I,1) = QCL(I,1) / CFL(I,1) +                          KMKHZ6A.539    
     &                       0.5*DZL(I,1)*DQCLDZ(I,1)                      KMKHZ6A.540    
        ELSE                                                               KMKHZ6A.541    
          QCL_IC_TOP(I,1) = 0.0                                            KMKHZ6A.542    
        ENDIF                                                              KMKHZ6A.543    
!                                                                          KMKHZ6A.544    
        IF (CFF(I,1) .GT. 0.0) THEN                                        KMKHZ6A.545    
          QCF_IC_TOP(I,1) = QCF(I,1) / CFF(I,1) +                          KMKHZ6A.546    
     &                       0.5*DZL(I,1)*DQCFDZ(I,1)                      KMKHZ6A.547    
        ELSE                                                               KMKHZ6A.548    
          QCF_IC_TOP(I,1) = 0.0                                            KMKHZ6A.549    
        ENDIF                                                              KMKHZ6A.550    
!                                                                          KMKHZ6A.551    
        QCL_IC_BOT(I,1) = 0.0                                              KMKHZ6A.552    
        QCF_IC_BOT(I,1) = 0.0                                              KMKHZ6A.553    
!                                                                          KMKHZ6A.554    
      ENDDO                                                                KMKHZ6A.566    
!                                                                          KMKHZ6A.567    
!-----------------------------------------------------------------------   KMKHZ6A.568    
!! 1.  First loop round boundary layer levels.                             KMKHZ6A.569    
!-----------------------------------------------------------------------   KMKHZ6A.570    
!                                                                          KMKHZ6A.571    
      DO K=2,BL_LEVELS                                                     KMKHZ6A.572    
!                                                                          KMKHZ6A.573    
        CALL QSAT(QS(P1),T(P1,K),P(P1,K),P_POINTS)                         KMKHZ6A.574    
!                                                                          KMKHZ6A.575    
        DO I=P1,P1+P_POINTS-1                                              KMKHZ6A.576    
!                                                                          KMKHZ6A.577    
!-----------------------------------------------------------------------   KMKHZ6A.578    
!! 1.4 Calculate the within-layer vertical gradients of cloud liquid       KMKHZ6A.579    
!!     and frozen water for the current layer                              KMKHZ6A.580    
!-----------------------------------------------------------------------   KMKHZ6A.581    
!                                                                          KMKHZ6A.582    
          VIRT_FACTOR = 1.0 + C_VIRTUAL*Q(I,K) - QCL(I,K) - QCF(I,K)       KMKHZ6A.583    
!                                                                          KMKHZ6A.584    
          IF (K. LE. NTML(I)) THEN                                         KMKHZ6A.585    
            DTLDZ = -GRCP + GRAD_T_ADJ(I)                                  KMKHZ6A.586    
          ELSE                                                             KMKHZ6A.587    
            DTLDZ = -GRCP                                                  KMKHZ6A.588    
          ENDIF                                                            KMKHZ6A.589    
!                                                                          KMKHZ6A.590    
          DQCLDZ(I,K) = -LGF * ( DTLDZ*DQSDT(I,K)                          ARN0F405.1421   
     &                   + G*QS(I)/(R*T(I,K)*VIRT_FACTOR) )                KMKHZ6A.592    
     &                    / ( 1.0 + LCRCP*DQSDT(I,K) )                     KMKHZ6A.593    
          DQCFDZ(I,K) = -FGF * ( DTLDZ*DQSDT(I,K)                          ARN0F405.1422   
     &                   + G*QS(I)/(R*T(I,K)*VIRT_FACTOR) )                KMKHZ6A.595    
     &                    / ( 1.0 + LSRCP*DQSDT(I,K) )                     KMKHZ6A.596    
!                                                                          KMKHZ6A.597    
!-----------------------------------------------------------------------   KMKHZ6A.598    
!! 1.5 Calculate the cloud liquid and frozen water contents at the         KMKHZ6A.599    
!!     top and bottom of the current layer                                 KMKHZ6A.600    
!-----------------------------------------------------------------------   KMKHZ6A.601    
!                                                                          KMKHZ6A.602    
          IF ( QCL(I,K) + QCF(I,K) .GT. 0.0 ) THEN                         KMKHZ6A.603    
            CFL(I,K) = CF(I,K) * QCL(I,K)/( QCL(I,K) + QCF(I,K) )          KMKHZ6A.604    
            CFF(I,K) = CF(I,K) * QCF(I,K)/( QCL(I,K) + QCF(I,K) )          KMKHZ6A.605    
          ELSE                                                             KMKHZ6A.606    
            CFL(I,K) = 0.0                                                 KMKHZ6A.607    
            CFF(I,K) = 0.0                                                 KMKHZ6A.608    
          ENDIF                                                            KMKHZ6A.609    
!                                                                          KMKHZ6A.610    
          IF (CFL(I,K) .GT. 0.0) THEN                                      KMKHZ6A.611    
            QCL_IC_TOP(I,K) = QCL(I,K) / CFL(I,K) +                        KMKHZ6A.612    
     &                         0.5*DZL(I,K)*DQCLDZ(I,K)                    KMKHZ6A.613    
            QCL_IC_BOT(I,K) = MAX( 0.0 , QCL(I,K) / CFL(I,K) -             KMKHZ6A.614    
     &                                    0.5*DZL(I,K)*DQCLDZ(I,K) )       KMKHZ6A.615    
          ELSE                                                             KMKHZ6A.616    
            QCL_IC_TOP(I,K) = 0.0                                          KMKHZ6A.617    
            QCL_IC_BOT(I,K) = 0.0                                          KMKHZ6A.618    
          ENDIF                                                            KMKHZ6A.619    
!                                                                          KMKHZ6A.620    
          IF (CFF(I,K) .GT. 0.0) THEN                                      KMKHZ6A.621    
            QCF_IC_TOP(I,K) = QCF(I,K) / CFF(I,K) +                        KMKHZ6A.622    
     &                         0.5*DZL(I,K)*DQCFDZ(I,K)                    KMKHZ6A.623    
            QCF_IC_BOT(I,K) = MAX( 0.0 , QCF(I,K) / CFF(I,K) -             KMKHZ6A.624    
     &                                    0.5*DZL(I,K)*DQCFDZ(I,K) )       KMKHZ6A.625    
          ELSE                                                             KMKHZ6A.626    
            QCF_IC_TOP(I,K) = 0.0                                          KMKHZ6A.627    
            QCF_IC_BOT(I,K) = 0.0                                          KMKHZ6A.628    
          ENDIF                                                            KMKHZ6A.629    
        ENDDO                                                              KMKHZ6A.630    
      ENDDO                                                                KMKHZ6A.631    
!                                                                          KMKHZ6A.632    
!-----------------------------------------------------------------------   KMKHZ6A.633    
!! 2.  Second loop round boundary layer levels.                            KMKHZ6A.634    
!-----------------------------------------------------------------------   KMKHZ6A.635    
!                                                                          KMKHZ6A.636    
      DO K=2,BL_LEVELS                                                     KMKHZ6A.637    
        KM1 = K-1                                                          KMKHZ6A.638    
        DO I=P1,P1+P_POINTS-1                                              KMKHZ6A.639    
!                                                                          KMKHZ6A.640    
!-----------------------------------------------------------------------   KMKHZ6A.641    
!! 2.1 Calculate the jumps of QW and TL across the layer interface         KMKHZ6A.642    
!!     at level k-1/2.                                                     KMKHZ6A.643    
!-----------------------------------------------------------------------   KMKHZ6A.644    
!                                                                          KMKHZ6A.645    
          DQW = QW(I,K) - QW(I,KM1)                    ! Used in P243.C2   KMKHZ6A.646    
!-----------------------------------------------------------------------   KMKHZ6A.647    
!         ! TL_K_BOT   = TL(I,K)   - 0.5*DZL(I,K)  *(-GRCP)                KMKHZ6A.648    
!         ! TL_KM1_TOP = TL(I,KM1) + 0.5*DZL(I,KM1)*(-GRCP)                KMKHZ6A.649    
!         ! DTL = TL_K_BOT - TL_KM1_TOP   so therefore                     KMKHZ6A.650    
!-----------------------------------------------------------------------   KMKHZ6A.651    
          DTL = TL(I,K) - TL(I,KM1) + GRCP/RDZ(I,K)    ! Used in P243.C2   KMKHZ6A.652    
          IF (K .LE. NTML(I)) THEN                                         KMKHZ6A.653    
            DTL = DTL - GRAD_T_ADJ(I)/RDZ(I,K)                             KMKHZ6A.654    
            DQW = DQW - GRAD_Q_ADJ(I)/RDZ(I,K)                             KMKHZ6A.655    
          ENDIF                                                            KMKHZ6A.656    
!                                                                          KMKHZ6A.657    
          DQCL = CFL(I,K)*QCL_IC_BOT(I,K) -                                KMKHZ6A.658    
     &             CFL(I,KM1)*QCL_IC_TOP(I,KM1)                            KMKHZ6A.659    
          DQCF = CFF(I,K)*QCF_IC_BOT(I,K) -                                KMKHZ6A.660    
     &             CFF(I,KM1)*QCF_IC_TOP(I,KM1)                            KMKHZ6A.661    
!                                                                          KMKHZ6A.662    
!-----------------------------------------------------------------------   KMKHZ6A.663    
!! 2.3 Calculate the buoyancy jumps across the interface between layers    KMKHZ6A.664    
!!     k and k-1                                                           KMKHZ6A.665    
!-----------------------------------------------------------------------   KMKHZ6A.666    
!                                                                          KMKHZ6A.667    
          DB(I,K) = G * ( BTM(I,KM1)*DTL + BQM(I,KM1)*DQW +                KMKHZ6A.668    
     &                    (LCRCP*BTM(I,KM1) - ETAR*BQM(I,KM1)) * DQCL +    KMKHZ6A.669    
     &                    (LSRCP*BTM(I,KM1) - ETAR*BQM(I,KM1)) * DQCF )    KMKHZ6A.670    
!                                                                          KMKHZ6A.671    
          DB_SVL(I,K) = G * ( BTM(I,KM1)*DTL + BQM(I,KM1)*DQW )            ARN0F405.1423   
!                                                                          ARN0F405.1424   
          DB_CLD(I,K) = G * ( BTM_CLD(I,KM1)*DTL + BQM_CLD(I,KM1)*DQW )    KMKHZ6A.672    
!                                                                          KMKHZ6A.673    
          CHI_S(I,K) = -QCL_IC_TOP(I,KM1) /                                KMKHZ6A.674    
     &                  (A_QSM(I,KM1)*DQW + A_DQSDTM(I,KM1)*DTL)           KMKHZ6A.675    
        ENDDO                                                              KMKHZ6A.676    
      ENDDO                                                                KMKHZ6A.677    
!                                                                          KMKHZ6A.678    
!-----------------------------------------------------------------------   KMKHZ6A.679    
!! 3.0a Calculate surface buoyancy flux                                    ARN0F405.1425   
!-----------------------------------------------------------------------   KMKHZ6A.681    
!                                                                          KMKHZ6A.682    
        DO I = P1,P1-1+P_POINTS                                            KMKHZ6A.684    
                                                                           ARN0F405.1426   
        BFLUX_SURF(I) = G * ( BTM(I,NTML(I))*FTL(I,1) +                    ARN0F405.1427   
     &                        BQM(I,NTML(I))*FQW(I,1) )                    ARN0F405.1428   
                                                                           ARN0F405.1429   
        IF ( BFLUX_SURF(I) . GT. 0.0 ) THEN                                ARN0F405.1430   
          BFLUX_SAT_SURF(I) = G * ( BTM_CLD(I,NTML(I))*FTL(I,1) +          ARN0F405.1431   
     &                              BQM_CLD(I,NTML(I))*FQW(I,1) )          ARN0F405.1432   
          IF ( COUPLED(I) ) THEN                                           ARN0F405.1433   
             BFLUX_SAT_SURF(I) = G * ( BTM_CLD(I,NTDSC(I))*FTL(I,1) +      ARN0F405.1434   
     &                                 BQM_CLD(I,NTDSC(I))*FQW(I,1) )      ARN0F405.1435   
          ENDIF                                                            KMKHZ6A.696    
        ELSE                                                               ARN0F405.1436   
          BFLUX_SAT_SURF(I) = 0.0                                          ARN0F405.1437   
          ENDIF                                                            KMKHZ6A.704    
                                                                           ARN0F405.1438   
        UNSTABLE(I) = (BFLUX_SURF(I) .GT. 0.0) .AND. (NTML(I) .GT. 1)      ARN0F405.1439   
                                                                           ARN0F405.1440   
        ENDDO                                                              KMKHZ6A.709    
!-----------------------------------------------------------------------   KMKHZ6A.713    
!! 3.0aa Calculate Sc layer cloud depth (not cloud fraction weighted).     ARN0F405.1441   
!!       (If DSC(I)=.FALSE. then NTDSC=0 and ZC_DSC remains equal to 0.)   ARN0F405.1442   
!-----------------------------------------------------------------------   KMKHZ6A.715    
!                                                                          KMKHZ6A.716    
!     Initialise variables                                                 ARN0F405.1443   
!                                                                          KMKHZ6A.718    
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1444   
        ZC_DSC(I) = 0.0                                                    ARN0F405.1445   
        CLOUD_BASE(I) = .TRUE.                                             ARN0F405.1446   
      ENDDO                                                                ARN0F405.1447   
!                                                                          KMKHZ6A.726    
      DO K=BL_LEVELS,2,-1                                                  ARN0F405.1448   
        KM1=K-1                                                            ARN0F405.1449   
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.1450   
          IF ( (K .EQ. NTDSC(I)) .AND. (CF(I,K) .GT. SC_CFTOL) )           ARN0F405.1451   
     &      CLOUD_BASE(I) = .FALSE.                                        ARN0F405.1452   
          IF ( (K .LE. NTDSC(I)) .AND. (CF(I,K) .GT. SC_CFTOL) .AND.       ARN0F405.1453   
     &        .NOT.CLOUD_BASE(I) ) THEN                                    ARN0F405.1454   
            ZC_DSC(I) = ZC_DSC(I) + 0.5*DZL(I,K)                           ARN0F405.1455   
            IF (CF(I,KM1) .GT. SC_CFTOL) THEN                              ARN0F405.1456   
              ZC_DSC(I) = ZC_DSC(I) + 0.5*DZL(I,K)                         ARN0F405.1457   
        ELSE                                                               KMKHZ6A.736    
              ZC_DSC(I) = ZC_DSC(I) +                                      ARN0F405.1458   
     &                  MIN( 0.5*(DZL(I,K) + DZL(I,KM1)) * CFL(I,K) ,      ARN0F405.1459   
     &                        QCL(I,K) / DQCLDZ(I,K) ) / CF(I,K)           ARN0F405.1460   
              IF (DQCFDZ(I,K) .GT. 0.0) THEN                               ARN0F405.1461   
                ZC_DSC(I) = ZC_DSC(I) +                                    ARN0F405.1462   
     &                   MIN( 0.5*(DZL(I,K) + DZL(I,KM1)) * CFF(I,K) ,     ARN0F405.1463   
     &                        QCF(I,K) / DQCFDZ(I,K) ) / CF(I,K)           ARN0F405.1464   
              ELSE                                                         ARN0F405.1465   
                ZC_DSC(I) = ZC_DSC(I) +                                    ARN0F405.1466   
     &                0.5*(DZL(I,K) + DZL(I,KM1)) * CFF(I,K) / CF(I,K)     ARN0F405.1467   
              ENDIF                                                        ARN0F405.1468   
              CLOUD_BASE(I) = .TRUE.                                       ARN0F405.1469   
        ENDIF                                                              KMKHZ6A.744    
            ENDIF                                                          ARN0F405.1470   
      ENDDO                                                                KMKHZ6A.745    
      ENDDO                                                                ARN0F405.1471   
                                                                           ARN0F405.1472   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1473   
        IF ( DSC(I) .AND. .NOT.CLOUD_BASE(I)                               ARN0F405.1474   
     &              .AND. (CF(I,1) .GT. SC_CFTOL) ) THEN                   ARN0F405.1475   
          ZC_DSC(I) = ZC_DSC(I) + 0.5*DZL(I,1) +                           ARN0F405.1476   
     &               MIN( 0.5*DZL(I,1)*CFL(I,1) ,                          ARN0F405.1477   
     &                    QCL(I,1) / DQCLDZ(I,1) ) / CF(I,1)               ARN0F405.1478   
          IF(DQCFDZ(I,1) .GT. 0.0) THEN                                    ARN0F405.1479   
            ZC_DSC(I) = ZC_DSC(I) +                                        ARN0F405.1480   
     &               MIN( 0.5*DZL(I,1)*CFF(I,1) ,                          ARN0F405.1481   
     &                    QCF(I,1) / DQCFDZ(I,1) ) / CF(I,1)               ARN0F405.1482   
          ELSE                                                             ARN0F405.1483   
            ZC_DSC(I) = ZC_DSC(I) + 0.5*DZL(I,1)*CFF(I,1)/CF(I,1)          ARN0F405.1484   
          ENDIF                                                            ARN0F405.1485   
          CLOUD_BASE(I) = .TRUE.                                           ARN0F405.1486   
        ENDIF                                                              ARN0F405.1487   
      ENDDO                                                                ARN0F405.1488   
!     !-----------------------------------------------------------------   ARN0F405.1489   
!     !  Check for cloud within inversion.                                 ARN0F405.1490   
!     !-----------------------------------------------------------------   ARN0F405.1491   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1492   
        IF ( DSC(I) .AND. (CF(I,NTDSC(I)+1) .GT. SC_CFTOL) ) THEN          ARN0F405.1493   
            K=NTDSC(I)+1                                                   ARN0F405.1494   
            ZC_DSC(I) = ZC_DSC(I) + 0.5*DZL(I,K)                           ARN0F405.1495   
            IF (CF(I,K-1) .GT. SC_CFTOL) THEN                              ARN0F405.1496   
              ZC_DSC(I) = ZC_DSC(I) + 0.5*DZL(I,K)                         ARN0F405.1497   
            ELSE                                                           ARN0F405.1498   
              ZC_DSC(I) = ZC_DSC(I) +                                      ARN0F405.1499   
     &                  MIN( 0.5*(DZL(I,K) + DZL(I,K-1)) * CFL(I,K) ,      ARN0F405.1500   
     &                        QCL(I,K) / DQCLDZ(I,K) ) / CF(I,K)           ARN0F405.1501   
              IF (DQCFDZ(I,K) .GT. 0.0) THEN                               ARN0F405.1502   
                ZC_DSC(I) = ZC_DSC(I) +                                    ARN0F405.1503   
     &                   MIN( 0.5*(DZL(I,K) + DZL(I,K-1)) * CFF(I,K) ,     ARN0F405.1504   
     &                        QCF(I,K) / DQCFDZ(I,K) ) / CF(I,K)           ARN0F405.1505   
              ELSE                                                         ARN0F405.1506   
                ZC_DSC(I) = ZC_DSC(I) +                                    ARN0F405.1507   
     &                0.5*(DZL(I,K) + DZL(I,K-1)) * CFF(I,K) / CF(I,K)     ARN0F405.1508   
              ENDIF                                                        ARN0F405.1509   
            ENDIF                                                          ARN0F405.1510   
        ENDIF                                                              ARN0F405.1511   
      ENDDO                                                                ARN0F405.1512   
!     !-----------------------------------------------------------------   ARN0F405.1513   
!     !  Layer cloud depth cannot be > the layer depth itself.             ARN0F405.1514   
!     !-----------------------------------------------------------------   ARN0F405.1515   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1516   
        ZC_DSC(I) = MIN( ZC_DSC(I), DSCDEPTH(I) )                          ARN0F405.1517   
      ENDDO                                                                ARN0F405.1518   
!-----------------------------------------------------------------------   KMKHZ6A.747    
!! 3.0b Calculate surface mixed layer cloud depth (not cloud fraction      ARN0F405.1519   
!!      weighted)                                                          ARN0F405.1520   
!-----------------------------------------------------------------------   KMKHZ6A.749    
!                                                                          KMKHZ6A.750    
      DO I = P1,P1-1+P_POINTS                                              KMKHZ6A.753    
        ZC(I) = 0.0                                                        KMKHZ6A.754    
        CLOUD_BASE(I) = .TRUE.                                             KMKHZ6A.755    
      ENDDO                                                                KMKHZ6A.756    
!                                                                          KMKHZ6A.757    
      DO K=BL_LEVELS-1,2,-1                                                ARN0F405.1521   
        KM1=K-1                                                            KMKHZ6A.759    
        DO I = P1,P1-1+P_POINTS                                            KMKHZ6A.760    
          IF ( (K .EQ. NTML(I)) .AND. (CF(I,K) .GT. 0.0) )                 KMKHZ6A.761    
     &      CLOUD_BASE(I) = .FALSE.                                        KMKHZ6A.762    
          IF ( (K .LE. NTML(I)) .AND. (CF(I,K) .GT. 0.0) .AND.             KMKHZ6A.763    
     &        .NOT.CLOUD_BASE(I) ) THEN                                    KMKHZ6A.764    
            ZC(I) = ZC(I) + 0.5*DZL(I,K)                                   KMKHZ6A.765    
            IF (CF(I,KM1) .GT. 0.0) THEN                                   KMKHZ6A.766    
              ZC(I) = ZC(I) + 0.5*DZL(I,K)                                 KMKHZ6A.767    
            ELSE                                                           KMKHZ6A.768    
              ZC(I) = ZC(I) +                                              KMKHZ6A.769    
     &                   MIN( 0.5*(DZL(I,K)+DZL(I,KM1))*CFL(I,K) ,         ARN0F405.1522   
     &                        QCL(I,K) / DQCLDZ(I,K) ) / CF(I,K)           ARN0F405.1523   
              IF (DQCFDZ(I,K) .GT. 0.0) THEN                               ARN0F405.1524   
                ZC(I) = ZC(I) +                                            ARN0F405.1525   
     &                   MIN( 0.5*(DZL(I,K)+DZL(I,KM1))*CFF(I,K) ,         ARN0F405.1526   
     &                        QCF(I,K) / DQCFDZ(I,K) ) / CF(I,K)           ARN0F405.1527   
              ELSE                                                         ARN0F405.1528   
                ZC(I) = ZC(I) +                                            ARN0F405.1529   
     &                   0.5*(DZL(I,K)+DZL(I,KM1))*CFF(I,K)/CF(I,K)        ARN0F405.1530   
              ENDIF                                                        ARN0F405.1531   
              CLOUD_BASE(I) = .TRUE.                                       KMKHZ6A.775    
            ENDIF                                                          KMKHZ6A.776    
            ENDIF                                                          KMKHZ6A.777    
        ENDDO                                                              KMKHZ6A.778    
      ENDDO                                                                KMKHZ6A.779    
      DO I = P1,P1-1+P_POINTS                                              KMKHZ6A.781    
        IF ( (CF(I,1) .GT. 0.0) .AND. .NOT.CLOUD_BASE(I) ) THEN            KMKHZ6A.782    
          ZC(I) = ZC(I) + 0.5*DZL(I,1) +                                   KMKHZ6A.783    
     &               MIN( 0.5*DZL(I,1)*CFL(I,1) ,                          ARN0F405.1532   
     &                    QCL(I,1) / DQCLDZ(I,1) ) / CF(I,1)               ARN0F405.1533   
          IF (DQCFDZ(I,1) .GT. 0.0) THEN                                   ARN0F405.1534   
            ZC(I) = ZC(I) +                                                ARN0F405.1535   
     &               MIN( 0.5*DZL(I,1)*CFF(I,1) ,                          ARN0F405.1536   
     &                    QCF(I,1) / DQCFDZ(I,1) ) / CF(I,1)               ARN0F405.1537   
          ELSE                                                             ARN0F405.1538   
            ZC(I) = ZC(I) + 0.5*DZL(I,1)*CFF(I,1) / CF(I,1)                ARN0F405.1539   
          ENDIF                                                            ARN0F405.1540   
          CLOUD_BASE(I) = .TRUE.                                           KMKHZ6A.789    
        ENDIF                                                              KMKHZ6A.790    
      ENDDO                                                                KMKHZ6A.791    
!     !-----------------------------------------------------------------   ARN0F405.1541   
!     !  Check for cloud within inversion.                                 ARN0F405.1542   
!     !-----------------------------------------------------------------   ARN0F405.1543   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1544   
        IF ( CF(I,NTML(I)+1) .GT. SC_CFTOL ) THEN                          ARN0F405.1545   
            K=NTML(I)+1                                                    ARN0F405.1546   
            ZC(I) = ZC(I) + 0.5*DZL(I,K)                                   ARN0F405.1547   
            IF (CF(I,K-1) .GT. SC_CFTOL) THEN                              ARN0F405.1548   
              ZC(I) = ZC(I) + 0.5*DZL(I,K)                                 ARN0F405.1549   
            ELSE                                                           ARN0F405.1550   
              ZC(I) = ZC(I) +                                              ARN0F405.1551   
     &                  MIN( 0.5*(DZL(I,K) + DZL(I,K-1)) * CFL(I,K) ,      ARN0F405.1552   
     &                        QCL(I,K) / DQCLDZ(I,K) ) / CF(I,K)           ARN0F405.1553   
              IF (DQCFDZ(I,K) .GT. 0.0) THEN                               ARN0F405.1554   
                ZC(I) = ZC(I) +                                            ARN0F405.1555   
     &                   MIN( 0.5*(DZL(I,K) + DZL(I,K-1)) * CFF(I,K) ,     ARN0F405.1556   
     &                        QCF(I,K) / DQCFDZ(I,K) ) / CF(I,K)           ARN0F405.1557   
              ELSE                                                         ARN0F405.1558   
                ZC(I) = ZC(I) +                                            ARN0F405.1559   
     &                0.5*(DZL(I,K) + DZL(I,K-1)) * CFF(I,K) / CF(I,K)     ARN0F405.1560   
              ENDIF                                                        ARN0F405.1561   
            ENDIF                                                          ARN0F405.1562   
        ENDIF                                                              ARN0F405.1563   
      ENDDO                                                                ARN0F405.1564   
!                                                                          KMKHZ6A.792    
!-----------------------------------------------------------------------   KMKHZ6A.793    
!! 3.1 Calculate inputs for the top of b.l. entrainment parametrization.   ARN0F405.1565   
!-----------------------------------------------------------------------   KMKHZ6A.796    
!                                                                          KMKHZ6A.797    
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1566   
       ZETA_R_DSC(I) = 0.0                                                 ARN0F405.1567   
       ALPHA_R_DSC(I) = 0.0                                                ARN0F405.1568   
       CHI_S_DSCT(I) = 0.0                                                 ARN0F405.1569   
       CLD_FACTOR_DSC(I) = 0.0                                             ARN0F405.1570   
       BT_DSCT(I) = 0.0                                                    ARN0F405.1571   
       BTT_DSCT(I) = 0.0                                                   ARN0F405.1572   
       BTC_DSCT(I) = 0.0                                                   ARN0F405.1573   
       DB_DSCT(I) = 0.0                                                    ARN0F405.1574   
       DB_DSCT_CLD(I) = 0.0                                                ARN0F405.1575   
       CHI_S_TOP(I) = 0.0                                                  ARN0F405.1576   
       CLD_FACTOR(I) = 0.0                                                 ARN0F405.1577   
       BT_TOP(I) = 0.0                                                     ARN0F405.1578   
       BTT_TOP(I) = 0.0                                                    ARN0F405.1579   
       BTC_TOP(I) = 0.0                                                    ARN0F405.1580   
       DB_TOP(I) = 0.0                                                     ARN0F405.1581   
       DB_TOP_CLD(I) = 0.0    ! default required if COUPLED                ARN0F405.1582   
       Z_CLD(I) = 0.0                                                      ARN0F405.1583   
       Z_CLD_DSC(I) = 0.0                                                  ARN0F405.1584   
      ENDDO                                                                ARN0F405.1585   
!                                                                          KMKHZ6A.799    
      DO K = 1,BL_LEVELS                                                   ARN0F405.1586   
      DO I = P1,P1-1+P_POINTS                                              KMKHZ6A.800    
          IF ( K .LE. NTML(I)+1 )  THEN                                    ARN0F405.1587   
!           !---------------------------------------------------           ARN0F405.1588   
!           ! Calculation of cloud fraction weighted                       ARN0F405.1589   
!           ! thickness of cloud in the surface mixed layer                ARN0F405.1590   
!           !---------------------------------------------------           ARN0F405.1591   
            Z_CLD(I) = Z_CLD(I) +                                          ARN0F405.1592   
     &                 CF(I,K) * 0.5 * DZL(I,K) +                          ARN0F405.1593   
     &                  MIN( CFL(I,K) * 0.5 * DZL(I,K) ,                   ARN0F405.1594   
     &                          QCL(I,K) / DQCLDZ(I,K) )                   ARN0F405.1595   
            IF (DQCFDZ(I,K) .GT. 0.0) THEN                                 ARN0F405.1596   
              Z_CLD(I) = Z_CLD(I) +                                        ARN0F405.1597   
     &                  MIN( CFF(I,K) * 0.5 * DZL(I,K) ,                   ARN0F405.1598   
     &                          QCF(I,K) / DQCFDZ(I,K) )                   ARN0F405.1599   
            ELSE                                                           ARN0F405.1600   
              Z_CLD(I) = Z_CLD(I) +                                        ARN0F405.1601   
     &                    CFF(I,K) * 0.5 * DZL(I,K)                        ARN0F405.1602   
            ENDIF                                                          ARN0F405.1603   
          ENDIF                                                            ARN0F405.1604   
!                                                                          ARN0F405.1605   
          IF ( DSC(I) .AND. K.LE.NTDSC(I)+1 .AND.                          ARN0F405.1606   
     &         ( COUPLED(I) .OR.                                           ARN0F405.1607   
     &               Z_HALF(I,K+1).GE.ZHSC(I)-ZC_DSC(I) ) ) THEN           ARN0F405.1608   
!           !----------------------------------------------------          ARN0F405.1609   
!           ! Calculation of cloud fraction weighted thickness of          ARN0F405.1610   
!           ! cloud in the DSC layer (or to the surface if COUPLED)        ARN0F405.1611   
!           !----------------------------------------------------          ARN0F405.1612   
            Z_CLD_DSC(I) = Z_CLD_DSC(I) +                                  ARN0F405.1613   
     &                 CF(I,K) * 0.5 * DZL(I,K) +                          ARN0F405.1614   
     &                  MIN( CFL(I,K) * 0.5 * DZL(I,K) ,                   ARN0F405.1615   
     &                          QCL(I,K) / DQCLDZ(I,K) )                   ARN0F405.1616   
            IF (DQCFDZ(I,K) .GT. 0.0) THEN                                 ARN0F405.1617   
              Z_CLD_DSC(I) = Z_CLD_DSC(I) +                                ARN0F405.1618   
     &                  MIN( CFF(I,K) * 0.5 * DZL(I,K) ,                   ARN0F405.1619   
     &                          QCF(I,K) / DQCFDZ(I,K) )                   ARN0F405.1620   
            ELSE                                                           ARN0F405.1621   
              Z_CLD_DSC(I) = Z_CLD_DSC(I) +                                ARN0F405.1622   
     &                        CFF(I,K) * 0.5 * DZL(I,K)                    ARN0F405.1623   
            ENDIF                                                          ARN0F405.1624   
          ENDIF                                                            ARN0F405.1625   
!                                                                          ARN0F405.1626   
          IF (K .EQ. NTML(I)  .AND. .NOT.COUPLED(I) ) THEN                 ARN0F405.1627   
!           !------------------------------------------------------        ARN0F405.1628   
!           ! Calculation of SML inputs.  If COUPLED then these are        ARN0F405.1629   
!           ! not used (as no entrainment is then applied at ZH)           ARN0F405.1630   
!           !------------------------------------------------------        ARN0F405.1631   
            CHI_S_TOP(I) = MAX( 0.0, MIN( CHI_S(I,K+1), 1.) )              ARN0F405.1632   
            CLD_FACTOR(I) = MAX( 0.0 , CF(I,K)-CF(I,K+1) )                 ARN0F405.1633   
            BT_TOP(I) = G * BTM(I,K)                                       ARN0F405.1634   
            BTT_TOP(I) = G * BTM_CLD(I,K)                                  ARN0F405.1635   
            BTC_TOP(I) = BTT_TOP(I)                                        ARN0F405.1636   
            DB_TOP(I) = DB(I,K+1)                                          ARN0F405.1637   
            DB_TOP_CLD(I) = DB_CLD(I,K+1)                                  ARN0F405.1638   
          ENDIF                                                            ARN0F405.1639   
          IF (K .EQ. NTDSC(I)) THEN                                        ARN0F405.1640   
!           !---------------------------------------------------           ARN0F405.1641   
!           ! Calculation of DSC inputs                                    ARN0F405.1642   
!           ! (if DSC=.FALSE. then K never equals NTDSC(=0))               ARN0F405.1643   
!           !---------------------------------------------------           ARN0F405.1644   
            CHI_S_DSCT(I) = MAX( 0.0, MIN( CHI_S(I,K+1), 1.) )             ARN0F405.1645   
            CLD_FACTOR_DSC(I) = MAX( 0.0 , CF(I,K)-CF(I,K+1) )             ARN0F405.1646   
            BT_DSCT(I) = G * BTM(I,K)                                      ARN0F405.1647   
            BTT_DSCT(I) = G * BTM_CLD(I,K)                                 ARN0F405.1648   
            BTC_DSCT(I) = BTT_DSCT(I)                                      ARN0F405.1649   
            DB_DSCT(I) = DB(I,K+1)                                         ARN0F405.1650   
            DB_DSCT_CLD(I) = DB_CLD(I,K+1)                                 ARN0F405.1651   
          ENDIF                                                            ARN0F405.1652   
        ENDDO                                                              ARN0F405.1653   
      ENDDO                                                                ARN0F405.1654   
!     !-----------------------------------------------------------------   ARN0F405.1655   
!     ! Next those terms dependent on the presence of buoyancy reversal.   ARN0F405.1656   
!     !"----------------------------------------------------------------   ARN0F405.1657   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1658   
        Z_CLD(I) = MIN( Z_CLD(I), ZH(I) )                                  ARN0F405.1659   
        Z_CLD_DSC(I) = MIN( Z_CLD_DSC(I), ZHSC(I) )                        ARN0F405.1660   
!       !---------------------------------------------------------------   ARN0F405.1661   
!       ! First the surface mixed layer.                                   ARN0F405.1662   
!       !---------------------------------------------------------------   ARN0F405.1663   
        IF ( COUPLED(I) ) THEN                                             ARN0F405.1664   
          ZETA_S(I) = 1.0 - Z_CLD_DSC(I) / ZHSC(I)                         ARN0F405.1665   
          ZETA_R(I) = 1.0 - ZC_DSC(I) / ZHSC(I)                            ARN0F405.1666   
        ELSE                                                               ARN0F405.1667   
          ZETA_S(I) = 1.0 - Z_CLD(I) / ZH(I)                               ARN0F405.1668   
          ZETA_R(I) = 1.0 - ZC(I) / ZH(I)                                  ARN0F405.1669   
        ENDIF                                                              ARN0F405.1670   
!                                                                          ARN0F405.1671   
        IF (DB_TOP_CLD(I) .GE. 0.0) THEN                                   ARN0F405.1672   
!         !--------------------------------------------------              ARN0F405.1673   
!         ! i.e. no buoyancy reversal (or default if COUPLED)              ARN0F405.1674   
!         !--------------------------------------------------              ARN0F405.1675   
          ALPHA_R(I) = 0.2                                                 ARN0F405.1676   
          DB_TOP_CLD(I) = 0.0                                              ARN0F405.1677   
        ELSE                                                               ARN0F405.1678   
!         !----------------------------                                    ARN0F405.1679   
!         ! IF (DB_TOP_CLD(I) .LT. 0.0)                                    ARN0F405.1680   
!         ! i.e. buoyancy reversal                                         ARN0F405.1681   
!         !----------------------------                                    ARN0F405.1682   
          DB_TOP_CLD(I) = -DB_TOP_CLD(I) * CLD_FACTOR(I)                   ARN0F405.1683   
          D_SIEMS = MAX( 0.0,                                              ARN0F405.1684   
     &             CHI_S_TOP(I) * DB_TOP_CLD(I) / (DB_TOP(I)+1.E-14) )     ARN0F405.1685   
          ZETA_R(I) = MIN( ZETA_R(I)+10.0*(1.0-ZETA_R(I))                  ARN0F405.1686   
     &                                    *D_SIEMS, 1.0 )                  ARN0F405.1687   
          ALPHA_R(I) = MIN( 0.2+10.0*(1.0-0.2)*D_SIEMS, 1.0 )              ARN0F405.1688   
        ENDIF                                                              ARN0F405.1689   
!       !---------------------------------------------------------------   ARN0F405.1690   
!       ! Now the decoupled Sc layer (DSC).                                ARN0F405.1691   
!       !---------------------------------------------------------------   ARN0F405.1692   
        IF (DSC(I)) THEN                                                   ARN0F405.1693   
          IF ( COUPLED(I) ) THEN                                           ARN0F405.1694   
            ZETA_R_DSC(I) = 1.0 - ZC_DSC(I) / ZHSC(I)                      ARN0F405.1695   
          ELSE                                                             ARN0F405.1696   
            ZETA_R_DSC(I) = 1.0 - ZC_DSC(I) / DSCDEPTH(I)                  ARN0F405.1697   
          ENDIF                                                            ARN0F405.1698   
                                                                           ARN0F405.1699   
          IF (DB_DSCT_CLD(I) .GE. 0.0) THEN                                ARN0F405.1700   
!           !----------------------------                                  ARN0F405.1701   
!           ! i.e. no buoyancy reversal                                    ARN0F405.1702   
!           !----------------------------                                  ARN0F405.1703   
            ALPHA_R_DSC(I) = 0.2                                           ARN0F405.1704   
            DB_DSCT_CLD(I) = 0.0                                           ARN0F405.1705   
          ELSE                                                             ARN0F405.1706   
!           !----------------------------                                  ARN0F405.1707   
!           ! IF (DB_DSCT_CLD(I) .LT. 0.0)                                 ARN0F405.1708   
!           ! i.e. buoyancy reversal                                       ARN0F405.1709   
!           !----------------------------                                  ARN0F405.1710   
            DB_DSCT_CLD(I) = -DB_DSCT_CLD(I) * CLD_FACTOR_DSC(I)           ARN0F405.1711   
            D_SIEMS = MAX( 0.0,                                            ARN0F405.1712   
     &           CHI_S_DSCT(I) * DB_DSCT_CLD(I) / (DB_DSCT(I)+1.E-14) )    ARN0F405.1713   
            ZETA_R_DSC(I) = MIN( ZETA_R_DSC(I)+10.0*(1.0-ZETA_R_DSC(I))    ARN0F405.1714   
     &                                    *D_SIEMS, 1.0 )                  ARN0F405.1715   
            ALPHA_R_DSC(I) = MIN( 0.2+10.0*(1.0-0.2)*D_SIEMS, 1.0 )        ARN0F405.1716   
          ENDIF                                                            ARN0F405.1717   
        ENDIF                                                              ARN0F405.1718   
      ENDDO                                                                ARN0F405.1719   
!                                                                          ARN0F405.1720   
!-----------------------------------------------------------------------   ARN0F405.1721   
!! 4. Calculate the radiative flux change across cloud top for mixed       ARN0F405.1722   
!!    layer to ZH.  If there is a decoupled layer above, restrict          ARN0F405.1723   
!!    search for maximum divergence to below NTML+1.  This may             ARN0F405.1724   
!!    introduce errors if NTML changes during radiative timestep but       ARN0F405.1725   
!!    can't be helped.                                                     ARN0F405.1726   
!-----------------------------------------------------------------------   ARN0F405.1727   
!     Initialise variables                                                 ARN0F405.1728   
!------------------------------                                            ARN0F405.1729   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1730   
        K_CLOUD_TOP(I) = 0                                                 KMKHZ6A.801    
        DF_TOP_OVER_CP(I) = 0.0                                            KMKHZ6A.802    
      ENDDO                                                                KMKHZ6A.804    
!                                                                          KMKHZ6A.805    
      DO K = 1,BL_LEVELS-1                                                 KMKHZ6A.806    
        DO I = P1,P1-1+P_POINTS                                            KMKHZ6A.807    
                                                                           ARN0F405.1731   
          DF_OVER_CP(I,K) = DELTAP(I,K)/G * RAD_HR(I,K)                    ARN0F405.1732   
                                                                           ARN0F405.1733   
          K_RAD_SMLT = NTML(I)+1                                           ARN0F405.1734   
          IF ( .NOT.DSC(I) ) K_RAD_SMLT = NTML(I)+2                        ARN0F405.1735   
!         !-------------------------------------------------------------   KMKHZ6A.808    
!         ! Find the layer with the greatest radiative flux jump below     ARN0F405.1736   
!         ! K_RAD_SMLT and assume that this is the top of the SML.         ARN0F405.1737   
!         !-------------------------------------------------------------   KMKHZ6A.811    
          IF (DF_OVER_CP(I,K) .GT. DF_TOP_OVER_CP(I)                       ARN0F405.1738   
     &                .AND. K .LE. K_RAD_SMLT ) THEN                       ARN0F405.1739   
            K_CLOUD_TOP(I) = K                                             KMKHZ6A.814    
            DF_TOP_OVER_CP(I) = DF_OVER_CP(I,K)                            KMKHZ6A.815    
          ENDIF                                                            KMKHZ6A.816    
                                                                           ARN0F405.1740   
        ENDDO                                                              KMKHZ6A.817    
      ENDDO                                                                KMKHZ6A.818    
!     !-----------------------------------------------------------------   ARN0F405.1741   
!     !  If cloud top extends into the level above NTML (so that the       ARN0F405.1742   
!     !  radiative divergence maximum is at NTML+1) add on RAD_HR from     ARN0F405.1743   
!     !  NTML if there is additional cloud top cooling there.              ARN0F405.1744   
!     !-----------------------------------------------------------------   ARN0F405.1745   
        DO I = P1,P1-1+P_POINTS                                            KMKHZ6A.820    
          IF ( K_CLOUD_TOP(I) .EQ. NTML(I)+1 ) THEN                        ARN0F405.1746   
           K=NTML(I)                                                       ARN0F405.1747   
           DF_OVER_CP(I,K) = DELTAP(I,K)/G * RAD_HR(I,K)                   ARN0F405.1748   
           IF (DF_OVER_CP(I,K) .GT. 0.0 )                                  ARN0F405.1749   
     &        DF_TOP_OVER_CP(I) = DF_TOP_OVER_CP(I) + DF_OVER_CP(I,K)      ARN0F405.1750   
          ENDIF                                                            KMKHZ6A.823    
        ENDDO                                                              KMKHZ6A.824    
!                                                                          KMKHZ6A.826    
!-----------------------------------------------------------------------   KMKHZ6A.827    
!! 5.1 Subroutine EXCF_NL.                                                 KMKHZ6A.828    
!-----------------------------------------------------------------------   KMKHZ6A.829    
!                                                                          KMKHZ6A.830    
      CALL EXCF_NL (                                                       KMKHZ6A.831    
     & P_FIELD,P1,P_POINTS,BL_LEVELS,                                      KMKHZ6A.832    
     & NTML,CF,                                                            ARN0F405.1751   
     & RDZ,ZH,Z_UV,Z_TQ,RHO_UV,RHO_TQ,                                     KMKHZ6A.834    
     & Z0M,V_S,FB_SURF,DB_TOP,                                             KMKHZ6A.835    
     & BFLUX_SURF,BFLUX_SAT_SURF,ZETA_S,BT_TOP,BTT_TOP,                    ARN0F405.1752   
     & DF_TOP_OVER_CP,ZETA_R,ALPHA_R,BTC_TOP,                              ARN0F405.1753   
     & DB_TOP_CLD,CHI_S_TOP,ZC,                                            KMKHZ6A.838    
     & RHOKM(1,2),RHOKH(1,2),RHOKM_TOP(1,2),RHOKH_TOP(1,2),                ARN0F405.1754   
     & ZHSC,DSCDEPTH,NTDSC,DB_DSCT,SVL,                                    ARN0F405.1755   
     & BT_DSCT,BTT_DSCT,                                                   ARN0F405.1756   
     & DF_DSCT_OVER_CP,ZETA_R_DSC,ALPHA_R_DSC,BTC_DSCT,                    ARN0F405.1757   
     & DB_DSCT_CLD,CHI_S_DSCT,ZC_DSC,COUPLED,                              ARN0F405.1758   
     & LTIMER                                                              ARN0F405.1759   
     &)                                                                    KMKHZ6A.840    
!                                                                          ARN0F405.1760   
!-----------------------------------------------------------------------   ARN0F405.1761   
!! 5.2 Diagnose boundary layer type.                                       ARN0F405.1762   
!      Six different types are considered:                                 ARN0F405.1763   
!      1 - Stable b.l.                                                     ARN0F405.1764   
!      2 - Stratocumulus over a stable surface layer.                      ARN0F405.1765   
!      3 - Well mixed b.l. (possibly with stratocumulus).                  ARN0F405.1766   
!      4 - Decoupled stratocumulus (not over cumulus).                     ARN0F405.1767   
!      5 - Decoupled stratocumulus over cumulus.                           ARN0F405.1768   
!      6 - Cumulus capped b.l.                                             ARN0F405.1769   
!-----------------------------------------------------------------------   ARN0F405.1770   
!      First initialise the type variables and set the diagnostic ZHT.     ARN0F405.1771   
!                                                                          ARN0F405.1772   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1773   
        BL_TYPE_1(I) = 0.0                                                 ARN0F405.1774   
        BL_TYPE_2(I) = 0.0                                                 ARN0F405.1775   
        BL_TYPE_3(I) = 0.0                                                 ARN0F405.1776   
        BL_TYPE_4(I) = 0.0                                                 ARN0F405.1777   
        BL_TYPE_5(I) = 0.0                                                 ARN0F405.1778   
        BL_TYPE_6(I) = 0.0                                                 ARN0F405.1779   
        ZHT(I) = MAX( ZH(I) , ZHSC(I) )                                    ARN0F405.1780   
      ENDDO                                                                ARN0F405.1781   
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.1782   
        IF (.NOT.UNSTABLE(I) .AND. .NOT.DSC(I) .AND.                       ARN0F405.1783   
     &       .NOT.CUMULUS(I)) THEN                                         ARN0F405.1784   
!         Stable b.l.                                                      ARN0F405.1785   
          BL_TYPE_1(I) = 1.0                                               ARN0F405.1786   
        ELSEIF (.NOT.UNSTABLE(I) .AND. DSC(I) .AND.                        ARN0F405.1787   
     &       .NOT.CUMULUS(I)) THEN                                         ARN0F405.1788   
!         Stratocumulus over a stable surface layer                        ARN0F405.1789   
          BL_TYPE_2(I) = 1.0                                               ARN0F405.1790   
        ELSEIF (UNSTABLE(I) .AND. .NOT.CUMULUS(I) .AND.                    ARN0F405.1791   
     &       (.NOT.DSC(I) .OR. COUPLED(I))) THEN                           ARN0F405.1792   
!         Well mixed b.l. (possibly with stratocumulus)                    ARN0F405.1793   
          BL_TYPE_3(I) = 1.0                                               ARN0F405.1794   
        ELSEIF (UNSTABLE(I) .AND. DSC(I) .AND. .NOT.CUMULUS(I)) THEN       ARN0F405.1795   
!         Decoupled stratocumulus (not over cumulus)                       ARN0F405.1796   
          BL_TYPE_4(I) = 1.0                                               ARN0F405.1797   
        ELSEIF (DSC(I) .AND. CUMULUS(I)) THEN                              ARN0F405.1798   
!         Decoupled stratocumulus over cumulus                             ARN0F405.1799   
          BL_TYPE_5(I) = 1.0                                               ARN0F405.1800   
        ELSEIF (.NOT.DSC(I) .AND. CUMULUS(I)) THEN                         ARN0F405.1801   
!         Cumulus capped b.l.                                              ARN0F405.1802   
          BL_TYPE_6(I) = 1.0                                               ARN0F405.1803   
        ENDIF                                                              ARN0F405.1804   
      ENDDO                                                                ARN0F405.1805   
                                                                           KMKHZ6A.841    
      IF (LTIMER) THEN                                                     KMKHZ6A.842    
        CALL TIMER('KMKHZ   ',4)                                           KMKHZ6A.843    
      ENDIF                                                                KMKHZ6A.844    
                                                                           KMKHZ6A.845    
      RETURN                                                               KMKHZ6A.846    
      END                                                                  KMKHZ6A.847    
*ENDIF                                                                     KMKHZ6A.848