*IF DEF,A03_6A                                                             BDYLYR6A.2      
C *****************************COPYRIGHT******************************     BDYLYR6A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    BDYLYR6A.4      
C                                                                          BDYLYR6A.5      
C Use, duplication or disclosure of this code is subject to the            BDYLYR6A.6      
C restrictions as set forth in the contract.                               BDYLYR6A.7      
C                                                                          BDYLYR6A.8      
C                Meteorological Office                                     BDYLYR6A.9      
C                London Road                                               BDYLYR6A.10     
C                BRACKNELL                                                 BDYLYR6A.11     
C                Berkshire UK                                              BDYLYR6A.12     
C                RG12 2SZ                                                  BDYLYR6A.13     
C                                                                          BDYLYR6A.14     
C If no contract has been raised with this copy of the code, the use,      BDYLYR6A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      BDYLYR6A.16     
C to do so must first be obtained in writing from the Head of Numerical    BDYLYR6A.17     
C Modelling at the above address.                                          BDYLYR6A.18     
C ******************************COPYRIGHT******************************    BDYLYR6A.19     
!!!  SUBROUTINE BDY_LAYR-----------------------------------------------    BDYLYR6A.20     
!!!                                                                        BDYLYR6A.21     
!!!  Purpose: Calculate turbulent fluxes of heat, moisture and momentum    BDYLYR6A.22     
!!!           between (a) surface and atmosphere, (b) atmospheric levels   BDYLYR6A.23     
!!!           within the boundary layer, and/or the effects of these       BDYLYR6A.24     
!!!           fluxes on the primary model variables.  The flux of heat     BDYLYR6A.25     
!!!           into and through the soil is also modelled.  Numerous        BDYLYR6A.26     
!!!           related diagnostics are also calculated.                     BDYLYR6A.27     
!!!                                                                        BDYLYR6A.36     
!!!  Suitable for single column use - activate *IF definition IBM.         BDYLYR6A.37     
!!!                                                                        BDYLYR6A.38     
!!!  Model            Modification history:                                BDYLYR6A.39     
!!! version  Date                                                          BDYLYR6A.40     
!!!                                                                        BDYLYR6A.41     
!!!   4.4   10/09/97  New deck.   R.N.B.Smith                              BDYLYR6A.42     
!!!   4.5   Jul. 98   Kill the IBM specific lines. (JCThil)                AJC1F405.372    
!!!                                                                        BDYLYR6A.43     
!!! Programming standard : unified model documentation paper No 3          BDYLYR6A.44     
!!!                                                                        BDYLYR6A.45     
!!!  System component covered: P24.                                        BDYLYR6A.46     
!!!                                                                        BDYLYR6A.47     
!!!  Project task:                                                         BDYLYR6A.48     
!!!                                                                        BDYLYR6A.49     
!!!  Documentation: UMDP 24.                                               BDYLYR6A.50     
!!!                                                                        BDYLYR6A.51     
!!!---------------------------------------------------------------------   BDYLYR6A.52     
                                                                           BDYLYR6A.53     
!    Arguments :-                                                          BDYLYR6A.54     

      SUBROUTINE BDY_LAYR (                                                 4,80BDYLYR6A.55     
                                                                           BDYLYR6A.56     
! IN values defining field dimensions and subset to be processed :         BDYLYR6A.57     
     & P_FIELD,U_FIELD,N_TYPES,LAND_FIELD,                                 BDYLYR6A.58     
     & P_ROWS,FIRST_ROW,N_ROWS,ROW_LENGTH,                                 BDYLYR6A.59     
                                                                           BDYLYR6A.60     
! IN values defining vertical grid of model atmosphere :                   BDYLYR6A.61     
     & BL_LEVELS,P_LEVELS,AK,BK,AKH,BKH,DELTA_AK,DELTA_BK,                 BDYLYR6A.62     
     & EXNER,                                                              BDYLYR6A.63     
                                                                           BDYLYR6A.64     
! IN soil/vegetation/land surface data :                                   BDYLYR6A.65     
     & LAND_MASK,GATHER,LAND_INDEX,                                        BDYLYR6A.69     
     & ST_LEVELS,SM_LEVELS,TILE_FRAC,HT_TILE,CANOPY,                       BDYLYR6A.71     
     & CATCH,CATCH_TILE,HCON,                                              BDYLYR6A.72     
     & LYING_SNOW,RESIST,RESIST_TILE,ROOTD,ROOTD_TILE,                     BDYLYR6A.73     
     & SMVCCL,SMVCST,SMVCWT,STHF,STHU,                                     BDYLYR6A.74     
     & VFRAC_TILE,Z0V,Z0V_TILE,SIL_OROG_LAND,L_Z0_OROG,HO2R2_OROG,         BDYLYR6A.75     
     & LAI_TILE,                                                           BDYLYR6A.76     
                                                                           BDYLYR6A.77     
! IN sea/sea-ice data :                                                    BDYLYR6A.78     
     & DI,ICE_FRACT,U_0,V_0,                                               BDYLYR6A.79     
                                                                           BDYLYR6A.80     
! IN cloud data :                                                          BDYLYR6A.81     
     & CF,QCF,QCL,CCA,CCB,CCT,                                             BDYLYR6A.82     
                                                                           BDYLYR6A.83     
! IN everything not covered so far :                                       BDYLYR6A.84     
     & CO2_MMR,PHOTOSYNTH_ACT_RAD,PSTAR,RADNET,RAD_HR,RADHR_DIM1,          BDYLYR6A.85     
     & TIMESTEP,L_RMBL,L_BL_LSPICE,L_MOM,                                  BDYLYR6A.86     
                                                                           BDYLYR6A.87     
! INOUT data :                                                             BDYLYR6A.88     
     & Q,GC,T,T_SOIL,TI,TSTAR,TSTAR_TILE,U,V,Z0MSEA,                       BDYLYR6A.89     
                                                                           BDYLYR6A.90     
! OUT Diagnostic not requiring STASH flags :                               BDYLYR6A.91     
     & CD,CH,E_SEA,EPOT,ETRAN,FQW,FQW_TILE,FSMC,FTL,FTL_TILE,              ANG1F405.73     
     & H_SEA,RHOKH,RHOKM_UV,                                               ANG1F405.74     
     & RIB_GB,RIB,SEA_ICE_HTF,SURF_HT_FLUX_GB,TAUX,TAUY,VSHR,ZHT,          ARN0F405.181    
     & BL_TYPE_1,BL_TYPE_2,BL_TYPE_3,BL_TYPE_4,BL_TYPE_5,BL_TYPE_6,        ARN0F405.182    
                                                                           BDYLYR6A.94     
! OUT diagnostic requiring STASH flags :                                   BDYLYR6A.95     
     & FME,SICE_MLT_HTF,SNOMLT_SURF_HTF,LATENT_HEAT,                       BDYLYR6A.96     
     & Q1P5M,T1P5M,U10M,V10M,                                              BDYLYR6A.97     
                                                                           BDYLYR6A.98     
! (IN) STASH flags :-                                                      BDYLYR6A.99     
     & SFME,SIMLT,SMLT,SLH,SQ1P5,ST1P5,SU10,SV10,                          BDYLYR6A.100    
                                                                           BDYLYR6A.101    
! OUT data required for tracer mixing :                                    BDYLYR6A.102    
     & RHO_ARESIST,ARESIST,RESIST_B,                                       BDYLYR6A.103    
     & NRML,                                                               BDYLYR6A.104    
                                                                           BDYLYR6A.105    
! OUT data required for 4D-VAR :                                           BDYLYR6A.106    
     & RHO_CD_MODV1,RHO_KM,                                                BDYLYR6A.107    
                                                                           BDYLYR6A.108    
! OUT data required elsewhere in UM system :                               BDYLYR6A.109    
     & ECAN,EI,ES_GB,EXT,SNOWMELT,ZH,                                      BDYLYR6A.110    
     & GPP,NPP,RESP_P,                                                     BDYLYR6A.111    
     & T1_SD,Q1_SD,ERROR,                                                  BDYLYR6A.112    
                                                                           BDYLYR6A.113    
! LOGICAL LTIMER                                                           BDYLYR6A.114    
     & LTIMER                                                              BDYLYR6A.115    
     & )                                                                   BDYLYR6A.116    
                                                                           BDYLYR6A.117    
      IMPLICIT NONE                                                        BDYLYR6A.118    
                                                                           BDYLYR6A.119    
!  Inputs :-                                                               BDYLYR6A.120    
                                                                           BDYLYR6A.121    
! (a) Defining horizontal grid and subset thereof to be processed.         BDYLYR6A.122    
                                                                           BDYLYR6A.123    
      INTEGER                                                              BDYLYR6A.124    
     & P_FIELD                     ! IN No. of P-points in whole grid      BDYLYR6A.125    
!                                     (for dimensioning only).             BDYLYR6A.126    
     &,RADHR_DIM1                  ! IN Dimension of Radiative heating     BDYLYR6A.127    
!                                  !    rate (P_FIELD but used for         BDYLYR6A.128    
!                                  !    dynamic allocation)                BDYLYR6A.129    
     &,U_FIELD                     ! IN No. of UV-points in whole grid.    BDYLYR6A.133    
!                                     (Checked for consistency with        BDYLYR6A.135    
!                                     P_FIELD and P_ROWS; there must       BDYLYR6A.136    
!                                     be 1 less UV than P row.)            BDYLYR6A.137    
     &,N_TYPES                     ! IN number of land tiles               BDYLYR6A.141    
     &,LAND_FIELD                  ! IN No.of land points in whole grid.   BDYLYR6A.142    
!                                     (Checked for consistency with        BDYLYR6A.144    
!                                     P_FIELD )                            BDYLYR6A.145    
     &,P_ROWS                      ! IN No. of P-rows in whole grid        BDYLYR6A.150    
!                                     (for dimensioning only).             BDYLYR6A.151    
     &,FIRST_ROW                   ! IN First row of data to be treated,   BDYLYR6A.155    
!                                     referred to P-grid (must be > 1      BDYLYR6A.157    
!                                     since "polar" rows are never         BDYLYR6A.158    
!                                     treated).                            BDYLYR6A.159    
     &,N_ROWS                      ! IN No. of rows of data to be          BDYLYR6A.163    
!                                     treated, referred to P-grid.         BDYLYR6A.164    
!                                     FIRST_ROW+N_ROWS-1 must be less      BDYLYR6A.166    
!                                     than P_ROWS, since "polar" rows      BDYLYR6A.167    
!                                     are never treated.                   BDYLYR6A.168    
     &,ROW_LENGTH                  ! IN No. of points in one row.          BDYLYR6A.172    
!                                     (Checked for consistency with        BDYLYR6A.174    
!                                     P_FIELD and N_ROWS.)                 BDYLYR6A.175    
                                                                           BDYLYR6A.179    
! (b) Defining vertical grid of model atmosphere.                          BDYLYR6A.180    
                                                                           BDYLYR6A.181    
      INTEGER                                                              BDYLYR6A.182    
     & BL_LEVELS                   ! IN Max. no. of "boundary" levels      BDYLYR6A.183    
!                                     allowed.Assumed <= 30 for dim-       BDYLYR6A.184    
!                                     sioning of GAMMA in common deck      BDYLYR6A.185    
!                                     C_GAMMA used in SF_EXCH and KMKH     BDYLYR6A.186    
     &,P_LEVELS                    ! IN Total no. of vertical levels in    BDYLYR6A.187    
!                                       the model atmosphere.              BDYLYR6A.188    
      REAL                                                                 BDYLYR6A.189    
     & AK(P_LEVELS)                ! IN Hybrid 'A' for all levels.         BDYLYR6A.190    
     &,BK(P_LEVELS)                ! IN Hybrid 'B' for all levels.         BDYLYR6A.191    
     &,AKH(P_LEVELS+1)             ! IN Hybrid 'A' for layer interfaces.   BDYLYR6A.192    
     &,BKH(P_LEVELS+1)             ! IN Hybrid 'B' for layer interfaces.   BDYLYR6A.193    
     &,DELTA_AK(P_LEVELS)          ! IN Difference of hybrid 'A' across    BDYLYR6A.194    
!                                     layers (K-1/2 to K+1/2).             BDYLYR6A.195    
!                                     NB: Upper minus lower.               BDYLYR6A.196    
     &,DELTA_BK(P_LEVELS)          ! IN Difference of hybrid 'B' across    BDYLYR6A.197    
!                                     layers (K-1/2 to K+1/2).             BDYLYR6A.198    
!                                     NB: Upper minus lower.               BDYLYR6A.199    
     &,EXNER(P_FIELD,BL_LEVELS+1)  ! IN Exner function.  EXNER(,K) is      BDYLYR6A.200    
!                                     value for LOWER BOUNDARY of          BDYLYR6A.201    
!                                     level K.                             BDYLYR6A.202    
                                                                           BDYLYR6A.203    
! (c) Soil/vegetation/land surface parameters (mostly constant).           BDYLYR6A.204    
                                                                           BDYLYR6A.205    
      LOGICAL                                                              BDYLYR6A.206    
     & LAND_MASK(P_FIELD)          ! IN T if land, F elsewhere.            BDYLYR6A.207    
     &,L_Z0_OROG                   ! IN T to use orog.roughness            BDYLYR6A.208    
!                                     treatment in SF_EXCH                 BDYLYR6A.209    
     &,L_RMBL                      ! IN T to use rapidly mixing boundary   BDYLYR6A.210    
!                                     scheme in IMPL_CAL                   BDYLYR6A.211    
     &,L_BL_LSPICE                 ! IN True if 3A large-scale ppn         BDYLYR6A.212    
!                                       scheme is used.                    BDYLYR6A.213    
     &,L_MOM                       ! IN Switch for convective momentum     BDYLYR6A.214    
!                                  !    transport.                         BDYLYR6A.215    
     &,GATHER                      ! IN T if gather to sea-ice points      BDYLYR6A.217    
!                                     in SF_EXCH. Saves a lot of un-       BDYLYR6A.218    
!                                     necessary calculations if there      BDYLYR6A.219    
!                                     are relatively few sea-ice points    BDYLYR6A.220    
                                                                           BDYLYR6A.221    
      INTEGER                                                              BDYLYR6A.222    
     & LAND_INDEX(P_FIELD)         ! IN LAND_INDEX(I)=J => the Jth         BDYLYR6A.223    
!                                     point in P_FIELD is the Ith          BDYLYR6A.224    
!                                     land point.                          BDYLYR6A.225    
                                                                           BDYLYR6A.227    
      INTEGER                                                              BDYLYR6A.228    
     & ST_LEVELS                   ! IN No. of deep soil temp. levels      BDYLYR6A.229    
     &,SM_LEVELS                   ! IN No. of soil moisture levels        BDYLYR6A.230    
                                                                           BDYLYR6A.231    
      REAL                                                                 BDYLYR6A.232    
     & CANOPY(LAND_FIELD)          ! IN Surface/canopy water (kg/m2)       BDYLYR6A.233    
     &,CATCH(LAND_FIELD)           ! IN Surface/canopy water capacity      BDYLYR6A.234    
!                                     (kg/m2).                             BDYLYR6A.235    
     &,CATCH_TILE(LAND_FIELD,N_TYPES)                                      BDYLYR6A.236    
!                                    IN Surface/canopy water capacity      BDYLYR6A.237    
!                                     (kg per sq m).                       BDYLYR6A.238    
     &,HCON(LAND_FIELD)            ! IN Soil thermal conductivity          BDYLYR6A.239    
!                                     (W/m/K).                             BDYLYR6A.240    
     &,HT_TILE(LAND_FIELD,N_TYPES) ! IN Canopy height (m)                  BDYLYR6A.241    
     &,LAI_TILE(LAND_FIELD,N_TYPES)! IN Leaf area index.                   BDYLYR6A.242    
     &,LYING_SNOW(P_FIELD)         ! IN Lying snow (kg/sq m).              BDYLYR6A.243    
!                                     Must be global for coupled model,    BDYLYR6A.245    
!                                     ie dimension P_FIELD not             BDYLYR6A.246    
!                                     LAND_FIELD                           BDYLYR6A.247    
     &,RESIST(LAND_FIELD)          ! IN "Stomatal" resistance to           BDYLYR6A.249    
!                                     evaporation (seconds per metre).     BDYLYR6A.250    
     &,RESIST_TILE(LAND_FIELD,N_TYPES)                                     BDYLYR6A.251    
!                                    IN "Stomatal" resistance to           BDYLYR6A.252    
!                                     evaporation (seconds per metre).     BDYLYR6A.253    
     &,ROOTD(LAND_FIELD)           ! IN Depth of active soil layer         BDYLYR6A.254    
!                                     ("root depth") (metres).             BDYLYR6A.255    
     &,ROOTD_TILE(LAND_FIELD,N_TYPES)                                      BDYLYR6A.256    
!                                    IN Depth of active soil layer         BDYLYR6A.257    
!                                     ("root depth") (metres).             BDYLYR6A.258    
     &,SMVCCL(LAND_FIELD)          ! IN Critical volumetric SMC (m3/m3     BDYLYR6A.259    
!                                     of soil).                            BDYLYR6A.260    
     &,SMVCST(LAND_FIELD)          ! IN Volumetric saturation point        BDYLYR6A.261    
!                                     (m3/m3 of soil).                     BDYLYR6A.262    
     &,SMVCWT(LAND_FIELD)          ! IN Volumetric wilting point (m3/m3    BDYLYR6A.263    
!                                     of soil).                            BDYLYR6A.264    
     &,STHF(LAND_FIELD,SM_LEVELS)  ! IN Frozen soil moisture content of    BDYLYR6A.265    
!                                     each layer as a fraction of          BDYLYR6A.266    
!                                     saturation.                          BDYLYR6A.267    
     &,STHU(LAND_FIELD,SM_LEVELS)  ! IN Unfrozen soil moisture content     BDYLYR6A.268    
!                                     of each layer as a fraction of       BDYLYR6A.269    
!                                     saturation.                          BDYLYR6A.270    
     &,TILE_FRAC(P_FIELD,N_TYPES)  ! IN fractional coverage for each       BDYLYR6A.271    
!                                     surface tile                         BDYLYR6A.272    
     &,VFRAC_TILE(LAND_FIELD,N_TYPES)                                      BDYLYR6A.273    
!                                  ! IN Vegetation fraction.               BDYLYR6A.274    
     &,Z0V(P_FIELD)                ! IN Vegetative roughness length (m).   BDYLYR6A.275    
!                                     NB:UM uses same storage for Z0MSEA   BDYLYR6A.276    
!                                     so for sea points this is INOUT.     BDYLYR6A.277    
     &,Z0V_TILE(P_FIELD,N_TYPES)   ! IN Vegetative roughness length (m)    BDYLYR6A.278    
!                                     for surface tile                     BDYLYR6A.279    
     &,SIL_OROG_LAND(LAND_FIELD)   ! IN Silhouette area of unresolved      BDYLYR6A.280    
!                                     orography per unit horizontal area   BDYLYR6A.281    
!                                     on land points only.                 BDYLYR6A.282    
     &,HO2R2_OROG(LAND_FIELD)      ! IN Standard Deviation of orography.   BDYLYR6A.283    
!                                     equivilent to peak to trough         BDYLYR6A.284    
!                                     height of unresolved orography       BDYLYR6A.285    
!                                     devided by 2SQRT(2) on land          BDYLYR6A.286    
!                                     points only (m)                      BDYLYR6A.287    
                                                                           BDYLYR6A.288    
! (d) Sea/sea-ice data.                                                    BDYLYR6A.289    
                                                                           BDYLYR6A.290    
      REAL                                                                 BDYLYR6A.291    
     & DI(P_FIELD)                 ! IN "Equivalent thickness" of          BDYLYR6A.292    
!                                     sea-ice(m).                          BDYLYR6A.293    
     &,ICE_FRACT(P_FIELD)          ! IN Fraction of gridbox covered by     BDYLYR6A.294    
!                                     sea-ice (decimal fraction).          BDYLYR6A.295    
     &,U_0(U_FIELD)                ! IN W'ly component of surface          BDYLYR6A.296    
!                                     current (m/s).                       BDYLYR6A.297    
     &,V_0(U_FIELD)                ! IN S'ly component of surface          BDYLYR6A.298    
!                                     current (m/s).                       BDYLYR6A.299    
                                                                           BDYLYR6A.300    
! (e) Cloud data.                                                          BDYLYR6A.301    
                                                                           BDYLYR6A.302    
      REAL                                                                 BDYLYR6A.303    
     & CF(P_FIELD,BL_LEVELS)       ! IN Cloud fraction (decimal).          BDYLYR6A.304    
     &,QCF(P_FIELD,BL_LEVELS)      ! IN Cloud ice (kg per kg air)          BDYLYR6A.305    
     &,QCL(P_FIELD,BL_LEVELS)      ! IN Cloud liquid water (kg             BDYLYR6A.306    
!                                     per kg air).                         BDYLYR6A.307    
     &,CCA(P_FIELD)                ! IN Convective Cloud Amount            BDYLYR6A.308    
!                                     (decimal)                            BDYLYR6A.309    
                                                                           BDYLYR6A.310    
      INTEGER                                                              BDYLYR6A.311    
     & CCB(P_FIELD)                ! IN Convective Cloud Base              BDYLYR6A.312    
     &,CCT(P_FIELD)                ! IN Convective Cloud Top               BDYLYR6A.313    
                                                                           BDYLYR6A.314    
! (f) Atmospheric + any other data not covered so far, incl control.       BDYLYR6A.315    
                                                                           BDYLYR6A.316    
      REAL                                                                 BDYLYR6A.317    
     & CO2_MMR                     ! IN CO2 Mass Mixing Ratio              BDYLYR6A.318    
     &,PHOTOSYNTH_ACT_RAD(P_FIELD) ! IN Net downward shortwave radiation   BDYLYR6A.319    
!                                     in band 1 (w/m2).                    BDYLYR6A.320    
     &,PSTAR(P_FIELD)              ! IN Surface pressure (Pascals).        BDYLYR6A.321    
     &,RAD_HR(RADHR_DIM1,BL_LEVELS)! IN Radiative heating rate (K/s).      BDYLYR6A.322    
     &,RADNET(P_FIELD)             ! IN Surface net radiation (W/sq m,     BDYLYR6A.323    
!                                     positive downwards).                 BDYLYR6A.324    
     &,TIMESTEP                    ! IN Timestep (seconds).                BDYLYR6A.325    
                                                                           BDYLYR6A.326    
      LOGICAL LTIMER               ! Logical switch for TIMER diags        BDYLYR6A.327    
                                                                           BDYLYR6A.328    
!  STASH flags :-                                                          BDYLYR6A.329    
                                                                           BDYLYR6A.330    
      LOGICAL                                                              BDYLYR6A.331    
     & SFME    ! IN Flag for FME (q.v.).                                   BDYLYR6A.332    
     &,SIMLT   ! IN Flag for SICE_MLT_HTF (q.v.)                           BDYLYR6A.333    
     &,SMLT    ! IN Flag for SNOMLT_SURF_HTF (q.v.)                        BDYLYR6A.334    
     &,SLH     ! IN Flag for LATENT_HEAT (q.v.)                            BDYLYR6A.335    
     &,SQ1P5   ! IN Flag for Q1P5M (q.v.)                                  BDYLYR6A.336    
     &,ST1P5   ! IN Flag for T1P5M (q.v.)                                  BDYLYR6A.337    
     &,SU10    ! IN Flag for U10M (q.v.)                                   BDYLYR6A.338    
     &,SV10    ! IN Flag for V10M (q.v.)                                   BDYLYR6A.339    
                                                                           BDYLYR6A.340    
!  In/outs :-                                                              BDYLYR6A.341    
                                                                           BDYLYR6A.342    
      REAL                                                                 BDYLYR6A.343    
     & GC(LAND_FIELD,N_TYPES)      ! INOUT "Stomatal" conductance to       BDYLYR6A.344    
!                                      evaporation (m/s).                  BDYLYR6A.345    
     &,Q(P_FIELD,BL_LEVELS)        ! INOUT Input:specific humidity         BDYLYR6A.346    
!                                      ( kg/kg air).                       BDYLYR6A.347    
!                                      Output:total water content          BDYLYR6A.348    
!                                      (Q)(kg/Kg air).                     BDYLYR6A.349    
     &,T(P_FIELD,BL_LEVELS)        ! INOUT Input:atmospheric temp(K)       BDYLYR6A.350    
!                                      Output:liquid/frozen water          BDYLYR6A.351    
!                                      temperature (TL) (K)                BDYLYR6A.352    
     &,T_SOIL(LAND_FIELD,SM_LEVELS)! INOUT Soil temperatures (K).          BDYLYR6A.353    
     &,TI(P_FIELD)                 ! INOUT Sea-ice surface layer           BDYLYR6A.354    
!                                      temperature (K).                    BDYLYR6A.355    
     &,TSTAR(P_FIELD)              ! INOUT Surface temperature (K).        BDYLYR6A.356    
     &,TSTAR_TILE(P_FIELD,N_TYPES) ! INOUT Surface tile temperature        BDYLYR6A.357    
     &,U(U_FIELD,BL_LEVELS)        ! INOUT W'ly wind component (m/s)       BDYLYR6A.358    
     &,V(U_FIELD,BL_LEVELS)        ! INOUT S'ly wind component (m/s)       BDYLYR6A.359    
     &,Z0MSEA(P_FIELD)             ! INOUT Sea-surface roughness           BDYLYR6A.360    
!                                      length for momentum (m).            BDYLYR6A.361    
!                                      NB: same storage is used            BDYLYR6A.362    
!                                      for Z0V, so the intent is           BDYLYR6A.363    
!                                      IN for land points.                 BDYLYR6A.364    
                                                                           BDYLYR6A.365    
!  Outputs :-                                                              BDYLYR6A.366    
!-1 Diagnostic (or effectively so - includes coupled model requisites):-   BDYLYR6A.367    
                                                                           BDYLYR6A.368    
!  (a) Calculated anyway (use STASH space from higher level) :-            BDYLYR6A.369    
!                                                                          BDYLYR6A.370    
      REAL                                                                 BDYLYR6A.371    
     & CD(P_FIELD)                 ! OUT Turbulent surface exchange        BDYLYR6A.372    
!                                     (bulk transfer) coefficient for      BDYLYR6A.373    
!                                     momentum.                            BDYLYR6A.374    
     &,CH(P_FIELD)                 ! OUT Turbulent surface exchange        BDYLYR6A.375    
!                                     (bulk transfer) coefficient for      BDYLYR6A.376    
!                                     heat and/or moisture.                BDYLYR6A.377    
     &,E_SEA(P_FIELD)              ! OUT Evaporation from sea times        BDYLYR6A.378    
!                                     leads fraction. Zero over land.      BDYLYR6A.379    
!                                     (kg per square metre per sec).       BDYLYR6A.380    
     &,EPOT_TILE(P_FIELD,N_TYPES)  ! WORK potential evaporation            ANG1F405.75     
!                                     over tile (kg/m2/s).                 ANG1F405.76     
     &,EPOT(P_FIELD)               ! OUT potential evaporation (kg/m2/s)   ANG1F405.77     
     &,FQW(P_FIELD,BL_LEVELS)      ! OUT Moisture flux between layers      BDYLYR6A.381    
!                                     (kg per square metre per sec).       BDYLYR6A.382    
!                                     FQW(,1) is total water flux          BDYLYR6A.383    
!                                     from surface, 'E'.                   BDYLYR6A.384    
     &,FQW_TILE(P_FIELD,N_TYPES)   ! OUT surface tile moisture flux        BDYLYR6A.385    
     &,FSMC(LAND_FIELD)            ! OUT soil moisture availability.       ANG1F405.78     
     &,FSMC_TILE(LAND_FIELD,N_TYPES)                                       ANG1F405.79     
                                   ! WORK soil moisture availability       ANG1F405.80     
!                                     over tile.                           ANG1F405.81     
     &,FTL(P_FIELD,BL_LEVELS)      ! OUT FTL(,K) contains net turbulent    BDYLYR6A.386    
!                                     sensible heat flux into layer K      BDYLYR6A.387    
!                                     from below; so FTL(,1) is the        BDYLYR6A.388    
!                                     surface sensible heat, H. (W/m2)     BDYLYR6A.389    
     &,FTL_TILE(P_FIELD,N_TYPES)   ! OUT surface tile heat flux            BDYLYR6A.390    
     &,H_SEA(P_FIELD)              ! OUT Surface sensible heat flux over   BDYLYR6A.391    
!                                     sea times leads fraction. (W/m2)     BDYLYR6A.392    
     &,RHOKH(P_FIELD,BL_LEVELS)    ! OUT Exchange coeffs for moisture.     BDYLYR6A.393    
     &,RHOKM_UV(U_FIELD,BL_LEVELS) ! OUT Exchange coefficients for         BDYLYR6A.394    
!                                     momentum (on UV-grid, with 1st       BDYLYR6A.395    
!                                     and last rows undefined (or, at      BDYLYR6A.396    
!                                     present, set to "missing data"))     BDYLYR6A.397    
     &,RIB(P_FIELD,N_TYPES)        ! OUT Tile bulk Richardson number for   BDYLYR6A.398    
!                                     lowest layer.                        BDYLYR6A.399    
     &,RIB_GB(P_FIELD)             ! OUT Mean bulk Richardson number for   BDYLYR6A.400    
!                                     lowest layer.                        BDYLYR6A.401    
     &,SEA_ICE_HTF(P_FIELD)        ! OUT Heat flux through sea-ice         BDYLYR6A.402    
!                                     (W/m2, positive downwards).          BDYLYR6A.403    
     &,SURF_HT_FLUX_GB(P_FIELD)    ! OUT Net downward heat flux at         BDYLYR6A.404    
!                                     surface over land or sea-ice         BDYLYR6A.405    
!                                     fraction of gridbox (W/m2).          BDYLYR6A.406    
     &,TAUX(U_FIELD,BL_LEVELS)     ! OUT W'ly component of surface wind    BDYLYR6A.407    
!                                     stress (N/sq m).(On UV-grid with     BDYLYR6A.408    
!                                     first and last rows undefined or     BDYLYR6A.409    
!                                     at present, set to missing data      BDYLYR6A.410    
     &,TAUY(U_FIELD,BL_LEVELS)     ! OUT S'ly component of surface wind    BDYLYR6A.411    
!                                     stress (N/sq m).  On UV-grid;        BDYLYR6A.412    
!                                     comments as per TAUX.                BDYLYR6A.413    
     &,VSHR(P_FIELD)               ! OUT Magnitude of surface-to-lowest    BDYLYR6A.414    
!                                     atm level wind shear (m per s).      BDYLYR6A.415    
     &,ZHT(P_FIELD)                ! OUT Height below which there may be   ARN0F405.183    
!                                  !     turbulent mixing (m).             ARN0F405.184    
     &,BL_TYPE_1(P_FIELD)          ! OUT Indicator set to 1.0 if stable    ARN0F405.185    
!                                  !     b.l. diagnosed, 0.0 otherwise.    ARN0F405.186    
     &,BL_TYPE_2(P_FIELD)          ! OUT Indicator set to 1.0 if Sc over   ARN0F405.187    
!                                  !     stable surface layer diagnosed,   ARN0F405.188    
!                                  !     0.0 otherwise.                    ARN0F405.189    
     &,BL_TYPE_3(P_FIELD)          ! OUT Indicator set to 1.0 if well      ARN0F405.190    
!                                  !     mixed b.l. diagnosed,             ARN0F405.191    
!                                  !     0.0 otherwise.                    ARN0F405.192    
     &,BL_TYPE_4(P_FIELD)          ! OUT Indicator set to 1.0 if           ARN0F405.193    
!                                  !     decoupled Sc layer (not over      ARN0F405.194    
!                                  !     cumulus) diagnosed,               ARN0F405.195    
!                                  !     0.0 otherwise.                    ARN0F405.196    
     &,BL_TYPE_5(P_FIELD)          ! OUT Indicator set to 1.0 if           ARN0F405.197    
!                                  !     decoupled Sc layer over cumulus   ARN0F405.198    
!                                  !     diagnosed, 0.0 otherwise.         ARN0F405.199    
     &,BL_TYPE_6(P_FIELD)          ! OUT Indicator set to 1.0 if a         ARN0F405.200    
!                                  !     cumulus capped b.l. diagnosed,    ARN0F405.201    
!                                  !     0.0 otherwise.                    ARN0F405.202    
     &,RHO_CD_MODV1(P_FIELD)       ! OUT Surface air density * drag coef   BDYLYR6A.416    
!                                     *mod(v1 - v0) before interpolation   BDYLYR6A.417    
     &,RHO_KM(P_FIELD,2:BL_LEVELS) ! OUT Air density * turbulent mixing    BDYLYR6A.418    
!                                     coefficient for momentum before      BDYLYR6A.419    
!                                     interpolation.                       BDYLYR6A.420    
     &,RHO_ARESIST(P_FIELD)        ! OUT RHOSTAR*CD_STD*VSHR for SULPHUR   BDYLYR6A.421    
!                                     cycle                                BDYLYR6A.422    
     &,ARESIST(P_FIELD)            ! OUT 1/(CD_STD*VSHR) for Sulphur       BDYLYR6A.423    
!                                     cycle                                BDYLYR6A.424    
     &,RESIST_B(P_FIELD)           ! OUT (1/CH-1/(CD_STD)/VSHR for         BDYLYR6A.425    
!                                     Sulphur cycle                        BDYLYR6A.426    
                                                                           BDYLYR6A.427    
      INTEGER                                                              BDYLYR6A.428    
     & NRML(P_FIELD)               ! OUT Number of model layers in the     BDYLYR6A.429    
!                                     Rapidly Mixing Layer; diagnosed      BDYLYR6A.430    
!                                     in SF_EXCH and KMKH and used in      BDYLYR6A.431    
!                                     IMPL_CAL, SF_EVAP and TR_MIX.        BDYLYR6A.432    
                                                                           BDYLYR6A.433    
!  (b) Not passed between lower-level routines (not in workspace at this   BDYLYR6A.434    
!      level) :-                                                           BDYLYR6A.435    
                                                                           BDYLYR6A.436    
      REAL                                                                 BDYLYR6A.437    
     & FME(P_FIELD)              ! OUT Wind mixing "power" (W per sq m).   BDYLYR6A.438    
     &,SICE_MLT_HTF(P_FIELD)     ! OUT Heat flux due to melting of sea-    BDYLYR6A.439    
!                                   ice (Watts per sq metre).              BDYLYR6A.440    
     &,SNOMLT_SURF_HTF(P_FIELD)  ! OUT Heat flux required for surface      BDYLYR6A.441    
!                                   melting of snow (W/m2).                BDYLYR6A.442    
     &,LATENT_HEAT(P_FIELD)      ! OUT Surface latent heat flux, +ve       BDYLYR6A.443    
!                                   upwards (Watts per sq m).              BDYLYR6A.444    
     &,Q1P5M(P_FIELD)            ! OUT Q at 1.5 m (kg water per kg air).   BDYLYR6A.445    
     &,T1P5M(P_FIELD)            ! OUT T at 1.5 m (K).                     BDYLYR6A.446    
     &,U10M(U_FIELD)             ! OUT U at 10 m (m per s).                BDYLYR6A.447    
     &,V10M(U_FIELD)             ! OUT V at 10 m (m per s).                BDYLYR6A.448    
                                                                           BDYLYR6A.449    
!-2 Genuinely output, needed by other atmospheric routines :-              BDYLYR6A.450    
                                                                           BDYLYR6A.451    
      REAL                                                                 BDYLYR6A.452    
     & EI(P_FIELD)               ! OUT Sublimation from lying snow or      BDYLYR6A.453    
!                                   sea-ice (kg/m2/s).                     BDYLYR6A.454    
     &,ECAN(P_FIELD)             ! OUT Gridbox mean evaporation from       BDYLYR6A.455    
!                                   canopy/surface store (kg/m2/s).        BDYLYR6A.456    
!                                   Zero over sea.                         BDYLYR6A.457    
     &,ES_GB(P_FIELD)            ! OUT Surface evapotranspiration          BDYLYR6A.458    
!                                   through a resistance which is not      BDYLYR6A.459    
!                                   entirely aerodynamic i.e. "soil        BDYLYR6A.460    
!                                   evaporation".  Always non-negative.    BDYLYR6A.461    
!                                   (kg/m2/s).                             BDYLYR6A.462    
     &,ETRAN(P_FIELD,N_TYPES)    ! OUT Transpiration (kg/m2/s).            BDYLYR6A.463    
     &,EXT(LAND_FIELD,SM_LEVELS) ! OUT Extraction of water from each       BDYLYR6A.464    
!                                   soil layer (kg/m2/s).                  BDYLYR6A.465    
     &,GPP(LAND_FIELD,N_TYPES)   ! OUT Gross primary productivity          BDYLYR6A.466    
!                                   (kg C/m2/s).                           BDYLYR6A.467    
     &,NPP(LAND_FIELD,N_TYPES)   ! OUT Net primary productivity            BDYLYR6A.468    
!                                   (kg C/m2/s).                           BDYLYR6A.469    
     &,RESP_P(LAND_FIELD,N_TYPES)! OUT Plant respiration (kg C/m2/s).      BDYLYR6A.470    
     &,SNOWMELT(P_FIELD)         ! OUT Snowmelt (kg/m2/s).                 BDYLYR6A.471    
     &,ZH(P_FIELD)               ! INOUT Height above surface of top of    BDYLYR6A.472    
!                                   boundary layer (metres).               BDYLYR6A.473    
     &,T1_SD(P_FIELD)            ! OUT Standard deviation of turbulent     BDYLYR6A.474    
!                                   fluctuations of layer 1 temperature;   BDYLYR6A.475    
!                                   for use in initiating convection.      BDYLYR6A.476    
     &,Q1_SD(P_FIELD)            ! OUT Standard deviation of turbulent     BDYLYR6A.477    
!                                   fluctuations of layer 1 humidity;      BDYLYR6A.478    
!                                   for use in initiating convection.      BDYLYR6A.479    
      INTEGER                                                              BDYLYR6A.480    
     & ERROR          ! OUT 0 - AOK;                                       BDYLYR6A.481    
!                     !     1 to 7  - bad grid definition detected;        BDYLYR6A.483    
                                                                           BDYLYR6A.487    
!---------------------------------------------------------------------     BDYLYR6A.488    
!  External routines called :-                                             BDYLYR6A.489    
                                                                           BDYLYR6A.490    
      EXTERNAL Z,HEAT_CON,SMC_ROOT,SF_EXCH,BOUY_TQ,BTQ_INT,                BDYLYR6A.491    
     & KMKH,EX_FLUX_TQ,EX_FLUX_UV,IM_CAL_TQ,SICE_HTF,SF_EVAP,              BDYLYR6A.492    
     & IM_CAL_UV                                                           BDYLYR6A.493    
      EXTERNAL TIMER                                                       BDYLYR6A.494    
*IF -DEF,SCMA                                                              AJC1F405.373    
      EXTERNAL UV_TO_P,P_TO_UV                                             BDYLYR6A.496    
*ENDIF                                                                     BDYLYR6A.497    
                                                                           BDYLYR6A.498    
!-----------------------------------------------------------------------   BDYLYR6A.499    
!   Symbolic constants (parameters) reqd in top-level routine :-           BDYLYR6A.500    
                                                                           BDYLYR6A.501    
*CALL C_R_CP                                                               BDYLYR6A.502    
*CALL C_G                                                                  BDYLYR6A.503    
*CALL C_LHEAT                                                              BDYLYR6A.504    
*CALL C_GAMMA                                                              BDYLYR6A.505    
*CALL SOIL_THICK                                                           BDYLYR6A.506    
*IF DEF,MPP                                                                BDYLYR6A.507    
! MPP Common block                                                         BDYLYR6A.508    
*CALL PARVARS                                                              BDYLYR6A.509    
*ENDIF                                                                     BDYLYR6A.510    
                                                                           BDYLYR6A.511    
! Derived local parameters.                                                BDYLYR6A.512    
                                                                           BDYLYR6A.513    
      REAL LCRCP,LS,LSRCP                                                  BDYLYR6A.514    
                                                                           BDYLYR6A.515    
      PARAMETER (                                                          BDYLYR6A.516    
     & LCRCP=LC/CP           ! Evaporation-to-dT conversion factor.        BDYLYR6A.517    
     &,LS=LF+LC              ! Latent heat of sublimation.                 BDYLYR6A.518    
     &,LSRCP=LS/CP           ! Sublimation-to-dT conversion factor.        BDYLYR6A.519    
     &  )                                                                  BDYLYR6A.520    
                                                                           BDYLYR6A.521    
!-----------------------------------------------------------------------   BDYLYR6A.522    
                                                                           BDYLYR6A.523    
!  Workspace :-                                                            BDYLYR6A.524    
                                                                           BDYLYR6A.525    
      REAL                                                                 BDYLYR6A.526    
     & A_DQSDT(P_FIELD,BL_LEVELS)                                          BDYLYR6A.527    
!                               ! Saturated lapse rate factor              BDYLYR6A.528    
!                               ! on p,T,q-levels (full levels).           BDYLYR6A.529    
     &,A_DQSDTM(P_FIELD,BL_LEVELS)                                         BDYLYR6A.530    
!                               ! Saturated lapse rate factor              BDYLYR6A.531    
!                               ! on intermediate levels (half levels).    BDYLYR6A.532    
     &,ALPHA1(P_FIELD,N_TYPES)  ! Mean gradient of saturated               BDYLYR6A.533    
!                                 specific humidity with                   BDYLYR6A.534    
!                                 respect to temperature between           BDYLYR6A.535    
!                                 the bottom model layer and the           BDYLYR6A.536    
!                                 tile surfaces.                           BDYLYR6A.537    
     &,ALPHA1_GB(P_FIELD)       ! Mean gradient of saturated               BDYLYR6A.538    
!                                 specific humidity with                   BDYLYR6A.539    
!                                 respect to temperature between           BDYLYR6A.540    
!                                 the bottom model layer and the           BDYLYR6A.541    
!                                 tile surfaces                            BDYLYR6A.542    
     &,A_QS(P_FIELD,BL_LEVELS)  ! Saturated lapse rate factor              BDYLYR6A.543    
!                               ! on p,T,q-levels (full levels).           BDYLYR6A.544    
     &,A_QSM(P_FIELD,BL_LEVELS)                                            BDYLYR6A.545    
!                               ! Saturated lapse rate factor              BDYLYR6A.546    
!                               ! on intermediate levels (half levels).    BDYLYR6A.547    
     &,ASHTF(P_FIELD)           ! Coefficient to calculate surface         BDYLYR6A.548    
!                                 heat flux into soil or sea-ice.          BDYLYR6A.549    
     &,ASURF(P_FIELD)           ! Reciprocal areal heat capacity           BDYLYR6A.550    
!                                 of soil layer or sea-ice                 BDYLYR6A.551    
!                                 surface layer (K m**2 / J).              BDYLYR6A.552    
     &,BQ(P_FIELD,BL_LEVELS)    ! A buoyancy parameter for clear air       BDYLYR6A.553    
!                               ! on p,T,q-levels (full levels).           BDYLYR6A.554    
     &,BQ_CLD(P_FIELD,BL_LEVELS)! A buoyancy parameter for cloudy air      BDYLYR6A.555    
!                               ! on p,T,q-levels (full levels).           BDYLYR6A.556    
     &,BQM(P_FIELD,BL_LEVELS)   ! A buoyancy parameter for clear air       BDYLYR6A.557    
!                               ! on intermediate levels (half levels).    BDYLYR6A.558    
     &,BQM_CLD(P_FIELD,BL_LEVELS)                                          BDYLYR6A.559    
!                               ! A buoyancy parameter for cloudy air      BDYLYR6A.560    
!                               ! on intermediate levels (half levels).    BDYLYR6A.561    
     &,BT(P_FIELD,BL_LEVELS)    ! A buoyancy parameter for clear air       BDYLYR6A.562    
!                               ! on p,T,q-levels (full levels).           BDYLYR6A.563    
     &,BT_CLD(P_FIELD,BL_LEVELS)                                           BDYLYR6A.564    
!                               ! A buoyancy parameter for cloudy air      BDYLYR6A.565    
!                               ! on p,T,q-levels (full levels).           BDYLYR6A.566    
     &,BTM(P_FIELD,BL_LEVELS)   ! A buoyancy parameter for clear air       BDYLYR6A.567    
!                               ! on intermediate levels (half levels).    BDYLYR6A.568    
     &,BTM_CLD(P_FIELD,BL_LEVELS)                                          BDYLYR6A.569    
!                               ! A buoyancy parameter for cloudy air      BDYLYR6A.570    
!                               ! on intermediate levels (half levels).    BDYLYR6A.571    
     &,DB(P_FIELD,2:BL_LEVELS)                                             BDYLYR6A.572    
!                               ! Buoyancy jump across layer interface.    BDYLYR6A.573    
     &,DELTAP(P_FIELD,BL_LEVELS)! Difference in pressure between levels    BDYLYR6A.574    
     &,DELTAP_UV(P_FIELD,BL_LEVELS)                                        BDYLYR6A.575    
!                                 Difference in pressure between levels    BDYLYR6A.576    
!                                 on UV points                             BDYLYR6A.577    
     &,DQSDT(P_FIELD,BL_LEVELS) ! Derivative of q_SAT w.r.t. T             BDYLYR6A.578    
     &,DQW_1(P_FIELD)           ! Increment for QW(,1).                    BDYLYR6A.579    
     &,DTRDZ(P_FIELD,BL_LEVELS) ! -g.dt/dp for model layers.               BDYLYR6A.580    
     &,DTRDZ_UV(U_FIELD,BL_LEVELS)                                         BDYLYR6A.581    
!                                 -g.dt/dp for model wind layers.          BDYLYR6A.582    
     &,DTRDZ_RML(P_FIELD)       ! -g.dt/dp for the rapidly                 BDYLYR6A.583    
!                                 mixing layer.                            BDYLYR6A.584    
     &,DZL(P_FIELD,BL_LEVELS)   ! DZL(,K) is depth in m of layer           BDYLYR6A.585    
!                                 K, i.e. distance from boundary           BDYLYR6A.586    
!                                 K-1/2 to boundary K+1/2.                 BDYLYR6A.587    
     &,DU(U_FIELD,BL_LEVELS)    ! BL increment to u wind foeld             BDYLYR6A.588    
     &,DV(U_FIELD,BL_LEVELS)    ! BL increment to v wind foeld             BDYLYR6A.589    
     &,DU_NT(U_FIELD,BL_LEVELS) ! non-turbulent inc. to u wind field       BDYLYR6A.590    
     &,DV_NT(U_FIELD,BL_LEVELS) ! non-turbulent inc. to v wind field       BDYLYR6A.591    
     &,DTL_NT(P_FIELD,BL_LEVELS)! non-turbulent inc. to TL field           BDYLYR6A.592    
     &,DQW_NT(P_FIELD,BL_LEVELS)! non-turbulent inc. to QW field           BDYLYR6A.593    
     &,ES(P_FIELD,N_TYPES)      ! Surface evapotranspiration               BDYLYR6A.594    
!                                 through a resistance which is not        BDYLYR6A.595    
!                                 entirely aerodynamic i.e. "soil          BDYLYR6A.596    
!                                 evaporation".  Always non-negative.      BDYLYR6A.597    
!                                 (kg/m2/s).                               BDYLYR6A.598    
     &,ESOIL(P_FIELD,N_TYPES)   ! Evaporation from bare soil (kg/m2        BDYLYR6A.599    
     &,FB_SURF(P_FIELD)         ! Surface flux buoyancy over density       BDYLYR6A.600    
!                               ! (m^2/s^3)                                BDYLYR6A.601    
!                                                                          BDYLYR6A.602    
     &,FRACA(P_FIELD,N_TYPES)   ! Fraction of surface moisture flux        BDYLYR6A.603    
!                                 with only aerodynamic resistance.        BDYLYR6A.604    
     &,F_SE(P_FIELD,N_TYPES)    ! Fraction of the evapotranspiration       BDYLYR6A.605    
!                                 which is bare soil evaporation.          BDYLYR6A.606    
     &,GRAD_Q_ADJ(P_FIELD)      ! Humidity gradient adjustment             BDYLYR6A.607    
!                                 for non-local mixing in unstable         BDYLYR6A.608    
!                                 turbulent boundary layer.                BDYLYR6A.609    
     &,GRAD_T_ADJ(P_FIELD)      ! Temperature gradient adjustment          BDYLYR6A.610    
!                                 for non-local mixing in unstable         BDYLYR6A.611    
!                                 turbulent boundary layer.                BDYLYR6A.612    
     &,HEAT_BLEND_FACTOR(P_FIELD,N_TYPES)                                  BDYLYR6A.613    
!                                 Blending factor used as part of          BDYLYR6A.614    
!                                 tile scheme                              BDYLYR6A.615    
     &,HCONS(LAND_FIELD)        ! Soil thermal conductivity includi        BDYLYR6A.616    
!                                 the effects of water and ice (W/m        BDYLYR6A.617    
     &,QW(P_FIELD,BL_LEVELS)    ! Total water content, but                 BDYLYR6A.618    
!                                 replaced by specific humidity            BDYLYR6A.619    
!                                 in LS_CLD.                               BDYLYR6A.620    
     &,P(P_FIELD,BL_LEVELS)     ! P(*,K) is pressure at full level k.      BDYLYR6A.621    
     &,P_HALF(P_FIELD,BL_LEVELS)! P_HALF(*,K) is pressure at half          BDYLYR6A.622    
!                               ! level k-1/2.                             BDYLYR6A.623    
     &,Z_FULL(P_FIELD,BL_LEVELS)! Z_FULL(*,K) is height of full level k.   BDYLYR6A.624    
     &,Z_HALF(P_FIELD,BL_LEVELS)! Z_HALF(*,K) is height of half level      BDYLYR6A.625    
!                               ! k-1/2.                                   BDYLYR6A.626    
     &,Z_UV(P_FIELD,BL_LEVELS)  ! Z_UV(*,K) is height of half level        BDYLYR6A.627    
!                               ! k-1/2.                                   BDYLYR6A.628    
     &,Z_TQ(P_FIELD,BL_LEVELS)  ! Z_TQ(*,K) is height of half level        BDYLYR6A.629    
!                               ! k+1/2.                                   BDYLYR6A.630    
     &,RDZ(P_FIELD,BL_LEVELS)   ! RDZ(,1) is the reciprocal of the         BDYLYR6A.631    
!                                 height of level 1, i.e. of the           BDYLYR6A.632    
!                                 middle of layer 1.  For K > 1,           BDYLYR6A.633    
!                                 RDZ(,K) is the reciprocal                BDYLYR6A.634    
!                                 of the vertical distance                 BDYLYR6A.635    
!                                 from level K-1 to level K.               BDYLYR6A.636    
     &,RDZUV(U_FIELD,BL_LEVELS) !  RDZ (K > 1) on UV-grid.                 BDYLYR6A.637    
!                                  Comments as per RHOKM (RDZUV).          BDYLYR6A.638    
     &,RESFS(P_FIELD,N_TYPES)   ! Combined soil, stomatal                  BDYLYR6A.639    
!                                 and aerodynamicresistance                BDYLYR6A.640    
!                                 factor = PSIS/(1+RS/RA) for              BDYLYR6A.641    
!                                 fraction (1-FRACA)                       BDYLYR6A.642    
     &,RESFT_TILE(P_FIELD,N_TYPES)                                         BDYLYR6A.643    
!                                 Total resistance factor for tile         BDYLYR6A.644    
!                                 FRACA+(1-FRACA)*RESFS.                   BDYLYR6A.645    
     &,RESFT(P_FIELD)           ! Mean total resistance factor             BDYLYR6A.646    
!                                 FRACA+(1-FRACA)*RESFS.                   BDYLYR6A.647    
     &,RHO_FULL(P_FIELD,BL_LEVELS)                                         BDYLYR6A.648    
!                               ! RHO_FULL(*,K) is the density at full     BDYLYR6A.649    
!                               ! model level k.                           BDYLYR6A.650    
     &,RHO_HALF(P_FIELD,BL_LEVELS)                                         BDYLYR6A.651    
!                               ! RHO_HALF(*,K) is the density at half     BDYLYR6A.652    
!                               ! level k-1/2.                             BDYLYR6A.653    
     &,RHO_UV(P_FIELD,BL_LEVELS)                                           BDYLYR6A.654    
!                               ! RHO_UV(*,K) is the density at half       BDYLYR6A.655    
!                               ! level k-1/2.                             BDYLYR6A.656    
     &,RHO_TQ(P_FIELD,BL_LEVELS)                                           BDYLYR6A.657    
!                               ! RHO_TQ(*,K) is the density at half       BDYLYR6A.658    
!                               ! level k+1/2.                             BDYLYR6A.659    
     &,RHOKE(P_FIELD,N_TYPES)   ! Surface exchange coefficient for FQW     BDYLYR6A.660    
     &,RHOKH_TILE(P_FIELD,N_TYPES)                                         BDYLYR6A.661    
!                                 Tile surface exchange coefficients       BDYLYR6A.662    
!                                 for heat                                 BDYLYR6A.663    
     &,RHOKHZ(P_FIELD,2:BL_LEVELS)                                         BDYLYR6A.664    
!                               ! Non-local turbulent mixing               BDYLYR6A.665    
!                                 coefficient for heat and moisture.       BDYLYR6A.666    
     &,RHOKH_TOP(P_FIELD,2:BL_LEVELS)                                      ARN0F405.203    
!                               ! Non-local turbulent mixing coefficient   ARN0F405.204    
!                               ! for top-down mixing of heat and          ARN0F405.205    
!                               ! moisture.                                ARN0F405.206    
     &,RHOKM(P_FIELD,BL_LEVELS) ! Turbulent mixing coefficient for         BDYLYR6A.667    
!                                 momentum on P-grid.                      BDYLYR6A.668    
     &,RHOKMZ(P_FIELD,2:BL_LEVELS)                                         BDYLYR6A.669    
!                               ! Non-local turbulent mixing               BDYLYR6A.670    
!                                 coefficient for momentum.                BDYLYR6A.671    
     &,RHOKM_TOP(P_FIELD,2:BL_LEVELS)                                      ARN0F405.207    
!                               ! Non-local turbulent mixing coefficient   ARN0F405.208    
!                               ! for top-down mixing of momentum.         ARN0F405.209    
     &,RHOKPM(P_FIELD)          ! Surface exchange coefficient.            BDYLYR6A.672    
     &,RHOKPM_POT(P_FIELD)      ! WORK Surface exchange coeff. for         ANG1F405.82     
!                                 potential evaporation.                   ANG1F405.83     
     &,RHOKPM_POT_TILE(P_FIELD,N_TYPES)                                    ANG1F405.84     
                                ! WORK Tile surface exchange coeff.        ANG1F405.85     
!                                 for potential evaporaiotn.               ANG1F405.86     
     &,RHOKPM_TILE(P_FIELD,N_TYPES)                                        BDYLYR6A.673    
!                                 Surface exchange coefficient.            BDYLYR6A.674    
     &,SMC(LAND_FIELD,N_TYPES)  ! Soil moisture content in root depth      BDYLYR6A.675    
!                                  (kg/m2).                                BDYLYR6A.676    
     &,SURF_HT_FLUX(P_FIELD,N_TYPES)                                       BDYLYR6A.677    
!                                 Net downward heat flux at surface        BDYLYR6A.678    
!                                 over land or sea-ice fraction of         BDYLYR6A.679    
!                                 gridbox (W/m2).                          BDYLYR6A.680    
     &,TL(P_FIELD,BL_LEVELS)    ! Ice/liquid water temperature,            BDYLYR6A.681    
!                                 but replaced by T in LS_CLD.             BDYLYR6A.682    
     &,TV(P_FIELD,BL_LEVELS)    ! Virtual temp                             BDYLYR6A.683    
     &,TV1_SD(P_FIELD)          ! Standard deviation of turbulent          BDYLYR6A.684    
!                               ! fluctuations of surface layer            BDYLYR6A.685    
!                               ! virtual temperature (K).                 BDYLYR6A.686    
     &,U_P(P_FIELD,BL_LEVELS)   ! U on P-grid.                             BDYLYR6A.687    
     &,U_0_P(P_FIELD)           ! U_0 on P-grid.                           BDYLYR6A.688    
     &,U_S(P_FIELD)             ! Surface friction velocity (m/s)          BDYLYR6A.689    
     &,V_P(P_FIELD,BL_LEVELS)   ! V on P-grid.                             BDYLYR6A.690    
     &,V_0_P(P_FIELD)           ! V_0 on P-grid.                           BDYLYR6A.691    
     &,V_ROOT(LAND_FIELD,N_TYPES)! Volumetric soil moisture                BDYLYR6A.692    
!                                  concentration in the rootzone           BDYLYR6A.693    
!                                  (m3 H2O/m3 soil).                       BDYLYR6A.694    
     &,V_SOIL(LAND_FIELD)       ! Volumetric soil moisture                 BDYLYR6A.695    
!                                 concentration in the top                 BDYLYR6A.696    
!                                 soil layer (m3 H2O/m3 soil).             BDYLYR6A.697    
     &,WIND_BLEND_FACTOR(P_FIELD,N_TYPES)                                  BDYLYR6A.698    
!                                 Blending factor used as part of          BDYLYR6A.699    
!                                 tile scheme                              BDYLYR6A.700    
     &,WT_EXT(LAND_FIELD,SM_LEVELS)                                        BDYLYR6A.701    
!                                 Fraction of transpiration which is       BDYLYR6A.702    
!                                 extracted from each soil layer.          BDYLYR6A.703    
     &,ZLB(P_FIELD,0:BL_LEVELS) ! ZLB(,K) is the height of the             BDYLYR6A.704    
!                                 upper boundary of layer K                BDYLYR6A.705    
!                                 ( = 0.0 for "K=0").                      BDYLYR6A.706    
       REAL                                                                BDYLYR6A.707    
     & Z0H(P_FIELD,N_TYPES)     ! Roughness length for heat and            BDYLYR6A.708    
!                                 moisture.                                BDYLYR6A.709    
     &,Z0M(P_FIELD,N_TYPES)     ! Roughness length for momentum.           BDYLYR6A.710    
     &,Z1(P_FIELD)              ! Height of lowest level (i.e.             BDYLYR6A.711    
!                                 height of middle of lowest               BDYLYR6A.712    
!                                 layer).                                  BDYLYR6A.713    
     &,H_BLEND_OROG(P_FIELD)    ! Blending height used as part of          BDYLYR6A.714    
!                                 effective roughness scheme               BDYLYR6A.715    
     &,H_BLEND(P_FIELD)         ! Blending height for tiles                BDYLYR6A.716    
     &,Z0M_EFF_GB(P_FIELD)      ! Effective grid-box roughness             BDYLYR6A.717    
!                                 length for momentum                      BDYLYR6A.718    
     &,Z0M_EFF(P_FIELD,N_TYPES) ! Effective tile roughness length          BDYLYR6A.719    
!                                 for momentum                             BDYLYR6A.720    
     &,Z_LCL(P_FIELD)           ! Height of lifting condensation level.    ARN0F405.210    
     &,CDR10M(P_FIELD)          ! Ratio of CD's reqd for calculation       BDYLYR6A.721    
!                                 of 10 m wind. On P-grid                  BDYLYR6A.722    
     &,CDR10M_UV(U_FIELD)       ! Ratio of CD's reqd for calculation       BDYLYR6A.723    
!                                 of 10 m wind. On UV-grid; comments as    BDYLYR6A.724    
!                                 per RHOKM.                               BDYLYR6A.725    
     &,CER1P5M(P_FIELD)         ! Ratio of coefficients reqd for           BDYLYR6A.726    
!                                 calculation of 1.5 m Q.                  BDYLYR6A.727    
     &,CHR1P5M(P_FIELD)         ! Ratio of coefficients reqd for           BDYLYR6A.728    
!                                 calculation of 1.5 m T.                  BDYLYR6A.729    
!                                                                          APA1F405.354    
!   Variables for Vegetation Thermal Canopy                                APA1F405.355    
!                                                                          APA1F405.356    
      REAL                                                                 APA1F405.357    
     + CANCAP(P_FIELD,N_TYPES)    ! WORK Volumetric heat capacity of       APA1F405.358    
!                                 !      vegetation canopy (J/Kg/m3).      APA1F405.359    
     +,RADNET_C(P_FIELD,N_TYPES)  ! WORK Adjusted net radiation for        APA1F405.360    
!                                 !      vegetation canopy over land       APA1F405.361    
!                                 !      (W/m2).                           APA1F405.362    
                                                                           BDYLYR6A.730    
      INTEGER                                                              BDYLYR6A.731    
     & F_TYPE(LAND_FIELD,N_TYPES)! Plant functional type:                  BDYLYR6A.732    
                                 !       1 - Broadleaf Tree                BDYLYR6A.733    
                                 !       2 - Needleleaf Tree               BDYLYR6A.734    
                                 !       3 - C3 Grass                      BDYLYR6A.735    
                                 !       4 - C4 Grass                      BDYLYR6A.736    
      INTEGER                                                              BDYLYR6A.737    
     & NTML(P_FIELD)            ! Number of model levels in the            BDYLYR6A.738    
!                                 turbulently mixed layer.                 BDYLYR6A.739    
     &,NTDSC(P_FIELD)           ! Top level for turbulent mixing in        ARN0F405.211    
!                               ! cloud layer.                             ARN0F405.212    
      LOGICAL                                                              ARN0F405.213    
     & CUMULUS(P_FIELD)         ! Logical switch for cumulus in the b.l.   ARN0F405.214    
     &,UNSTABLE(P_FIELD)        ! Logical switch for unstable              ARN0F405.215    
!                                 surface layer.                           ARN0F405.216    
     &,DSC(P_FIELD)             ! Flag set if decoupled stratocumulus      ARN0F405.217    
!                               ! layer found.                             ARN0F405.218    
                                                                           BDYLYR6A.740    
!  Local scalars :-                                                        BDYLYR6A.741    
                                                                           BDYLYR6A.742    
      REAL                                                                 BDYLYR6A.743    
     & WK         ! LOCAL 0.5 * DZL(I,K) * RDZ(I,K)                        BDYLYR6A.744    
     &,WKM1       ! LOCAL 0.5 * DZL(I,K-1) * RDZ(I,K)                      BDYLYR6A.745    
                                                                           BDYLYR6A.746    
      INTEGER                                                              BDYLYR6A.747    
     & I,J,L      ! LOCAL Loop counter (horizontal field index).           BDYLYR6A.748    
     &,ITILE      ! LOCAL Loopy counter (tile index).                      BDYLYR6A.749    
     &,N          ! LOCAL Loop counter (soil levels)                       BDYLYR6A.750    
     &,K          ! LOCAL Loop counter (vertical level index).             BDYLYR6A.751    
     &,N_P_ROWS   ! LOCAL No of P-rows being processed.                    BDYLYR6A.752    
     &,N_U_ROWS   ! LOCAL No of UV-rows being processed.                   BDYLYR6A.753    
     &,P_POINTS   ! LOCAL No of P-points being processed.                  BDYLYR6A.754    
     &,P1         ! LOCAL First P-point to be processed.                   BDYLYR6A.755    
     &,LAND1      ! LOCAL First land-point to be processed.                BDYLYR6A.756    
!                         1 <= LAND1 <= LAND_FIELD                         BDYLYR6A.757    
     &,LAND_PTS   ! LOCAL No of land points being processed.               BDYLYR6A.758    
     &,U_POINTS   ! LOCAL No of UV-points being processed.                 BDYLYR6A.759    
     &,U1         ! LOCAL First UV-point to be processed.                  BDYLYR6A.760    
                                                                           BDYLYR6A.761    
      IF (LTIMER) THEN                                                     BDYLYR6A.762    
        CALL TIMER('BDYLAYR ',3)                                           BDYLYR6A.763    
      ENDIF                                                                BDYLYR6A.764    
      ERROR = 0                                                            BDYLYR6A.765    
C-----------------------------------------------------------------------   APA1F405.363    
C Initialise RADNET_C to be the same as RADNET over all points             APA1F405.364    
C-----------------------------------------------------------------------   APA1F405.365    
      DO ITILE=1,N_TYPES                                                   APA1F405.366    
        DO I=1,P_FIELD                                                     APA1F405.367    
          RADNET_C(I,ITILE) = RADNET(I)                                    APA1F405.368    
        ENDDO                                                              APA1F405.369    
      ENDDO                                                                APA1F405.370    
                                                                           BDYLYR6A.766    
*IF -DEF,SCMA                                                              AJC1F405.374    
!-----------------------------------------------------------------------   BDYLYR6A.768    
!! 0. Verify grid/subset definitions.  Arakawa 'B' grid with P-rows at     BDYLYR6A.769    
!!    extremes is assumed.  Extreme-most P-rows are ignored; extreme-      BDYLYR6A.770    
!!    most UV-rows are used only for interpolation and are not updated.    BDYLYR6A.771    
!-----------------------------------------------------------------------   BDYLYR6A.772    
                                                                           BDYLYR6A.773    
      IF ( BL_LEVELS.LT.1 .OR. ST_LEVELS.LT.1 .OR. SM_LEVELS.LT.1          BDYLYR6A.774    
     & .OR. P_ROWS.LT.3 ) THEN                                             BDYLYR6A.775    
        ERROR = 1                                                          BDYLYR6A.776    
        GOTO999                                                            BDYLYR6A.777    
*IF -DEF,MPP                                                               BDYLYR6A.778    
      ELSEIF ( U_FIELD .NE. (P_ROWS-1)*ROW_LENGTH ) THEN                   BDYLYR6A.779    
*ELSE                                                                      BDYLYR6A.780    
      ELSEIF ( U_FIELD .NE. P_ROWS*ROW_LENGTH ) THEN                       BDYLYR6A.781    
*ENDIF                                                                     BDYLYR6A.782    
        ERROR = 2                                                          BDYLYR6A.783    
        GOTO999                                                            BDYLYR6A.784    
      ELSEIF ( P_FIELD .NE. P_ROWS*ROW_LENGTH ) THEN                       BDYLYR6A.785    
        ERROR = 3                                                          BDYLYR6A.786    
        GOTO999                                                            BDYLYR6A.787    
      ELSEIF ( FIRST_ROW.LE.1 .OR. FIRST_ROW.GE.P_ROWS ) THEN              BDYLYR6A.788    
        ERROR = 4                                                          BDYLYR6A.789    
        GOTO999                                                            BDYLYR6A.790    
      ELSEIF ( N_ROWS.LE.0 ) THEN                                          BDYLYR6A.791    
        ERROR = 5                                                          BDYLYR6A.792    
        GOTO999                                                            BDYLYR6A.793    
*IF -DEF,MPP                                                               BDYLYR6A.794    
      ELSEIF ( (FIRST_ROW+N_ROWS) .GT. P_ROWS ) THEN                       BDYLYR6A.795    
*ELSE                                                                      BDYLYR6A.796    
      ELSEIF ( (FIRST_ROW+N_ROWS-1) .GT. P_ROWS ) THEN                     BDYLYR6A.797    
*ENDIF                                                                     BDYLYR6A.798    
        ERROR = 6                                                          BDYLYR6A.799    
        GOTO999                                                            BDYLYR6A.800    
      ELSEIF ( LAND_FIELD.GT.P_FIELD ) THEN                                BDYLYR6A.801    
        ERROR = 7                                                          BDYLYR6A.802    
        GOTO999                                                            BDYLYR6A.803    
      ENDIF                                                                BDYLYR6A.804    
                                                                           BDYLYR6A.805    
!-----------------------------------------------------------------------   BDYLYR6A.806    
!!    Set pointers, etc.                                                   BDYLYR6A.807    
!-----------------------------------------------------------------------   BDYLYR6A.808    
                                                                           BDYLYR6A.809    
      N_P_ROWS = N_ROWS                                                    BDYLYR6A.810    
      N_U_ROWS = N_ROWS + 1                                                BDYLYR6A.811    
                                                                           BDYLYR6A.812    
      P_POINTS = N_P_ROWS * ROW_LENGTH                                     BDYLYR6A.813    
      U_POINTS = N_U_ROWS * ROW_LENGTH                                     BDYLYR6A.814    
                                                                           BDYLYR6A.815    
      P1 = 1 + (FIRST_ROW-1)*ROW_LENGTH                                    BDYLYR6A.816    
      U1 = 1 + (FIRST_ROW-2)*ROW_LENGTH                                    BDYLYR6A.817    
                                                                           BDYLYR6A.818    
!-----------------------------------------------------------------------   BDYLYR6A.819    
!!    Set compressed land point pointers.                                  BDYLYR6A.820    
!-----------------------------------------------------------------------   BDYLYR6A.821    
                                                                           BDYLYR6A.822    
      LAND1=0                                                              BDYLYR6A.823    
      DO I=1,P1+P_POINTS-1                                                 BDYLYR6A.824    
        IF (LAND_INDEX(I).GE.P1) THEN                                      BDYLYR6A.825    
          LAND1 = I                                                        BDYLYR6A.826    
          GOTO2                                                            BDYLYR6A.827    
        ENDIF                                                              BDYLYR6A.828    
      ENDDO                                                                BDYLYR6A.829    
   2  CONTINUE                                                             BDYLYR6A.830    
                                                                           BDYLYR6A.831    
      LAND_PTS=0                                                           BDYLYR6A.832    
      DO I=P1,P1+P_POINTS-1                                                BDYLYR6A.833    
        IF (LAND_MASK(I)) LAND_PTS = LAND_PTS + 1                          BDYLYR6A.834    
      ENDDO                                                                BDYLYR6A.835    
*ELSE                                                                      BDYLYR6A.836    
C                                                                          AJC1F405.375    
C---------------------------------------------------------------------     AJC1F405.376    
CL 0. Check grid definition arguments.                                     AJC1F405.377    
C---------------------------------------------------------------------     AJC1F405.378    
C                                                                          AJC1F405.379    
      IF ( BL_LEVELS.LT.1                                                  AJC1F405.380    
     & .OR. ST_LEVELS.LT.1 .OR.SM_LEVELS.LT.1 ) THEN                       AJC1F405.381    
        ERROR = 1                                                          AJC1F405.382    
        GOTO999                                                            AJC1F405.383    
      ELSEIF ( U_FIELD .NE. P_ROWS*ROW_LENGTH ) THEN                       AJC1F405.384    
        ERROR = 2                                                          AJC1F405.385    
        GOTO999                                                            AJC1F405.386    
      ELSEIF ( P_FIELD .NE. P_ROWS*ROW_LENGTH ) THEN                       AJC1F405.387    
        ERROR = 3                                                          AJC1F405.388    
        GOTO999                                                            AJC1F405.389    
      ELSEIF ( N_ROWS.LE.0 ) THEN                                          AJC1F405.390    
        ERROR = 5                                                          AJC1F405.391    
        GOTO999                                                            AJC1F405.392    
      ELSEIF ( LAND_FIELD.GT.P_FIELD ) THEN                                AJC1F405.393    
        ERROR = 7                                                          AJC1F405.394    
        GOTO999                                                            AJC1F405.395    
      ENDIF                                                                AJC1F405.396    
C                                                                          AJC1F405.397    
C---------------------------------------------------------------------     AJC1F405.398    
CL    Set pointers, etc.                                                   AJC1F405.399    
C---------------------------------------------------------------------     AJC1F405.400    
C                                                                          AJC1F405.401    
      N_P_ROWS=N_ROWS                                                      AJC1F405.402    
      N_U_ROWS=N_ROWS                                                      AJC1F405.403    
                                                                           AJC1F405.404    
      P_POINTS=N_P_ROWS*ROW_LENGTH                                         AJC1F405.405    
      U_POINTS=N_U_ROWS*ROW_LENGTH                                         AJC1F405.406    
                                                                           AJC1F405.407    
      P1 = 1                                                               AJC1F405.408    
      U1 = 1                                                               AJC1F405.409    
C                                                                          AJC1F405.410    
C---------------------------------------------------------------------     AJC1F405.411    
CL    Set compressed land point pointers.                                  AJC1F405.412    
C---------------------------------------------------------------------     AJC1F405.413    
C                                                                          AJC1F405.414    
      LAND1=0                                                              AJC1F405.415    
      DO 1 I=1,P1+P_POINTS-1                                               AJC1F405.416    
        IF (LAND_INDEX(I).GE.P1) THEN                                      AJC1F405.417    
          LAND1 = I                                                        AJC1F405.418    
          GOTO2                                                            AJC1F405.419    
        ENDIF                                                              AJC1F405.420    
   1  CONTINUE                                                             AJC1F405.421    
   2  CONTINUE                                                             AJC1F405.422    
      LAND_PTS=0                                                           AJC1F405.423    
      DO 3 I=P1,P1+P_POINTS-1                                              AJC1F405.424    
        IF (LAND_MASK(I)) LAND_PTS = LAND_PTS + 1                          AJC1F405.425    
   3  CONTINUE                                                             AJC1F405.426    
*ENDIF                                                                     BDYLYR6A.866    
                                                                           BDYLYR6A.867    
                                                                           BDYLYR6A.868    
!-----------------------------------------------------------------------   BDYLYR6A.869    
!! 1.  Perform calculations in what the documentation describes as         BDYLYR6A.870    
!!     subroutine Z_DZ.  In fact, a separate subroutine isn't used.        BDYLYR6A.871    
!-----------------------------------------------------------------------   BDYLYR6A.872    
                                                                           BDYLYR6A.873    
!-----------------------------------------------------------------------   BDYLYR6A.874    
!! 1.1 Initialise ZLB(,0) (to zero, of course, this being the height       BDYLYR6A.875    
!!     of the surface above the surface).                                  BDYLYR6A.876    
!-----------------------------------------------------------------------   BDYLYR6A.877    
                                                                           BDYLYR6A.878    
      DO I=P1,P1+P_POINTS-1                                                BDYLYR6A.879    
        ZLB(I,0)=0.0                                                       BDYLYR6A.880    
      ENDDO                                                                BDYLYR6A.881    
                                                                           BDYLYR6A.882    
!-----------------------------------------------------------------------   BDYLYR6A.883    
!! 1.2 Calculate layer depths and heights, and construct wind fields on    BDYLYR6A.884    
!!     P-grid.  This involves calling subroutines Z and UV_TO_P.           BDYLYR6A.885    
!!     Virtual temperature is also calculated, as a by-product.            BDYLYR6A.886    
!-----------------------------------------------------------------------   BDYLYR6A.887    
                                                                           BDYLYR6A.888    
!  NB RDZ  TEMPORARILY used to return DELTA_Z_LOWER, the lower half        BDYLYR6A.889    
!     layer thickness                                                      BDYLYR6A.890    
                                                                           BDYLYR6A.891    
      DO K=1,BL_LEVELS                                                     BDYLYR6A.892    
        CALL Z(P_POINTS,EXNER(P1,K),EXNER(P1,K+1),PSTAR(P1),               BDYLYR6A.893    
     &    AKH(K),BKH(K),Q(P1,K),QCF(P1,K),                                 BDYLYR6A.894    
     &    QCL(P1,K),T(P1,K),ZLB(P1,K-1),TV(P1,K),                          BDYLYR6A.895    
     &    ZLB(P1,K),DZL(P1,K),RDZ(P1,K),LTIMER)                            BDYLYR6A.896    
      ENDDO                                                                BDYLYR6A.897    
      DO K=1,BL_LEVELS                                                     BDYLYR6A.898    
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.899    
          Z_FULL(I,K) = ZLB(I,K) - 0.5 * DZL(I,K)                          BDYLYR6A.900    
          Z_HALF(I,K) = ZLB(I,K-1)                                         BDYLYR6A.901    
          Z_UV(I,K) = ZLB(I,K-1)                                           BDYLYR6A.902    
          Z_TQ(I,K) = ZLB(I,K)                                             BDYLYR6A.903    
       ENDDO                                                               BDYLYR6A.904    
      ENDDO                                                                BDYLYR6A.905    
      DO K=1,BL_LEVELS                                                     BDYLYR6A.906    
                                                                           BDYLYR6A.907    
*IF -DEF,SCMA                                                              AJC1F405.427    
        CALL UV_TO_P(U(U1,K),U_P(P1,K),                                    BDYLYR6A.909    
     &               U_POINTS,P_POINTS,ROW_LENGTH,N_U_ROWS)                BDYLYR6A.910    
        CALL UV_TO_P(V(U1,K),V_P(P1,K),                                    BDYLYR6A.911    
     &               U_POINTS,P_POINTS,ROW_LENGTH,N_U_ROWS)                BDYLYR6A.912    
                                                                           BDYLYR6A.913    
                                                                           BDYLYR6A.914    
! du_nt 'borrowed to store dzl on uv grid                                  BDYLYR6A.915    
        CALL P_TO_UV (DZL(P1,K),DU_NT(U1+ROW_LENGTH,K),                    BDYLYR6A.916    
     &     P_POINTS,U_POINTS,ROW_LENGTH,N_P_ROWS)                          BDYLYR6A.917    
                                                                           BDYLYR6A.918    
*ELSE                                                                      BDYLYR6A.919    
      DO I = P1, P1-1+P_POINTS                                             AJC1F405.428    
        U_P(i,K) = U(i,K)                                                  AJC1F405.429    
        V_P(i,K) = V(i,K)                                                  AJC1F405.430    
      ENDDO                                                                AJC1F405.431    
*ENDIF                                                                     BDYLYR6A.922    
      ENDDO                                                                BDYLYR6A.923    
                                                                           BDYLYR6A.924    
*IF -DEF,SCMA                                                              AJC1F405.432    
        CALL UV_TO_P(U_0(U1),U_0_P(P1),                                    BDYLYR6A.926    
     &               U_POINTS,P_POINTS,ROW_LENGTH,N_U_ROWS)                BDYLYR6A.927    
        CALL UV_TO_P(V_0(U1),V_0_P(P1),                                    BDYLYR6A.928    
     &               U_POINTS,P_POINTS,ROW_LENGTH,N_U_ROWS)                BDYLYR6A.929    
*ELSE                                                                      BDYLYR6A.930    
      DO I = P1, P1-1+P_POINTS                                             AJC1F405.433    
              U_0_P(i) = U_0(i)                                            AJC1F405.434    
              V_0_P(i) = V_0(i)                                            AJC1F405.435    
      ENDDO                                                                AJC1F405.436    
*ENDIF                                                                     BDYLYR6A.933    
                                                                           BDYLYR6A.934    
                                                                           BDYLYR6A.935    
! set pressure array.                                                      BDYLYR6A.936    
      DO K=1,BL_LEVELS                                                     BDYLYR6A.937    
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.938    
          P(I,K) = AK(K) + BK(K)*PSTAR(I)                                  BDYLYR6A.939    
          P_HALF(I,K) = AKH(K) + BKH(K)*PSTAR(I)                           BDYLYR6A.940    
                                                                           BDYLYR6A.941    
! These will be used in new dynamics scheme - currently unused             BDYLYR6A.942    
          DTL_NT(I,K)=0.0                                                  BDYLYR6A.943    
          DQW_NT(I,K)=0.0                                                  BDYLYR6A.944    
                                                                           BDYLYR6A.945    
        ENDDO                                                              BDYLYR6A.946    
                                                                           BDYLYR6A.947    
      ENDDO  ! end of loop over bl_levels                                  BDYLYR6A.948    
                                                                           BDYLYR6A.949    
      DO K=BL_LEVELS,2,-1                                                  BDYLYR6A.950    
                                                                           BDYLYR6A.951    
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.952    
          RDZ(I,K)=1.0/(RDZ(I,K)+(DZL(I,K-1)-RDZ(I,K-1)))                  BDYLYR6A.953    
          DELTAP(I,K)=DELTA_AK(K) + PSTAR(I)*DELTA_BK(K)                   BDYLYR6A.954    
                                                                           BDYLYR6A.955    
          DTRDZ(I,K) = -G * TIMESTEP/ DELTAP(I,K)                          BDYLYR6A.956    
!     &                  (DELTA_AK(K) + PSTAR(I)*DELTA_BK(K))              BDYLYR6A.957    
        ENDDO                                                              BDYLYR6A.958    
      ENDDO                                                                BDYLYR6A.959    
                                                                           BDYLYR6A.960    
      DO I=P1,P1+P_POINTS-1                                                BDYLYR6A.961    
        Z1(I)=RDZ(I,1)                                                     BDYLYR6A.962    
        RDZ(I,1)=1.0/RDZ(I,1)                                              BDYLYR6A.963    
                                                                           BDYLYR6A.964    
        DELTAP(I,1)=DELTA_AK(1) + PSTAR(I)*DELTA_BK(1)                     BDYLYR6A.965    
        DTRDZ(I,1) = -G * TIMESTEP/DELTAP(I,1)                             BDYLYR6A.966    
!     &                  (DELTA_AK(1) + PSTAR(I)*DELTA_BK(1))              BDYLYR6A.967    
      ENDDO                                                                BDYLYR6A.968    
                                                                           BDYLYR6A.969    
      DO K=1,BL_LEVELS                                                     BDYLYR6A.970    
                                                                           BDYLYR6A.971    
                                                                           BDYLYR6A.972    
! Calculate RDZUV here                                                     BDYLYR6A.973    
                                                                           BDYLYR6A.974    
        IF(K.GE.2)THEN                                                     BDYLYR6A.975    
*IF -DEF,SCMA                                                              AJC1F405.437    
                                                                           BDYLYR6A.977    
          DO I=U1+ROW_LENGTH,U1-ROW_LENGTH+U_POINTS-1                      BDYLYR6A.978    
            RDZUV(I,K) = 2.0 / ( DU_NT(I,K) + DU_NT(I,K-1) )               BDYLYR6A.979    
          ENDDO                                                            BDYLYR6A.980    
                                                                           BDYLYR6A.981    
!-----------------------------------------------------------------------   BDYLYR6A.982    
! 1.3 Set first and last rows to "missing data indicator"                  BDYLYR6A.983    
!-----------------------------------------------------------------------   BDYLYR6A.984    
                                                                           BDYLYR6A.985    
*IF DEF,MPP                                                                BDYLYR6A.986    
      IF (attop) THEN                                                      BDYLYR6A.987    
*ENDIF                                                                     BDYLYR6A.988    
        DO I=U1,U1+ROW_LENGTH-1                                            BDYLYR6A.989    
          RDZUV(I,K) = 1.0E30                                              BDYLYR6A.990    
        ENDDO                                                              BDYLYR6A.991    
*IF DEF,MPP                                                                BDYLYR6A.992    
      ENDIF                                                                BDYLYR6A.993    
                                                                           BDYLYR6A.994    
      IF (atbase) THEN                                                     BDYLYR6A.995    
*ENDIF                                                                     BDYLYR6A.996    
        DO I= U1+(N_U_ROWS-1)*ROW_LENGTH, U1 + N_U_ROWS*ROW_LENGTH-1       BDYLYR6A.997    
          RDZUV(I,K) = 1.0E30                                              BDYLYR6A.998    
        ENDDO                                                              BDYLYR6A.999    
*IF DEF,MPP                                                                BDYLYR6A.1000   
      ENDIF                                                                BDYLYR6A.1001   
*ENDIF                                                                     BDYLYR6A.1002   
                                                                           BDYLYR6A.1003   
                                                                           BDYLYR6A.1004   
*ELSE                                                                      BDYLYR6A.1005   
      DO I = P1, P1-1+P_POINTS                                             AJC1F405.438    
        RDZUV(i,K) = 2.0 / ( DZL(i,K) + DZL(i,K-1) )                       AJC1F405.439    
      ENDDO                                                                AJC1F405.440    
*ENDIF                                                                     BDYLYR6A.1007   
        ENDIF   ! K .ge. 2                                                 BDYLYR6A.1008   
                                                                           BDYLYR6A.1009   
! Calculate DTRDZ_UV here.                                                 BDYLYR6A.1010   
                                                                           BDYLYR6A.1011   
*IF -DEF,SCMA                                                              AJC1F405.441    
!        CALL P_TO_UV (DTRDZ(P1,K),DTRDZ_UV(U1+ROW_LENGTH,K),              BDYLYR6A.1013   
!     &     P_POINTS,U_POINTS,ROW_LENGTH,N_P_ROWS)                         BDYLYR6A.1014   
                                                                           BDYLYR6A.1015   
        CALL P_TO_UV (DELTAP(P1,K),DELTAP_UV(U1+ROW_LENGTH,K),             BDYLYR6A.1016   
     &     P_POINTS,U_POINTS,ROW_LENGTH,N_P_ROWS)                          BDYLYR6A.1017   
                                                                           BDYLYR6A.1018   
        DO I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                        BDYLYR6A.1019   
          DTRDZ_UV(I,K) = -G * TIMESTEP / DELTAP_UV(I,K)                   BDYLYR6A.1020   
        ENDDO                                                              BDYLYR6A.1021   
                                                                           BDYLYR6A.1022   
*ELSE                                                                      BDYLYR6A.1023   
      DO I = P1, P1-1+P_POINTS                                             AJC1F405.442    
        DTRDZ_UV(i,K) = DTRDZ(i,K)                                         AJC1F405.443    
      ENDDO                                                                AJC1F405.444    
*ENDIF                                                                     BDYLYR6A.1025   
                                                                           BDYLYR6A.1026   
      ENDDO ! loop over bl_levels                                          BDYLYR6A.1027   
                                                                           BDYLYR6A.1028   
! "borrowed" du_nt reset to zero                                           BDYLYR6A.1029   
! Non turbulent increments for new dynamics scheme (currently not used)    BDYLYR6A.1030   
        DO K=1,BL_LEVELS                                                   BDYLYR6A.1031   
          DO I=1,U_FIELD                                                   BDYLYR6A.1032   
            DU_NT(I,K) =0.0                                                BDYLYR6A.1033   
            DV_NT(I,K) =0.0                                                BDYLYR6A.1034   
          ENDDO                                                            BDYLYR6A.1035   
        ENDDO                                                              BDYLYR6A.1036   
                                                                           BDYLYR6A.1037   
                                                                           BDYLYR6A.1038   
!!----------------------------------------------------------------------   BDYLYR6A.1039   
!! 2. Diagnose the plant functional types at each location.                BDYLYR6A.1040   
!! Assume : Broadleaf Trees if rootdepth > 0.8m                            BDYLYR6A.1041   
!          C3 Grass        if rootdepth < 0.8m                             BDYLYR6A.1042   
!-----------------------------------------------------------------------   BDYLYR6A.1043   
      DO ITILE=1,N_TYPES                                                   BDYLYR6A.1044   
        DO L=1,LAND_FIELD                                                  BDYLYR6A.1045   
          IF (ROOTD_TILE(L,ITILE).GT.0.8) THEN                             BDYLYR6A.1046   
            F_TYPE(L,ITILE)=1                                              BDYLYR6A.1047   
          ELSE                                                             BDYLYR6A.1048   
            F_TYPE(L,ITILE)=3                                              BDYLYR6A.1049   
          ENDIF                                                            BDYLYR6A.1050   
        ENDDO                                                              BDYLYR6A.1051   
      ENDDO                                                                BDYLYR6A.1052   
                                                                           BDYLYR6A.1053   
!-----------------------------------------------------------------------   BDYLYR6A.1054   
! Calculate the thermal conductivity of the top soil layer.                BDYLYR6A.1055   
!-----------------------------------------------------------------------   BDYLYR6A.1056   
                                                                           BDYLYR6A.1057   
      IF(LAND_FIELD.GT.0) THEN    ! Omit if no land points                 BDYLYR6A.1058   
        CALL HEAT_CON (LAND_FIELD,HCON,STHU,STHF,SMVCST,HCONS,LTIMER)      BDYLYR6A.1059   
                                                                           BDYLYR6A.1060   
!-----------------------------------------------------------------------   BDYLYR6A.1061   
! Calculate the soil moisture in the root zone.                            BDYLYR6A.1062   
!-----------------------------------------------------------------------   BDYLYR6A.1063   
                                                                           BDYLYR6A.1064   
        DO ITILE=1,N_TYPES                                                 BDYLYR6A.1065   
          CALL SMC_ROOT (LAND_FIELD,SM_LEVELS,F_TYPE(1,ITILE),DZSOIL,      BDYLYR6A.1066   
     &                   ROOTD_TILE(1,ITILE),                              APA1F405.371    
     &                   STHU,VFRAC_TILE(1,ITILE),SMVCST,SMVCWT,           BDYLYR6A.1067   
     &                   SMC(1,ITILE),V_ROOT(1,ITILE),V_SOIL,WT_EXT,       BDYLYR6A.1068   
     &                   LTIMER)                                           BDYLYR6A.1069   
        ENDDO                                                              BDYLYR6A.1070   
                                                                           BDYLYR6A.1071   
      ENDIF                     ! End test on land points                  BDYLYR6A.1072   
                                                                           BDYLYR6A.1073   
                                                                           BDYLYR6A.1074   
!-----------------------------------------------------------------------   BDYLYR6A.1075   
!! Calculate total water content, QW and Liquid water temperature, TL      BDYLYR6A.1076   
!-----------------------------------------------------------------------   BDYLYR6A.1077   
                                                                           BDYLYR6A.1078   
      DO K=1,BL_LEVELS                                                     BDYLYR6A.1079   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1080   
          QW(I,K) = Q(I,K) + QCL(I,K) + QCF(I,K)              ! P243.10    BDYLYR6A.1081   
          TL(I,K) = T(I,K) - LCRCP*QCL(I,K) - LSRCP*QCF(I,K)  ! P243.9     BDYLYR6A.1082   
        ENDDO                                                              BDYLYR6A.1083   
      ENDDO                                                                BDYLYR6A.1084   
                                                                           BDYLYR6A.1085   
!-----------------------------------------------------------------------   BDYLYR6A.1086   
!! 3.  Calls to SICE_HTF and SOIL_HTF now after IMPL_CAL                   BDYLYR6A.1087   
!-----------------------------------------------------------------------   BDYLYR6A.1088   
                                                                           BDYLYR6A.1089   
!-----------------------------------------------------------------------   BDYLYR6A.1090   
!! 4.  Surface turbulent exchange coefficients and "explicit" fluxes       BDYLYR6A.1091   
!!     (P243a, routine SF_EXCH).                                           BDYLYR6A.1092   
!!     Wind mixing "power" and some values required for other, later,      BDYLYR6A.1093   
!!     diagnostic calculations, are also evaluated if requested.           BDYLYR6A.1094   
!-----------------------------------------------------------------------   BDYLYR6A.1095   
                                                                           BDYLYR6A.1096   
                                                                           BDYLYR6A.1097   
! Set lots of things to zero                                               BDYLYR6A.1098   
                                                                           BDYLYR6A.1099   
      DO ITILE=1,N_TYPES                                                   BDYLYR6A.1100   
        DO I=1,P_FIELD                                                     BDYLYR6A.1101   
          ETRAN(I,ITILE)=0.0                                               BDYLYR6A.1102   
          ALPHA1(I,ITILE)=0.0                                              BDYLYR6A.1103   
          FQW_TILE(I,ITILE)=0.0                                            BDYLYR6A.1104   
          FTL_TILE(I,ITILE)=0.0                                            BDYLYR6A.1105   
          FRACA(I,ITILE)=0.0                                               BDYLYR6A.1106   
          RESFS(I,ITILE)=0.0                                               BDYLYR6A.1107   
          RESFT_TILE(I,ITILE)=0.0                                          BDYLYR6A.1108   
          RHOKH_TILE(I,ITILE)=0.0                                          BDYLYR6A.1109   
          RHOKPM_TILE(I,ITILE)=0.0                                         BDYLYR6A.1110   
          Z0H(I,ITILE)=0.0                                                 BDYLYR6A.1111   
          Z0M_EFF(I,ITILE)=0.0                                             BDYLYR6A.1112   
          WIND_BLEND_FACTOR(I,ITILE)=0.0                                   BDYLYR6A.1113   
          HEAT_BLEND_FACTOR(I,ITILE)=0.0                                   BDYLYR6A.1114   
                                                                           BDYLYR6A.1115   
          IF(.NOT. LAND_MASK(I)) TILE_FRAC(I,ITILE)=0.0                    BDYLYR6A.1116   
                                                                           BDYLYR6A.1117   
          tstar_tile(i,itile)=tstar(i)  ! temporary for single tile only   BDYLYR6A.1118   
                                                                           BDYLYR6A.1119   
        ENDDO                                                              BDYLYR6A.1120   
      ENDDO                                                                BDYLYR6A.1121   
                                                                           BDYLYR6A.1122   
      DO N=1,SM_LEVELS                                                     BDYLYR6A.1123   
        DO I=LAND1,LAND1+LAND_PTS-1                                        BDYLYR6A.1124   
          EXT(I,N)=0.0                                                     BDYLYR6A.1125   
        ENDDO                                                              BDYLYR6A.1126   
      ENDDO                                                                BDYLYR6A.1127   
                                                                           BDYLYR6A.1128   
      DO I=P1,P1+P_POINTS-1                                                BDYLYR6A.1129   
!         IF(.NOT. LAND_MASK(I)) TILE_FRAC(I,1)=1.0                        BDYLYR6A.1130   
         TILE_FRAC(I,1)=1.0  ! hard wired for single tile only             BDYLYR6A.1131   
                                                                           BDYLYR6A.1132   
         SURF_HT_FLUX_GB(I)=0.0                                            BDYLYR6A.1133   
         ES_GB(I)=0.0                                                      BDYLYR6A.1134   
                                                                           BDYLYR6A.1135   
      ENDDO                                                                BDYLYR6A.1136   
                                                                           BDYLYR6A.1137   
                                                                           BDYLYR6A.1138   
                                                                           BDYLYR6A.1139   
      CALL SF_EXCH (                                                       BDYLYR6A.1140   
     & P_POINTS,LAND_PTS,P_FIELD,LAND_FIELD,N_TYPES,                       BDYLYR6A.1141   
     & P1,LAND1,                                                           BDYLYR6A.1142   
     & LAND_INDEX,GATHER,                                                  BDYLYR6A.1144   
     & P(1,1),TILE_FRAC,                                                   BDYLYR6A.1146   
     & CANOPY,CATCH_TILE,CO2_MMR,                                          BDYLYR6A.1147   
     & SM_LEVELS,DZSOIL,HCONS,F_TYPE,                                      BDYLYR6A.1148   
     & HT_TILE,LAI_TILE,PHOTOSYNTH_ACT_RAD,GPP,NPP,RESP_P,                 BDYLYR6A.1149   
     & ICE_FRACT,LAND_MASK,LYING_SNOW,PSTAR,Q(1,1),                        BDYLYR6A.1150   
     & QCF(1,1),QCL(1,1),RADNET_C,GC,RESIST_TILE,                          APA1F405.372    
     & ROOTD_TILE,SMC,SMVCCL,SMVCWT,                                       BDYLYR6A.1152   
     & T(1,1),TIMESTEP,TI,T_SOIL(1,1),TSTAR,                               BDYLYR6A.1153   
     & TSTAR_TILE,U_P(1,1),V_P(1,1),U_0_P,V_0_P,                           BDYLYR6A.1154   
     & V_ROOT,V_SOIL,VFRAC_TILE,                                           BDYLYR6A.1155   
     & Z0V,Z0V_TILE,SIL_OROG_LAND,HO2R2_OROG,ZH,                           BDYLYR6A.1156   
     & Z1,Z1,CANCAP,Z0MSEA,ALPHA1_GB,ALPHA1,ASHTF,                         APA1F405.373    
     & BQ(1,1),BT(1,1),CD,CH,                                              BDYLYR6A.1158   
     & FQW_TILE,FQW(1,1),FTL_TILE,FTL(1,1),                                BDYLYR6A.1159   
     & EPOT_TILE,EPOT,FSMC_TILE,FSMC,                                      ANG1F405.87     
     & E_SEA,H_SEA,FRACA,RESFS,F_SE,                                       BDYLYR6A.1160   
     & RESFT_TILE,RESFT,RHOKE,RHOKH_TILE,                                  BDYLYR6A.1161   
     & RHOKH,RHOKM,RHOKPM_TILE,RHOKPM,RHOKPM_POT_TILE,RHOKPM_POT,          ANG1F405.88     
     & RIB_GB,RIB,TL(1,1),VSHR,Z0H,Z0M,Z0M_EFF,Z0M_EFF_GB,                 BDYLYR6A.1163   
     & H_BLEND_OROG,H_BLEND,T1_SD,Q1_SD,TV1_SD,U_S,FB_SURF,                BDYLYR6A.1164   
     & RHO_CD_MODV1,WIND_BLEND_FACTOR,HEAT_BLEND_FACTOR,                   BDYLYR6A.1165   
     & CDR10M,CHR1P5M,CER1P5M,FME,                                         BDYLYR6A.1166   
     & SU10,SV10,SQ1P5,ST1P5,SFME,                                         BDYLYR6A.1167   
     & RHO_ARESIST,ARESIST,RESIST_B,NRML,                                  BDYLYR6A.1168   
     & L_Z0_OROG,L_RMBL,LTIMER                                             BDYLYR6A.1169   
     &)                                                                    BDYLYR6A.1170   
                                                                           BDYLYR6A.1171   
                                                                           BDYLYR6A.1172   
!-----------------------------------------------------------------------   BDYLYR6A.1173   
!! 5.  Turbulent exchange coefficients and "explicit" fluxes between       BDYLYR6A.1174   
!!     model layers in the boundary layer (P243b, routine KMKH).           BDYLYR6A.1175   
!-----------------------------------------------------------------------   BDYLYR6A.1176   
                                                                           BDYLYR6A.1177   
!-----------------------------------------------------------------------   BDYLYR6A.1178   
!! 5.1  Calculate bouyancy parameters BT and BQ.                           BDYLYR6A.1179   
!-----------------------------------------------------------------------   BDYLYR6A.1180   
                                                                           BDYLYR6A.1181   
      CALL BOUY_TQ (                                                       BDYLYR6A.1182   
     & P_FIELD,P1                                                          BDYLYR6A.1183   
     &,P_POINTS,BL_LEVELS                                                  BDYLYR6A.1184   
     &,P,T,Q,QCF,QCL                                                       BDYLYR6A.1185   
     &,BT,BQ,BT_CLD,BQ_CLD,A_QS,A_DQSDT,DQSDT                              BDYLYR6A.1186   
     &,LTIMER                                                              BDYLYR6A.1187   
     &  )                                                                  BDYLYR6A.1188   
                                                                           BDYLYR6A.1189   
                                                                           BDYLYR6A.1190   
!-----------------------------------------------------------------------   BDYLYR6A.1191   
!! 5.2  Interpolate BT and BQ to half levels.                              BDYLYR6A.1192   
!-----------------------------------------------------------------------   BDYLYR6A.1193   
                                                                           BDYLYR6A.1194   
      CALL BTQ_INT (                                                       BDYLYR6A.1195   
     & P_FIELD,P1,P_POINTS,BL_LEVELS                                       BDYLYR6A.1196   
     &,DZL,RDZ,BQ,BT,BQ_CLD,BT_CLD,A_QS,A_DQSDT                            BDYLYR6A.1197   
     &,BQM,BTM,BQM_CLD,BTM_CLD,A_QSM,A_DQSDTM                              BDYLYR6A.1198   
     &,LTIMER                                                              BDYLYR6A.1199   
     &  )                                                                  BDYLYR6A.1200   
                                                                           BDYLYR6A.1201   
                                                                           BDYLYR6A.1202   
!-----------------------------------------------------------------------   BDYLYR6A.1203   
!! 5.3  Calculate the diffusion coefficients Km and Kh.                    BDYLYR6A.1204   
!-----------------------------------------------------------------------   BDYLYR6A.1205   
                                                                           BDYLYR6A.1206   
      DO K=1,BL_LEVELS                                                     BDYLYR6A.1207   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1208   
          RHO_FULL(I,K) =                                                  BDYLYR6A.1209   
     &     ( AK(K) + BK(K)*PSTAR(I) )      ! Pressure at K                 BDYLYR6A.1210   
     &     /                               ! divided by ...                BDYLYR6A.1211   
     &     ( R * TV(I,K) )                 ! R times TV at K               BDYLYR6A.1212   
        ENDDO                                                              BDYLYR6A.1213   
      ENDDO                                                                BDYLYR6A.1214   
      DO K=2,BL_LEVELS                                                     BDYLYR6A.1215   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1216   
          WKM1 = 0.5 * DZL(I,K-1) * RDZ(I,K)                               BDYLYR6A.1217   
          WK = 0.5 * DZL(I,K) * RDZ(I,K)                                   BDYLYR6A.1218   
          RHO_HALF(I,K) = WK*RHO_FULL(I,K-1) + WKM1*RHO_FULL(I,K)          BDYLYR6A.1219   
        ENDDO                                                              BDYLYR6A.1220   
      ENDDO                                                                BDYLYR6A.1221   
      DO K=2,BL_LEVELS                                                     BDYLYR6A.1222   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1223   
          RHO_UV(I,K) = RHO_HALF(I,K)                                      BDYLYR6A.1224   
        ENDDO                                                              BDYLYR6A.1225   
      ENDDO                                                                BDYLYR6A.1226   
      DO K=1,BL_LEVELS-1                                                   BDYLYR6A.1227   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1228   
          RHO_TQ(I,K) = RHO_HALF(I,K+1)                                    BDYLYR6A.1229   
        ENDDO                                                              BDYLYR6A.1230   
      ENDDO                                                                BDYLYR6A.1231   
      DO I=P1,P1+P_POINTS-1                                                BDYLYR6A.1232   
        RHO_HALF(I,1) = RHO_FULL(I,1)                                      BDYLYR6A.1233   
        RHO_UV(I,1) = RHO_FULL(I,1)                                        BDYLYR6A.1234   
        RHO_TQ(I,BL_LEVELS) = RHO_FULL(I,BL_LEVELS)                        BDYLYR6A.1235   
      ENDDO                                                                BDYLYR6A.1236   
                                                                           BDYLYR6A.1237   
      CALL KMKHZ (                                                         BDYLYR6A.1238   
     & P_FIELD,P1,P_POINTS,BL_LEVELS,                                      BDYLYR6A.1239   
     & P,P_HALF,T,Q,QCL,QCF,BT,BQ,CF,DZL,                                  BDYLYR6A.1240   
     & RDZ,DELTAP,FTL,FQW,                                                 BDYLYR6A.1241   
     & Z0M_EFF_GB,Z_FULL,Z_HALF,Z_UV,Z_TQ,U_S,FB_SURF,                     BDYLYR6A.1242   
     & QW,RHOKMZ(1,2),DB(1,2),RHOKHZ(1,2),TL,ZH,TV1_SD,T1_SD,Q1_SD,        BDYLYR6A.1243   
     & NTML,GRAD_T_ADJ,GRAD_Q_ADJ,                                         BDYLYR6A.1244   
     & BTM,BQM,DQSDT,BTM_CLD,BQM_CLD,A_QSM,A_DQSDTM,RHO_TQ,RHO_UV,         BDYLYR6A.1245   
     & RAD_HR,RADHR_DIM1,CUMULUS,Z_LCL,RHOKM_TOP(1,2),RHOKH_TOP(1,2),      ARN0F405.219    
     & ZHT,BL_TYPE_1,BL_TYPE_2,BL_TYPE_3,BL_TYPE_4,BL_TYPE_5,BL_TYPE_6,    ARN0F405.220    
     & UNSTABLE,NTDSC,DSC,                                                 ARN0F405.221    
     & LTIMER                                                              BDYLYR6A.1247   
     & )                                                                   BDYLYR6A.1248   
                                                                           BDYLYR6A.1249   
      CALL EX_COEF (                                                       BDYLYR6A.1250   
     & P_FIELD,P1,P_POINTS,BL_LEVELS                                       BDYLYR6A.1251   
     &,CCB,CCT,NTML,L_MOM                                                  BDYLYR6A.1252   
     &,CCA,DZL,RDZ,DB(1,2),U_P,V_P                                         BDYLYR6A.1253   
     &,RHO_HALF,ZH,Z_HALF,Z0M,H_BLEND_OROG                                 BDYLYR6A.1254   
     &,CUMULUS,Z_LCL                                                       ARN0F405.222    
     &,RHOKM,RHOKH                                                         BDYLYR6A.1255   
     &,LTIMER                                                              BDYLYR6A.1256   
     & )                                                                   BDYLYR6A.1257   
                                                                           BDYLYR6A.1258   
      CALL KMKH (                                                          BDYLYR6A.1259   
     & P_FIELD,P1,P_POINTS,BL_LEVELS                                       BDYLYR6A.1260   
     &,RHOKM,RHO_KM(1,2),RHOKH                                             BDYLYR6A.1261   
     &,RHOKMZ(1,2),RHOKHZ(1,2)                                             BDYLYR6A.1262   
     &,NTML,CUMULUS,RHOKM_TOP(1,2),RHOKH_TOP(1,2)                          ARN0F405.223    
     &,UNSTABLE,NTDSC,DSC                                                  ARN0F405.224    
     &,LTIMER                                                              BDYLYR6A.1263   
     & )                                                                   BDYLYR6A.1264   
                                                                           BDYLYR6A.1265   
!                                                                          BDYLYR6A.1266   
!-----------------------------------------------------------------------   BDYLYR6A.1267   
!! 5.4 Interpolate RHOKM's and CDR10M to uv points ready for the           BDYLYR6A.1268   
!!     calculation of the explcit fluxes TAU_X and TAU_Y at levels         BDYLYR6A.1269   
!!     above the surface.                                                  BDYLYR6A.1270   
!-----------------------------------------------------------------------   BDYLYR6A.1271   
                                                                           BDYLYR6A.1272   
*IF DEF,MPP                                                                BDYLYR6A.1273   
! RHOKM(*,1) contains duff data in halos. The P_TO_UV can interpolate      BDYLYR6A.1274   
! this into the real data, so first we must update east/west halos         BDYLYR6A.1275   
                                                                           BDYLYR6A.1276   
      CALL SWAPBOUNDS(RHOKM(P1,1),ROW_LENGTH,N_U_ROWS,1,0,1)               BDYLYR6A.1277   
      CALL SWAPBOUNDS(RHOKM(1,2),ROW_LENGTH,                               BDYLYR6A.1278   
     &                U_FIELD/ROW_LENGTH,1,1,BL_LEVELS-1)                  BDYLYR6A.1279   
*ENDIF                                                                     BDYLYR6A.1280   
                                                                           BDYLYR6A.1281   
      DO K=1,BL_LEVELS                                                     BDYLYR6A.1282   
                                                                           BDYLYR6A.1283   
*IF -DEF,SCMA                                                              AJC1F405.445    
        CALL P_TO_UV (RHOKM(P1,K),RHOKM_UV(U1+ROW_LENGTH,K),               BDYLYR6A.1285   
     &     P_POINTS,U_POINTS,ROW_LENGTH,N_P_ROWS)                          BDYLYR6A.1286   
*IF DEF,MPP                                                                BDYLYR6A.1287   
      IF (attop) THEN                                                      BDYLYR6A.1288   
*ENDIF                                                                     BDYLYR6A.1289   
        DO I=U1,U1+ROW_LENGTH-1                                            BDYLYR6A.1290   
          RHOKM_UV(I,K) = 1.0E30                                           BDYLYR6A.1291   
        ENDDO                                                              BDYLYR6A.1292   
*IF DEF,MPP                                                                BDYLYR6A.1293   
      ENDIF                                                                BDYLYR6A.1294   
                                                                           BDYLYR6A.1295   
      IF (atbase) THEN                                                     BDYLYR6A.1296   
*ENDIF                                                                     BDYLYR6A.1297   
        DO I= U1+(N_U_ROWS-1)*ROW_LENGTH, U1+N_U_ROWS*ROW_LENGTH-1         BDYLYR6A.1298   
          RHOKM_UV(I,K) = 1.0E30                                           BDYLYR6A.1299   
        ENDDO                                                              BDYLYR6A.1300   
*IF DEF,MPP                                                                BDYLYR6A.1301   
      ENDIF                                                                BDYLYR6A.1302   
*ENDIF                                                                     BDYLYR6A.1303   
                                                                           BDYLYR6A.1304   
*ELSE                                                                      BDYLYR6A.1305   
      DO I = P1, P1-1+P_POINTS                                             AJC1F405.446    
        RHOKM_UV(i,K) = RHOKM(i,K)                                         AJC1F405.447    
      ENDDO                                                                AJC1F405.448    
*ENDIF                                                                     BDYLYR6A.1307   
      ENDDO ! loop over bl_levels                                          BDYLYR6A.1308   
                                                                           BDYLYR6A.1309   
*IF DEF,MPP                                                                BDYLYR6A.1310   
! CDR10M contains incorrect data in halos. The P_TO_UV can interpolate     BDYLYR6A.1311   
! this into the real data, so first we must update east/west halos.        BDYLYR6A.1312   
      CALL SWAPBOUNDS(CDR10M(P1),ROW_LENGTH,N_U_ROWS,1,0,1)                BDYLYR6A.1313   
                                                                           BDYLYR6A.1314   
*ENDIF                                                                     BDYLYR6A.1315   
                                                                           BDYLYR6A.1316   
        IF (SU10. OR. SV10)THEN                                            BDYLYR6A.1317   
*IF -DEF,SCMA                                                              AJC1F405.449    
                                                                           BDYLYR6A.1319   
        CALL P_TO_UV (CDR10M(P1),CDR10M_UV(U1+ROW_LENGTH),P_POINTS,        BDYLYR6A.1320   
     &     U_POINTS,ROW_LENGTH,N_P_ROWS)                                   BDYLYR6A.1321   
!-----------------------------------------------------------------------   BDYLYR6A.1322   
!! Set first and last rows to "missing data indicator"                     BDYLYR6A.1323   
!-----------------------------------------------------------------------   BDYLYR6A.1324   
*IF DEF,MPP                                                                BDYLYR6A.1325   
        IF (attop) THEN                                                    BDYLYR6A.1326   
*ENDIF                                                                     BDYLYR6A.1327   
          DO I=U1,U1+ROW_LENGTH-1                                          BDYLYR6A.1328   
            CDR10M_UV(I) = 1.0E30                                          BDYLYR6A.1329   
          ENDDO                                                            BDYLYR6A.1330   
*IF DEF,MPP                                                                BDYLYR6A.1331   
        ENDIF                                                              BDYLYR6A.1332   
                                                                           BDYLYR6A.1333   
        IF (atbase) THEN                                                   BDYLYR6A.1334   
*ENDIF                                                                     BDYLYR6A.1335   
          DO I= U1+(N_U_ROWS-1)*ROW_LENGTH, U1+N_U_ROWS*ROW_LENGTH-1       BDYLYR6A.1336   
            CDR10M_UV(I) = 1.0E30                                          BDYLYR6A.1337   
          ENDDO                                                            BDYLYR6A.1338   
*IF DEF,MPP                                                                BDYLYR6A.1339   
        ENDIF                                                              BDYLYR6A.1340   
*ENDIF                                                                     BDYLYR6A.1341   
                                                                           BDYLYR6A.1342   
*ELSE                                                                      BDYLYR6A.1343   
      DO I = P1, P1-1+P_POINTS                                             AJC1F405.450    
        CDR10M_UV(i) = CDR10M(i)                                           AJC1F405.451    
      ENDDO                                                                AJC1F405.452    
*ENDIF                                                                     BDYLYR6A.1345   
        ENDIF                                                              BDYLYR6A.1346   
                                                                           BDYLYR6A.1347   
      IF (L_BL_LSPICE) THEN                                                BDYLYR6A.1348   
                                                                           BDYLYR6A.1349   
        DO K = 1,BL_LEVELS                                                 BDYLYR6A.1350   
          DO I = P1,P1+P_POINTS-1                                          BDYLYR6A.1351   
            QW(I,K) = Q(I,K) + QCL(I,K)                                    BDYLYR6A.1352   
            TL(I,K) = T(I,K) - LCRCP * QCL(I,K)                            BDYLYR6A.1353   
          ENDDO                                                            BDYLYR6A.1354   
        ENDDO                                                              BDYLYR6A.1355   
                                                                           BDYLYR6A.1356   
      ENDIF                                                                BDYLYR6A.1357   
                                                                           BDYLYR6A.1358   
!-----------------------------------------------------------------------   BDYLYR6A.1359   
!! 5.5 Calculation of explicit fluxes of T,Q                               BDYLYR6A.1360   
!-----------------------------------------------------------------------   BDYLYR6A.1361   
                                                                           BDYLYR6A.1362   
                                                                           BDYLYR6A.1363   
      CALL EX_FLUX_TQ (                                                    BDYLYR6A.1364   
     &  P_POINTS,P_FIELD,P1,BL_LEVELS                                      BDYLYR6A.1365   
     &, TL,QW,RDZ,FTL,FQW,RHOKH                                            BDYLYR6A.1366   
     &, RHOKHZ(1,2)                                                        ARN0F405.225    
     &, GRAD_T_ADJ,GRAD_Q_ADJ                                              BDYLYR6A.1367   
     &, NTML                                                               BDYLYR6A.1368   
     &, LTIMER                                                             BDYLYR6A.1369   
     &  )                                                                  BDYLYR6A.1370   
                                                                           BDYLYR6A.1371   
!-----------------------------------------------------------------------   BDYLYR6A.1372   
!! 5.6 Calculation of explicit fluxes of U and V.                          BDYLYR6A.1373   
!-----------------------------------------------------------------------   BDYLYR6A.1374   
                                                                           BDYLYR6A.1375   
                                                                           BDYLYR6A.1376   
      CALL EX_FLUX_UV ( ! For U                                            BDYLYR6A.1377   
     &  U_POINTS,U_FIELD,ROW_LENGTH,BL_LEVELS,U1                           BDYLYR6A.1378   
     &, U,U_0,RDZUV(1,2),RHOKM_UV,TAUX                                     BDYLYR6A.1379   
     &, LTIMER                                                             BDYLYR6A.1380   
     &  )                                                                  BDYLYR6A.1381   
                                                                           BDYLYR6A.1382   
                                                                           BDYLYR6A.1383   
      CALL EX_FLUX_UV ( ! For V                                            BDYLYR6A.1384   
     &  U_POINTS,U_FIELD,ROW_LENGTH,BL_LEVELS,U1                           BDYLYR6A.1385   
     &, V,V_0,RDZUV(1,2),RHOKM_UV,TAUY                                     BDYLYR6A.1386   
     &, LTIMER                                                             BDYLYR6A.1387   
     &  )                                                                  BDYLYR6A.1388   
                                                                           BDYLYR6A.1389   
                                                                           BDYLYR6A.1390   
*IF -DEF,SCMA                                                              AJC1F405.453    
!-----------------------------------------------------------------------   BDYLYR6A.1392   
!! Set first and last rows to "missing data indicator"                     BDYLYR6A.1393   
!-----------------------------------------------------------------------   BDYLYR6A.1394   
      DO K=1,BL_LEVELS                                                     BDYLYR6A.1395   
*IF DEF,MPP                                                                BDYLYR6A.1396   
      IF (attop) THEN                                                      BDYLYR6A.1397   
*ENDIF                                                                     BDYLYR6A.1398   
        DO I=U1,U1+ROW_LENGTH-1                                            BDYLYR6A.1399   
          TAUX(I,K)=1.E30                                                  BDYLYR6A.1400   
          TAUY(I,K)=1.E30                                                  BDYLYR6A.1401   
        ENDDO                                                              BDYLYR6A.1402   
*IF DEF,MPP                                                                BDYLYR6A.1403   
      ENDIF                                                                BDYLYR6A.1404   
                                                                           BDYLYR6A.1405   
      IF (atbase) THEN                                                     BDYLYR6A.1406   
*ENDIF                                                                     BDYLYR6A.1407   
        DO I= U1 + (N_U_ROWS-1)*ROW_LENGTH, U1 + N_U_ROWS*ROW_LENGTH -1    BDYLYR6A.1408   
          TAUX(I,K)=1.E30                                                  BDYLYR6A.1409   
          TAUY(I,K)=1.E30                                                  BDYLYR6A.1410   
        ENDDO                                                              BDYLYR6A.1411   
*IF DEF,MPP                                                                BDYLYR6A.1412   
      ENDIF                                                                BDYLYR6A.1413   
*ENDIF                                                                     BDYLYR6A.1414   
      ENDDO                                                                BDYLYR6A.1415   
*ENDIF                                                                     BDYLYR6A.1416   
                                                                           BDYLYR6A.1417   
!-----------------------------------------------------------------------   BDYLYR6A.1418   
!! 6.  "Implicit" calculation of increments for TL and QW                  BDYLYR6A.1419   
!-----------------------------------------------------------------------   BDYLYR6A.1420   
                                                                           BDYLYR6A.1421   
      CALL IM_CAL_TQ (                                                     BDYLYR6A.1422   
     & P_FIELD,P1                                                          BDYLYR6A.1423   
     &,LAND_INDEX                                                          BDYLYR6A.1425   
     &,LAND_PTS,LAND1                                                      BDYLYR6A.1427   
     &,P_POINTS,BL_LEVELS,N_TYPES,TILE_FRAC                                BDYLYR6A.1428   
     &,ALPHA1_GB,ALPHA1,ASHTF                                              BDYLYR6A.1429   
     &,DTRDZ,DTRDZ_RML,RHOKH(1,2),RDZ                                      BDYLYR6A.1430   
     &,ICE_FRACT,LYING_SNOW,RADNET_C,RESFT_TILE,RHOKPM_TILE                APA1F405.374    
     &,RHOKPM_POT_TILE                                                     ANG1F405.89     
     &,TIMESTEP,LAND_MASK                                                  BDYLYR6A.1432   
     &,EPOT,EPOT_TILE                                                      ANG1F405.90     
     &,FQW,FQW_TILE,FTL,FTL_TILE,E_SEA,H_SEA,DQW_NT,QW                     ANG1F405.91     
     &,GAMMA,RHOKE,RHOKH(1,1),DTL_NT,TL                                    BDYLYR6A.1434   
     &,SURF_HT_FLUX,NRML                                                   BDYLYR6A.1435   
     &,LTIMER                                                              BDYLYR6A.1436   
     &)                                                                    BDYLYR6A.1437   
                                                                           BDYLYR6A.1438   
                                                                           BDYLYR6A.1439   
!-----------------------------------------------------------------------   BDYLYR6A.1440   
!! 6.1 Convert FTL to sensible heat flux in Watts per square metre.        BDYLYR6A.1441   
!      Also, IMPL_CAL only updates FTL_TILE(*,1) and FQW_TILE(*,1)         BDYLYR6A.1442   
!      over sea points, so copy this to remaining tiles                    BDYLYR6A.1443   
!-----------------------------------------------------------------------   BDYLYR6A.1444   
                                                                           BDYLYR6A.1445   
      DO K=1,BL_LEVELS                                                     BDYLYR6A.1446   
Cfpp$ Select(CONCUR)                                                       BDYLYR6A.1447   
        DO  I=P1,P1+P_POINTS-1                                             BDYLYR6A.1448   
          FTL(I,K) = FTL(I,K)*CP                                           BDYLYR6A.1449   
        ENDDO                                                              BDYLYR6A.1450   
      ENDDO                                                                BDYLYR6A.1451   
                                                                           BDYLYR6A.1452   
      DO ITILE=1,N_TYPES                                                   BDYLYR6A.1453   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1454   
          IF(LAND_MASK(I)) THEN                                            BDYLYR6A.1455   
            FTL_TILE(I,ITILE) = FTL_TILE(I,ITILE)*CP                       BDYLYR6A.1456   
          ELSE                                                             BDYLYR6A.1457   
            FTL_TILE(I,ITILE) = FTL(I,1)                                   BDYLYR6A.1458   
            FQW_TILE(I,ITILE) = FQW_TILE(I,1)                              BDYLYR6A.1459   
          ENDIF                                                            BDYLYR6A.1460   
        ENDDO                                                              BDYLYR6A.1461   
      ENDDO                                                                BDYLYR6A.1462   
                                                                           BDYLYR6A.1463   
!-----------------------------------------------------------------------   BDYLYR6A.1464   
!!  Diagnose surface temperature and increment sub-surface temperatures    BDYLYR6A.1465   
!!  for land and sea-ice.                                                  BDYLYR6A.1466   
!-----------------------------------------------------------------------   BDYLYR6A.1467   
                                                                           BDYLYR6A.1468   
!-----------------------------------------------------------------------   BDYLYR6A.1469   
!!   Sea-ice (P241, routine SICE_HTF).                                     BDYLYR6A.1470   
!-----------------------------------------------------------------------   BDYLYR6A.1471   
                                                                           BDYLYR6A.1472   
      CALL SICE_HTF(                                                       BDYLYR6A.1473   
     & ASHTF,DI,ICE_FRACT,SURF_HT_FLUX(1,1),TIMESTEP,                      BDYLYR6A.1474   
     & LAND_MASK,P_FIELD,P_POINTS,P1,TI,TSTAR,ASURF,                       BDYLYR6A.1475   
     & SEA_ICE_HTF,LTIMER                                                  BDYLYR6A.1476   
     &)                                                                    BDYLYR6A.1477   
                                                                           BDYLYR6A.1478   
!-----------------------------------------------------------------------   BDYLYR6A.1479   
!!   Diagnose the land surface temperature (previously in SOIL_HTF)        BDYLYR6A.1480   
!-----------------------------------------------------------------------   BDYLYR6A.1481   
                                                                           BDYLYR6A.1482   
                                                                           BDYLYR6A.1483   
      DO I=LAND1,LAND1+LAND_PTS-1                                          BDYLYR6A.1489   
        J = LAND_INDEX(I)                                                  BDYLYR6A.1490   
        TSTAR(J)=0.0                                                       BDYLYR6A.1491   
      ENDDO                                                                BDYLYR6A.1492   
                                                                           BDYLYR6A.1494   
                                                                           BDYLYR6A.1495   
      DO ITILE=1,N_TYPES                                                   BDYLYR6A.1496   
        DO J=P1,P1+P_POINTS-1                                              BDYLYR6A.1512   
          IF (.NOT. LAND_MASK(J)) TSTAR_TILE(J,ITILE)=TSTAR(J)             BDYLYR6A.1513   
        ENDDO                                                              BDYLYR6A.1514   
                                                                           BDYLYR6A.1515   
        DO I=LAND1,LAND1+LAND_PTS-1                                        BDYLYR6A.1516   
          J = LAND_INDEX(I)                                                BDYLYR6A.1517   
          TSTAR_TILE(J,ITILE) = T_SOIL(I,1) + SURF_HT_FLUX(J,ITILE)        BDYLYR6A.1518   
     &                                       / ASHTF(J)                    BDYLYR6A.1519   
          TSTAR(J)=TSTAR(J)+TSTAR_TILE(J,ITILE)*TILE_FRAC(J,ITILE)         BDYLYR6A.1520   
        ENDDO                                                              BDYLYR6A.1521   
      ENDDO ! tile loop                                                    BDYLYR6A.1523   
                                                                           BDYLYR6A.1524   
!-----------------------------------------------------------------------   BDYLYR6A.1525   
!! 7.  Surface evaporation components and updating of surface              BDYLYR6A.1526   
!!     temperature (P245, routine SF_EVAP).                                BDYLYR6A.1527   
!!     The following diagnostics are also calculated, as requested :-      BDYLYR6A.1528   
!!     Heat flux due to melting of sea-ice; specific humidity at 1.5       BDYLYR6A.1529   
!!     metres; temperature at 1.5 metres.                                  BDYLYR6A.1530   
!-----------------------------------------------------------------------   BDYLYR6A.1531   
                                                                           BDYLYR6A.1532   
      CALL SF_EVAP (                                                       BDYLYR6A.1533   
     & P_FIELD,P1,N_TYPES,LAND_FIELD,LAND1,GAMMA,                          BDYLYR6A.1534   
     & P_POINTS,BL_LEVELS,LAND_MASK,LAND_PTS,LAND_INDEX,                   BDYLYR6A.1538   
     & TILE_FRAC,ALPHA1,ASURF,ASHTF,CANOPY,CATCH_TILE,                     BDYLYR6A.1540   
     & DTRDZ,DTRDZ_RML,E_SEA,FRACA,                                        BDYLYR6A.1541   
     & ICE_FRACT,NRML,RHOKH_TILE,SMC,TIMESTEP,CER1P5M,CHR1P5M,             BDYLYR6A.1542   
     & PSTAR,RESFS,RESFT_TILE,Z0M,Z0H,SQ1P5,ST1P5,SIMLT,SMLT,              BDYLYR6A.1543   
     & FTL,FTL_TILE,FQW,FQW_TILE,LYING_SNOW,QW,SURF_HT_FLUX,               BDYLYR6A.1544   
     & TL,TSTAR_TILE,TSTAR,TI,ECAN,ES,EI,                                  BDYLYR6A.1545   
     & SICE_MLT_HTF,SNOMLT_SURF_HTF,SNOWMELT,                              BDYLYR6A.1546   
     & H_BLEND,HEAT_BLEND_FACTOR,QCL(1,1),QCF(1,1),Z1,                     ARN0F405.226    
     & Q1P5M,T1P5M,LTIMER                                                  BDYLYR6A.1548   
     & )                                                                   BDYLYR6A.1549   
                                                                           BDYLYR6A.1550   
                                                                           BDYLYR6A.1551   
!7.1 Copy T and Q from workspace to INOUT space.                           BDYLYR6A.1552   
                                                                           BDYLYR6A.1553   
      DO K=1,BL_LEVELS                                                     BDYLYR6A.1554   
Cfpp$  Select(CONCUR)                                                      BDYLYR6A.1555   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1556   
          T(I,K)=TL(I,K)                                                   BDYLYR6A.1557   
          Q(I,K)=QW(I,K)                                                   BDYLYR6A.1558   
        ENDDO                                                              BDYLYR6A.1559   
      ENDDO                                                                BDYLYR6A.1560   
                                                                           BDYLYR6A.1561   
C-----------------------------------------------------------------------   APA1F405.375    
C Diagnose the true value of the surface soil heat flux over land points   APA1F405.376    
C-----------------------------------------------------------------------   APA1F405.377    
      DO ITILE=1,N_TYPES                                                   APA1F405.378    
        DO I=LAND1,LAND1+LAND_PTS-1                                        APA1F405.379    
          J = LAND_INDEX(I)                                                APA1F405.380    
          SURF_HT_FLUX(J,ITILE) = SURF_HT_FLUX(J,ITILE)                    APA1F405.381    
     +                          - CANCAP(J,ITILE) *                        APA1F405.382    
     +            (TSTAR_TILE(J,ITILE) - T_SOIL(I,1)) / TIMESTEP           APA1F405.383    
        ENDDO                                                              APA1F405.384    
      ENDDO                                                                APA1F405.385    
      DO ITILE=1,N_TYPES                                                   BDYLYR6A.1562   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1563   
          SURF_HT_FLUX_GB(I) = SURF_HT_FLUX_GB(I) + TILE_FRAC(I,ITILE)*    BDYLYR6A.1564   
     &                                           SURF_HT_FLUX(I,ITILE)     BDYLYR6A.1565   
        ENDDO                                                              BDYLYR6A.1566   
      ENDDO                                                                BDYLYR6A.1567   
                                                                           BDYLYR6A.1568   
!-----------------------------------------------------------------------   BDYLYR6A.1569   
!! 8 "Implicit" calculation of increments for U and V.                     BDYLYR6A.1570   
!-----------------------------------------------------------------------   BDYLYR6A.1571   
                                                                           BDYLYR6A.1572   
                                                                           BDYLYR6A.1573   
      CALL IM_CAL_UV (  ! For U                                            BDYLYR6A.1574   
     & U_FIELD,U1                                                          BDYLYR6A.1575   
     &,U_POINTS,BL_LEVELS,ROW_LENGTH                                       BDYLYR6A.1576   
     &,GAMMA                                                               BDYLYR6A.1577   
     &,RHOKM_UV(1,2)                                                       BDYLYR6A.1578   
     &,U,U_0,TIMESTEP                                                      BDYLYR6A.1579   
     &,RHOKM_UV(1,1),DU_NT,DU                                              BDYLYR6A.1580   
     &,DTRDZ_UV,RDZUV(1,2),TAUX                                            BDYLYR6A.1581   
     &,LTIMER                                                              BDYLYR6A.1582   
     &)                                                                    BDYLYR6A.1583   
                                                                           BDYLYR6A.1584   
                                                                           BDYLYR6A.1585   
      CALL IM_CAL_UV (  ! For V                                            BDYLYR6A.1586   
     & U_FIELD,U1                                                          BDYLYR6A.1587   
     &,U_POINTS,BL_LEVELS,ROW_LENGTH                                       BDYLYR6A.1588   
     &,GAMMA                                                               BDYLYR6A.1589   
     &,RHOKM_UV(1,2)                                                       BDYLYR6A.1590   
     &,V,V_0,TIMESTEP                                                      BDYLYR6A.1591   
     &,RHOKM_UV(1,1),DV_NT,DV                                              BDYLYR6A.1592   
     &,DTRDZ_UV,RDZUV(1,2),TAUY                                            BDYLYR6A.1593   
     &,LTIMER                                                              BDYLYR6A.1594   
     & )                                                                   BDYLYR6A.1595   
                                                                           BDYLYR6A.1596   
                                                                           BDYLYR6A.1597   
!----------------------------------------------------------------------    BDYLYR6A.1598   
!! 8.1 Update U_V.                                                         BDYLYR6A.1599   
!----------------------------------------------------------------------    BDYLYR6A.1600   
                                                                           BDYLYR6A.1601   
                                                                           BDYLYR6A.1602   
      DO K=1,BL_LEVELS                                                     BDYLYR6A.1603   
*IF -DEF,SCMA                                                              AJC1F405.454    
        DO I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                        BDYLYR6A.1605   
*ELSE                                                                      BDYLYR6A.1606   
        DO I=1,U_POINTS                                                    BDYLYR6A.1607   
*ENDIF                                                                     BDYLYR6A.1608   
          U(I,K) = U(I,K) + DU(I,K)                                        BDYLYR6A.1609   
          V(I,K) = V(I,K) + DV(I,K)                                        BDYLYR6A.1610   
        ENDDO                                                              BDYLYR6A.1611   
      ENDDO                                                                BDYLYR6A.1612   
                                                                           BDYLYR6A.1613   
! U component of 10m wind                                                  BDYLYR6A.1614   
      IF (SU10)THEN                                                        BDYLYR6A.1615   
*IF -DEF,SCMA                                                              AJC1F405.455    
        DO I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                        BDYLYR6A.1617   
*ELSE                                                                      BDYLYR6A.1618   
        DO I=1,U_POINTS                                                    BDYLYR6A.1619   
*ENDIF                                                                     BDYLYR6A.1620   
          U10M(I) = (U(I,1) -U_0(I))*CDR10M_UV(I) + U_0(I)                 BDYLYR6A.1621   
        ENDDO                                                              BDYLYR6A.1622   
      ENDIF                                                                BDYLYR6A.1623   
                                                                           BDYLYR6A.1624   
! V component of 10m wind                                                  BDYLYR6A.1625   
      IF (SV10)THEN                                                        BDYLYR6A.1626   
*IF -DEF,SCMA                                                              AJC1F405.456    
        DO I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                        BDYLYR6A.1628   
*ELSE                                                                      BDYLYR6A.1629   
        DO I=1,U_POINTS                                                    BDYLYR6A.1630   
*ENDIF                                                                     BDYLYR6A.1631   
          V10M(I) = (V(I,1) -V_0(I))*CDR10M_UV(I) + V_0(I)                 BDYLYR6A.1632   
        ENDDO                                                              BDYLYR6A.1633   
      ENDIF                                                                BDYLYR6A.1634   
                                                                           BDYLYR6A.1635   
!-----------------------------------------------------------------------   BDYLYR6A.1636   
!! 9.  Calculate diagnostics                                               BDYLYR6A.1637   
!  9.1 Surface latent heat flux.                                           BDYLYR6A.1638   
!-----------------------------------------------------------------------   BDYLYR6A.1639   
                                                                           BDYLYR6A.1640   
      IF (SLH) THEN                                                        BDYLYR6A.1641   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1642   
          LATENT_HEAT(I) = LC*FQW(I,1) + LF*EI(I)                          BDYLYR6A.1643   
        ENDDO                                                              BDYLYR6A.1644   
      ENDIF                                                                BDYLYR6A.1645   
!-----------------------------------------------------------------------   BDYLYR6A.1646   
! 9.2 Diagnose the soil evaporation, the transpiration and the water       BDYLYR6A.1647   
!     extracted from each soil layer                                       BDYLYR6A.1648   
!-----------------------------------------------------------------------   BDYLYR6A.1649   
      DO ITILE=1,N_TYPES                                                   BDYLYR6A.1675   
        DO N=1,SM_LEVELS                                                   BDYLYR6A.1676   
          DO I=LAND1,LAND1+LAND_PTS-1                                      BDYLYR6A.1677   
            J = LAND_INDEX(I)                                              BDYLYR6A.1678   
            EXT(I,N)=EXT(I,N) + WT_EXT(I,N) * (1-F_SE(J,ITILE))*           BDYLYR6A.1679   
     &                          ES(J,ITILE) * TILE_FRAC(J,ITILE)           BDYLYR6A.1680   
                                                                           BDYLYR6A.1681   
          ENDDO ! land_points                                              BDYLYR6A.1682   
        ENDDO ! sm_levels                                                  BDYLYR6A.1683   
                                                                           BDYLYR6A.1684   
CDIR$ IVDEP                                                                BDYLYR6A.1685   
! Fujitsu vectorization directive                                          GRB0F405.195    
!OCL NOVREC                                                                GRB0F405.196    
        DO I=LAND1,LAND1+LAND_PTS-1                                        BDYLYR6A.1686   
          J = LAND_INDEX(I)                                                BDYLYR6A.1687   
          ESOIL(J,ITILE)=F_SE(J,ITILE)*ES(J,ITILE)                         BDYLYR6A.1688   
          ETRAN(J,ITILE)=(1-F_SE(J,ITILE))*ES(J,ITILE)                     BDYLYR6A.1689   
          EXT(I,1)=EXT(I,1)+ESOIL(J,ITILE)*TILE_FRAC(J,ITILE)              BDYLYR6A.1690   
          ES_GB(J)=ES_GB(J)+ES(J,ITILE)*TILE_FRAC(J,ITILE)                 BDYLYR6A.1691   
        ENDDO                                                              BDYLYR6A.1692   
      ENDDO ! Tile loop                                                    BDYLYR6A.1693   
                                                                           BDYLYR6A.1695   
!-----------------------------------------------------------------------   BDYLYR6A.1696   
! 10 Set RHOKH, the coefficients required for tracer mixing.               BDYLYR6A.1697   
!    Required 5B and after due to change in contents of RHOKH in rest      BDYLYR6A.1698   
!    of routine.                                                           BDYLYR6A.1699   
!-----------------------------------------------------------------------   BDYLYR6A.1700   
                                                                           BDYLYR6A.1701   
      DO I=P1,P1+P_POINTS-1                                                BDYLYR6A.1702   
        RHOKH(I,1) = GAMMA(1)*RHOKH(I,1)                                   BDYLYR6A.1703   
      ENDDO                                                                BDYLYR6A.1704   
      DO K = 2,BL_LEVELS                                                   BDYLYR6A.1705   
        DO I=P1,P1+P_POINTS-1                                              BDYLYR6A.1706   
          RHOKH(I,K) = GAMMA(K)*RHOKH(I,K)*RDZ(I,K)                        BDYLYR6A.1707   
        ENDDO                                                              BDYLYR6A.1708   
      ENDDO                                                                BDYLYR6A.1709   
                                                                           BDYLYR6A.1710   
  999  CONTINUE  ! Branch for error exit.                                  BDYLYR6A.1711   
                                                                           BDYLYR6A.1712   
      IF (LTIMER) THEN                                                     BDYLYR6A.1713   
        CALL TIMER('BDYLAYR ',4)                                           BDYLYR6A.1714   
      ENDIF                                                                BDYLYR6A.1715   
                                                                           BDYLYR6A.1716   
      RETURN                                                               BDYLYR6A.1717   
      END                                                                  BDYLYR6A.1718   
*ENDIF                                                                     BDYLYR6A.1719