*IF DEF,A03_6A                                                             ACB1F405.5      
C *****************************COPYRIGHT******************************     IMCLTQ5B.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    IMCLTQ5B.4      
C                                                                          IMCLTQ5B.5      
C Use, duplication or disclosure of this code is subject to the            IMCLTQ5B.6      
C restrictions as set forth in the contract.                               IMCLTQ5B.7      
C                                                                          IMCLTQ5B.8      
C                Meteorological Office                                     IMCLTQ5B.9      
C                London Road                                               IMCLTQ5B.10     
C                BRACKNELL                                                 IMCLTQ5B.11     
C                Berkshire UK                                              IMCLTQ5B.12     
C                RG12 2SZ                                                  IMCLTQ5B.13     
C                                                                          IMCLTQ5B.14     
C If no contract has been raised with this copy of the code, the use,      IMCLTQ5B.15     
C duplication or disclosure of it is strictly prohibited.  Permission      IMCLTQ5B.16     
C to do so must first be obtained in writing from the Head of Numerical    IMCLTQ5B.17     
C Modelling at the above address.                                          IMCLTQ5B.18     
C ******************************COPYRIGHT******************************    IMCLTQ5B.19     
!!!  SUBROUTINE IM_CAL_TQ ----------------------------------------------   IMCLTQ5B.20     
!!!                                                                        IMCLTQ5B.21     
!!!  Purpose: Calculate increments for                                     IMCLTQ5B.22     
!!!           T and Q in the boundary layer, using an                      IMCLTQ5B.23     
!!!           implicit numerical scheme.  The tridiagonal matrices are     IMCLTQ5B.24     
!!!           inverted using simple Gaussian elimination.                  IMCLTQ5B.25     
!!!                                                                        IMCLTQ5B.26     
!!!                                                                        IMCLTQ5B.28     
!!!  Model           Modification history                                  IMCLTQ5B.29     
!!! version  Date                                                          IMCLTQ5B.30     
CLL  4.5    Jul. 98  Kill the IBM specific lines (JCThil)                  AJC1F405.189    
!!!                                                                        IMCLTQ5B.31     
!!!  JJ  <- Programmers of some or all of previous code or changes         IMCLTQ5B.32     
!!!                                                                        IMCLTQ5B.33     
!!!                                                                        IMCLTQ5B.34     
!!!  Programming standard: UM Documentation Paper No 4, Version 2,         IMCLTQ5B.35     
!!!                        dated 18/1/90                                   IMCLTQ5B.36     
!!!                                                                        IMCLTQ5B.37     
!!!  System component covered: P244                                        IMCLTQ5B.38     
!!!                                                                        IMCLTQ5B.39     
!!!  Project task: P24                                                     IMCLTQ5B.40     
!!!                                                                        IMCLTQ5B.41     
!!!  Documentation: UM Documentation Paper No 24.                          IMCLTQ5B.42     
!!!                                                                        IMCLTQ5B.43     
!!!---------------------------------------------------------------------   IMCLTQ5B.44     
!!  Arguments :-                                                           IMCLTQ5B.45     

      SUBROUTINE IM_CAL_TQ (                                                2,4IMCLTQ5B.46     
     & P_FIELD,P1                                                          IMCLTQ5B.47     
     &,LAND_INDEX                                                          IMCLTQ5B.49     
     &,LAND_PTS,LAND1                                                      IMCLTQ5B.51     
     &,P_POINTS,BL_LEVELS,N_TYPES,TILE_FRAC                                IMCLTQ5B.52     
     &,ALPHA1_GB,ALPHA1,ASHTF                                              IMCLTQ5B.53     
     &,DTRDZ,DTRDZ_RML,RHOKH,RDZ                                           IMCLTQ5B.54     
     &,ICE_FRACT,LYING_SNOW,RADNET_C,RESFT,RHOKPM_TILE                     APA1F405.485    
     &,RHOKPM_POT_TILE                                                     ANG1F405.194    
     &,TIMESTEP,LAND_MASK                                                  IMCLTQ5B.56     
     &,EPOT,EPOT_TILE                                                      ANG1F405.195    
     &,FQW,FQW_TILE,FTL,FTL_TILE,E_SEA,H_SEA,DQW_NT,QW                     ANG1F405.196    
     &,GAMMA,RHOKE,RHOKH_1,DTL_NT,TL                                       IMCLTQ5B.58     
     &,SURF_HT_FLUX,NRML                                                   IMCLTQ5B.59     
     &,LTIMER                                                              IMCLTQ5B.60     
     &)                                                                    IMCLTQ5B.61     
                                                                           IMCLTQ5B.62     
      IMPLICIT NONE                                                        IMCLTQ5B.63     
                                                                           IMCLTQ5B.64     
      LOGICAL LTIMER                                                       IMCLTQ5B.65     
                                                                           IMCLTQ5B.66     
      INTEGER                                                              IMCLTQ5B.67     
     & P_FIELD                     ! IN No. of points in P-grid.           IMCLTQ5B.68     
     &,P1                          ! IN First point to be processed in     IMCLTQ5B.69     
!                                       P-grid.                            IMCLTQ5B.70     
     &,LAND1                       ! IN First land point to be processed   IMCLTQ5B.71     
     &,P_POINTS                    ! IN Number of P-grid points to be      IMCLTQ5B.72     
!                                       processed.                         IMCLTQ5B.73     
     &,LAND_PTS                    ! IN Number of land points to be        IMCLTQ5B.77     
!                                       processed.                         IMCLTQ5B.78     
     &,BL_LEVELS                   ! IN No. of atmospheric levels for      IMCLTQ5B.82     
!                                       which boundary layer fluxes are    IMCLTQ5B.83     
!                                       calculated.                        IMCLTQ5B.84     
     &,N_TYPES                     ! IN Number of land surface tiles       IMCLTQ5B.85     
     &,LAND_INDEX(P_FIELD)         ! IN LAND_INDEX(I)=J => the Jth         IMCLTQ5B.86     
!                                     point in P_FIELD is the Ith          IMCLTQ5B.87     
!                                     land point.                          IMCLTQ5B.88     
                                                                           IMCLTQ5B.89     
      REAL                                                                 IMCLTQ5B.90     
     & DTRDZ(P_FIELD,BL_LEVELS)    ! IN dz for bottom BL_LEVELS            IMCLTQ5B.91     
     &,RDZ(P_FIELD,BL_LEVELS)      ! IN 1./dz                              IMCLTQ5B.92     
     &,ALPHA1_GB(P_FIELD)          ! IN Gradient of saturated specific     IMCLTQ5B.93     
!                                       humidity with respect to           IMCLTQ5B.94     
!                                       temperature between the bottom     IMCLTQ5B.95     
!                                       model layer and the surface.       IMCLTQ5B.96     
     &,ALPHA1(P_FIELD,N_TYPES)     ! IN Gradient of saturated specific     IMCLTQ5B.97     
!                                       humidity with respect to           IMCLTQ5B.98     
!                                       temperature between the bottom     IMCLTQ5B.99     
!                                       model layer and the surface.       IMCLTQ5B.100    
     &,ASHTF(P_FIELD)              ! IN Coefficient to calculate surface   IMCLTQ5B.101    
!                                       heat flux into soil or sea-ice     IMCLTQ5B.102    
!                                       (W/m2/K).                          IMCLTQ5B.103    
     &,RHOKH(P_FIELD,2:BL_LEVELS)  ! IN Exchange coeff for FTL above       IMCLTQ5B.104    
!                                       surface.                           IMCLTQ5B.105    
     &,GAMMA(BL_LEVELS)            ! IN Implicit weighting.                IMCLTQ5B.106    
                                                                           IMCLTQ5B.107    
      REAL                         ! Split to avoid > 19 continuations.    IMCLTQ5B.108    
     & ICE_FRACT(P_FIELD)          ! IN Fraction of grid-box which is      IMCLTQ5B.109    
!                                       sea-ice (decimal fraction).        IMCLTQ5B.110    
     &,LYING_SNOW(P_FIELD)         ! IN Lying snow (kg per sq m ie "mm")   IMCLTQ5B.111    
     &,RADNET_C(P_FIELD,N_TYPES)   ! IN Area weighted ice component        APA1F405.486    
!                                       of surface net radiation.          IMCLTQ5B.113    
!                                       Modified for thermal canopy        APA1F405.487    
!                                       over land.                         APA1F405.488    
!                                       (+ve downwards, W per sq m)        IMCLTQ5B.114    
     &,RESFT(P_FIELD,N_TYPES)      ! IN Total resistance factor            IMCLTQ5B.115    
     &,RHOKPM(P_FIELD)             ! IN Surface exchange coeff.            IMCLTQ5B.116    
     &,RHOKPM_TILE(P_FIELD,N_TYPES)! IN Surface exchange coeff for tiles   IMCLTQ5B.117    
     &,RHOKPM_POT_TILE(P_FIELD,N_TYPES)                                    ANG1F405.197    
!                                    IN Surface exchange coeff. for        ANG1F405.198    
!                                       potential evaporation.             ANG1F405.199    
     &,TILE_FRAC(P_FIELD,N_TYPES)  ! IN Tile fraction                      IMCLTQ5B.118    
     &,TIMESTEP                    ! IN Timestep in seconds.               IMCLTQ5B.119    
     &,DTL_NT(P_FIELD,BL_LEVELS)   ! IN Non-turbulent increment for TL.    IMCLTQ5B.120    
     &,DQW_NT(P_FIELD,BL_LEVELS)   ! IN Non-turbulent increment for QW.    IMCLTQ5B.121    
                                                                           IMCLTQ5B.122    
       LOGICAL                                                             IMCLTQ5B.123    
     & LAND_MASK(P_FIELD)          ! IN T for land, F elsewhere.           IMCLTQ5B.124    
                                                                           IMCLTQ5B.125    
!  Next 5 arrays are all IN as "explicit" fluxes from P243 (SF_EXCH and    IMCLTQ5B.126    
!  possibly KMKH), and OUT as "implicit" fluxes.                           IMCLTQ5B.127    
                                                                           IMCLTQ5B.128    
      REAL                                                                 IMCLTQ5B.129    
     & FQW(P_FIELD,BL_LEVELS)      ! INOUT Flux of QW (ie., for surface,   IMCLTQ5B.130    
!                                          total evaporation). Kg/sq m/s   IMCLTQ5B.131    
     &,FQW_TILE(P_FIELD,N_TYPES)   ! INOUT Tile flux of QW. Kg/sq m/s      IMCLTQ5B.132    
     &,EPOT(P_FIELD)               ! INOUT Potential evaporation rate.     ANG1F405.200    
     &,EPOT_TILE(P_FIELD,N_TYPES)  ! INOUT Tile potential evaporation      ANG1F405.201    
!                                          rate.                           ANG1F405.202    
     &,FTL(P_FIELD,BL_LEVELS)      ! INOUT Flux of TL (ie., for surface,   IMCLTQ5B.133    
!                                          H/Cp where H is sensible heat   IMCLTQ5B.134    
!                                          in W per sq m).                 IMCLTQ5B.135    
     &,FTL_TILE(P_FIELD,N_TYPES)   ! INOUT Tile flux of TL                 IMCLTQ5B.136    
     &,E_SEA(P_FIELD)              ! INOUT Evaporation from sea times      IMCLTQ5B.137    
!                                          leads fraction (kg/m2/s).       IMCLTQ5B.138    
!                                          Zero over land.                 IMCLTQ5B.139    
     &,H_SEA(P_FIELD)              ! INOUT Surface sensible heat flux ov   IMCLTQ5B.140    
!                                          sea times leads fraction (W/m   IMCLTQ5B.141    
!                                          Zero over land.                 IMCLTQ5B.142    
     &,QW(P_FIELD,BL_LEVELS)       ! INOUT Total water content (kg per     IMCLTQ5B.143    
!                                          kg air).  From P243.            IMCLTQ5B.144    
     &,RHOKE(P_FIELD,N_TYPES)      ! IN    Surface exchange coeff. for     IMCLTQ5B.145    
!                                          FQW.                            IMCLTQ5B.146    
!                                      OUT =RHOKE to satisfy STASH.        IMCLTQ5B.147    
     &,RHOKH_1(P_FIELD)            ! IN    Surface exchange coeffs for     IMCLTQ5B.148    
!                                          FTL,                            IMCLTQ5B.149    
!                                      OUT =RHOKH_1 to satisfy STASH.      IMCLTQ5B.150    
     &,TL(P_FIELD,BL_LEVELS)       ! INOUT Liquid/frozen water             IMCLTQ5B.151    
!                                          temperature (K).  From P243.    IMCLTQ5B.152    
                                                                           IMCLTQ5B.153    
      REAL                                                                 IMCLTQ5B.154    
     & SURF_HT_FLUX(P_FIELD,N_TYPES)! OUT Net downward heat flux at        IMCLTQ5B.155    
!                                        surface over land or sea-ice      IMCLTQ5B.156    
!                                        fraction of gridbox (W/m2).       IMCLTQ5B.157    
     &,DTRDZ_RML(P_FIELD)          ! OUT dz for the rapidly mixing layer   IMCLTQ5B.158    
!                                      (needed in P245).                   IMCLTQ5B.159    
      INTEGER                                                              IMCLTQ5B.160    
     & NRML(P_FIELD)               ! IN The number of model layers         IMCLTQ5B.161    
!                                       in the unstable rapidly mixing     IMCLTQ5B.162    
!                                       layer. Zero if surface layer       IMCLTQ5B.163    
!                                       is stable.                         IMCLTQ5B.164    
                                                                           IMCLTQ5B.165    
!  External references :-                                                  IMCLTQ5B.166    
      EXTERNAL TIMER                                                       IMCLTQ5B.167    
                                                                           IMCLTQ5B.168    
!  Local and other symbolic constants :-                                   IMCLTQ5B.169    
*CALL C_EPSLON                                                             IMCLTQ5B.170    
*CALL C_G                                                                  IMCLTQ5B.171    
*CALL C_LHEAT                                                              IMCLTQ5B.172    
*CALL C_R_CP                                                               IMCLTQ5B.173    
*CALL C_SICEHC      ! Holds integer AI                                     IMCLTQ5B.174    
                                                                           IMCLTQ5B.175    
                                                                           IMCLTQ5B.176    
      REAL LS                                                              IMCLTQ5B.177    
      PARAMETER (                                                          IMCLTQ5B.178    
     & LS=LC+LF     ! Latent heat of sublimation (J per kg).               IMCLTQ5B.179    
     &)                                                                    IMCLTQ5B.180    
                                                                           IMCLTQ5B.181    
! Workspace :-                                                             IMCLTQ5B.182    
! 6*BL_LEVELS + 2 blocks of real workspace are required.                   IMCLTQ5B.183    
      REAL                                                                 IMCLTQ5B.184    
     & AQ_AM(P_FIELD,BL_LEVELS)    ! As AQ: "Q" elements of matrix in      IMCLTQ5B.185    
!                                     eqn P244.79 (modified during         IMCLTQ5B.186    
!                                     Gaussian elimination process).       IMCLTQ5B.187    
!                                     As AM: elements of matrix in eqn     IMCLTQ5B.188    
!                                     P244.80 (also get modified).         IMCLTQ5B.189    
     &,AQ_RML(P_FIELD)             ! Matrix element for humidity in        IMCLTQ5B.190    
!                                     rapidly mixing layer. Then briefly   IMCLTQ5B.191    
!                                     used for DELTAP on the UV grid.      IMCLTQ5B.192    
     &,AT_ATQ(P_FIELD,BL_LEVELS)   ! Elements in atmospheric T rows of     IMCLTQ5B.193    
!                                     matrix in eqn P244.79 (modified      IMCLTQ5B.194    
!                                     during Gaussian elimination).        IMCLTQ5B.195    
     &,AT_RML(P_FIELD)             ! Matrix element for temperature in     IMCLTQ5B.196    
!                                     rapidly mixing layer.                IMCLTQ5B.197    
     &,BPM(P_FIELD,N_TYPES)        ! Used in calculating elements of       IMCLTQ5B.198    
!                                     TL(1) and QW(1) rows of matrix.      IMCLTQ5B.199    
     &,BPM_GB(P_FIELD)             ! Used in calculating elements of       IMCLTQ5B.200    
!                                     TL(1) and QW(1) rows of matrix.      IMCLTQ5B.201    
     &,DELTAP(P_FIELD,BL_LEVELS)   ! -g.dt/dp for the rapidly mixing       IMCLTQ5B.202    
!                                      layer                               IMCLTQ5B.203    
     &,DELTAP_RML(P_FIELD)         ! -g.dt/dp for the rapidly mixing       IMCLTQ5B.204    
!                                      layer                               IMCLTQ5B.205    
     &,DELTA_QW(P_FIELD)           ! Increment in QW.                      IMCLTQ5B.206    
     &,DELTA_TL(P_FIELD)           ! Increment in TL.                      IMCLTQ5B.207    
     &,DQW_RML(P_FIELD)            ! Rapidly mixing layer increment        IMCLTQ5B.208    
!                                     to QW.                               IMCLTQ5B.209    
     &,DQW(P_FIELD,BL_LEVELS)      ! Delta QW elements of vector           IMCLTQ5B.210    
!                                     on RHS, then LHS, of eqn P244.79.    IMCLTQ5B.211    
     &,DTL(P_FIELD,BL_LEVELS)      ! Delta TL (for atmosphere)             IMCLTQ5B.212    
!                                     elements of vector on RHS, then      IMCLTQ5B.213    
!                                     LHS, of eqn P244.79.                 IMCLTQ5B.214    
     &,DTL_RML(P_FIELD)            ! Delta TL for rapidly mixing layer.    IMCLTQ5B.215    
     &,FQW_ICE(P_FIELD)            ! "Explicit" surface flux of QW for     IMCLTQ5B.216    
!                                     sea-ice fraction of gridsquare.      IMCLTQ5B.217    
     &,FTL_ICE(P_FIELD)            ! "Explicit" surface flux of TL for     IMCLTQ5B.218    
!                                     sea-ice fraction of gridsquare.      IMCLTQ5B.219    
     &,GAMMA_RKE_DQ(P_FIELD)       ! Gamma*rhoke*dq                        IMCLTQ5B.220    
     &,LAT_HEAT(P_FIELD)           ! Latent heat of evaporation for        IMCLTQ5B.221    
!                                     snow-free land or sublimation for    IMCLTQ5B.222    
!                                     snow-covered land.                   IMCLTQ5B.223    
     &,RHOKE_PM_GB(P_FIELD)        ! tile avg of RHOKE*RHOKPM              IMCLTQ5B.224    
                                                                           IMCLTQ5B.225    
!  Local scalars :-                                                        IMCLTQ5B.226    
      REAL                                                                 IMCLTQ5B.227    
     & CTQ      ! Matrix element in P244.??, for local increments to rml   IMCLTQ5B.228    
     &,CQ       ! Matrix element in "Q" row in eqn P244.79.                IMCLTQ5B.229    
     &,CQ_RML   ! As above but for rapidly mixing layer increment.         IMCLTQ5B.230    
     &,CT       ! Matrix element in "T" row in eqn P244.79.                IMCLTQ5B.231    
     &,CT_RML   ! As above but for rapidly mixing layer increment.         IMCLTQ5B.232    
     &,RBTQ     ! Reciprocal of B P244.??, for local increments to rml     IMCLTQ5B.233    
     &,RBQ      ! Reciprocal of BQ(') (eqns P244.98, 101, 104).            IMCLTQ5B.234    
     &,RBQ_RML  ! As above but for the rapidly mixing layer increment.     IMCLTQ5B.235    
     &,RBT      ! Reciprocal of BT' (eqns P244.107, 110, 113).             IMCLTQ5B.236    
     &,RBT_RML  ! As above but for the rapidly mixing layer increment.     IMCLTQ5B.237    
     &,temp1    ! temporary                                                IMCLTQ5B.238    
     &,temp2    ! temporary                                                IMCLTQ5B.239    
     &,temp3    ! temporary                                                ANG1F405.203    
                                                                           IMCLTQ5B.240    
      INTEGER                                                              IMCLTQ5B.241    
     & BLM1     ! BL_LEVELS minus 1.                                       IMCLTQ5B.242    
     &,NRMLP1   ! NRML plus 1.                                             IMCLTQ5B.243    
     &,I        ! Loop counter (horizontal field index).                   IMCLTQ5B.244    
     &,L        ! Loop counter (horizontal field index).                   IMCLTQ5B.245    
     &,ITILE    ! Loop counter (land surface tile index).                  IMCLTQ5B.246    
     &,K        ! Loop counter (vertical index).                           IMCLTQ5B.247    
                                                                           IMCLTQ5B.248    
!-----------------------------------------------------------------------   IMCLTQ5B.249    
!!  0.  Check that the scalars input to define the grid are consistent.    IMCLTQ5B.250    
!       See comments to routine SF_EXCH for details.                       IMCLTQ5B.251    
!-----------------------------------------------------------------------   IMCLTQ5B.252    
                                                                           IMCLTQ5B.253    
      IF (LTIMER) THEN                                                     IMCLTQ5B.254    
        CALL TIMER('IMCALTQ ',3)                                           IMCLTQ5B.255    
      ENDIF                                                                IMCLTQ5B.256    
                                                                           IMCLTQ5B.257    
      BLM1 = BL_LEVELS-1                                                   IMCLTQ5B.258    
                                                                           IMCLTQ5B.259    
!-----------------------------------------------------------------------   IMCLTQ5B.260    
!! (A) Calculations on P-grid.                                             IMCLTQ5B.261    
!-----------------------------------------------------------------------   IMCLTQ5B.262    
                                                                           IMCLTQ5B.263    
!-----------------------------------------------------------------------   IMCLTQ5B.264    
!! 1.  Calculate implicit T and Q increments due to local mixing within    IMCLTQ5B.265    
!!     the rapidly mixing layer (where it exists).                         IMCLTQ5B.266    
!!     The surface fluxes FTL(I,1), FQW(I,1) are used for calculating      IMCLTQ5B.267    
!!     the rapidly mixing layer (rml) increments but not here.             IMCLTQ5B.268    
!!     Therefore the matrix equation we must solve to find the implicit    IMCLTQ5B.269    
!!     T and Q increments due to local mixing within the rml does not      IMCLTQ5B.270    
!!     have a "surface" row and we can solve for the T and Q increments    IMCLTQ5B.271    
!!     for K = 1 to NRML simultaneously.                                   IMCLTQ5B.272    
!-----------------------------------------------------------------------   IMCLTQ5B.273    
                                                                           IMCLTQ5B.274    
      DO K = 1,BL_LEVELS                                                   IMCLTQ5B.275    
        DO I = P1,P1+P_POINTS-1                                            IMCLTQ5B.276    
          DELTAP(I,K) = -G * TIMESTEP/DTRDZ(I,K)                           IMCLTQ5B.277    
        ENDDO ! Loop over p-points                                         IMCLTQ5B.278    
      ENDDO ! Loop over bl-levels                                          IMCLTQ5B.279    
                                                                           IMCLTQ5B.280    
!-----------------------------------------------------------------------   IMCLTQ5B.281    
!! 1.1 Start 'upward sweep' with lowest model layer, which will be the     IMCLTQ5B.282    
!!     bottom of the rapidly mixing layer (rml) if it exists.              IMCLTQ5B.283    
!-----------------------------------------------------------------------   IMCLTQ5B.284    
                                                                           IMCLTQ5B.285    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.286    
                                                                           IMCLTQ5B.287    
        RHOKE_PM_GB(I) = 0.0  ! set to zero                                IMCLTQ5B.288    
        BPM_GB(I) = 0.0                                                    IMCLTQ5B.289    
                                                                           IMCLTQ5B.290    
        LAT_HEAT(I) = LC                                                   IMCLTQ5B.291    
        IF (LAND_MASK(I)) THEN                                             IMCLTQ5B.292    
          IF (LYING_SNOW(I).GT.0.0) LAT_HEAT(I) = LS                       IMCLTQ5B.293    
        ELSE                                                               IMCLTQ5B.294    
          IF (ICE_FRACT(I).GT.0.0) LAT_HEAT(I) = LS                        IMCLTQ5B.295    
        ENDIF                                                              IMCLTQ5B.296    
        IF (NRML(I) .GE. 2) THEN                                           IMCLTQ5B.297    
                                                                           IMCLTQ5B.298    
!  "Explicit" increments due to local mixing within the rml.               IMCLTQ5B.299    
!  P244.49/31 but surface flux used in rml increment calculations.         IMCLTQ5B.300    
                                                                           IMCLTQ5B.301    
! Add non-turbulent increments here                                        IMCLTQ5B.302    
          DQW(I,1) = -DTRDZ(I,1) * FQW(I,2) + DQW_NT(I,1)                  IMCLTQ5B.303    
                                                                           IMCLTQ5B.304    
          DTL(I,1) = -DTRDZ(I,1) * FTL(I,2) + DTL_NT(I,1)                  IMCLTQ5B.305    
                                                                           IMCLTQ5B.306    
!  Define matrix elements (CTQ always zero for this case).                 IMCLTQ5B.307    
                                                                           IMCLTQ5B.308    
          AT_ATQ(I,1) = -DTRDZ(I,1) * GAMMA(2)*RHOKH(I,2)*RDZ(I,2)         IMCLTQ5B.309    
!                                                        ! P244.28         IMCLTQ5B.310    
          RBTQ = 1.0 / ( 1.0 - AT_ATQ(I,1) ) ! Reciprocal of P244.110      IMCLTQ5B.311    
                                                                           IMCLTQ5B.312    
!  Now start Gaussian elimination                                          IMCLTQ5B.313    
                                                                           IMCLTQ5B.314    
          DQW(I,1) = RBTQ * DQW(I,1)                  ! P244.102           IMCLTQ5B.315    
          DTL(I,1) = RBTQ * DTL(I,1)                  ! P244.111           IMCLTQ5B.316    
                                                                           IMCLTQ5B.317    
          AT_ATQ(I,1) = RBTQ * AT_ATQ(I,1)                    ! P244.112   IMCLTQ5B.318    
                                                                           IMCLTQ5B.319    
!  Start calculating DELTAP_RML. Mid-level depths added in 2.2 below.      IMCLTQ5B.320    
                                                                           IMCLTQ5B.321    
          DELTAP_RML(I) = DELTAP(I,1)                                      IMCLTQ5B.322    
        ELSE ! No rapidly mixing layer calculations                        IMCLTQ5B.323    
          DTRDZ_RML(I) = 1.E30                                             IMCLTQ5B.324    
          DQW_RML(I) = 1.E30                                               IMCLTQ5B.325    
          DTL_RML(I) = 1.E30                                               IMCLTQ5B.326    
          AQ_RML(I) = 1.E30                                                IMCLTQ5B.327    
          AT_RML(I) = 1.E30                                                IMCLTQ5B.328    
        ENDIF                                                              IMCLTQ5B.329    
      ENDDO ! Loop over p_points                                           IMCLTQ5B.330    
                                                                           IMCLTQ5B.331    
!-----------------------------------------------------------------------   IMCLTQ5B.332    
!! 2.2 Continue upward sweep through middle of the rapidly mixing layer    IMCLTQ5B.333    
!!     (if it exists) and to its top. NB NRML is always < temp= BLM1.      IMCLTQ5B.334    
!-----------------------------------------------------------------------   IMCLTQ5B.335    
                                                                           IMCLTQ5B.336    
      DO K=2,BLM1                                                          IMCLTQ5B.337    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.338    
                                                                           IMCLTQ5B.339    
!   If in the top rapidly mixing layer then do not include flux at its     IMCLTQ5B.340    
!   top in the calculation ie FQW(I,NRML+1) and FTL(I,NRML+1) are not      IMCLTQ5B.341    
!   included here; they are taken account of in the non-local mixing       IMCLTQ5B.342    
!   through the "rapidly mixing layer".                                    IMCLTQ5B.343    
                                                                           IMCLTQ5B.344    
          IF ( K .EQ. NRML(I) ) THEN                                       IMCLTQ5B.345    
                                                                           IMCLTQ5B.346    
!   Add final DELTAP contribution to DELTAP_RML and then calculate         IMCLTQ5B.347    
!   DTRDZ_RML.  Lower level contributions added in 2.1 and below.          IMCLTQ5B.348    
                                                                           IMCLTQ5B.349    
            DELTAP_RML(I) = DELTAP_RML(I) + DELTAP(I,K)                    IMCLTQ5B.350    
            DTRDZ_RML(I) =-G * TIMESTEP / DELTAP_RML(I)                    IMCLTQ5B.351    
                                                                           IMCLTQ5B.352    
                                                                           IMCLTQ5B.353    
!  "Explicit" flux divergence across layer giving explicit                 IMCLTQ5B.354    
!  increment due to the local mixing at the top of rml.                    IMCLTQ5B.355    
                                                                           IMCLTQ5B.356    
            DQW(I,K) = DTRDZ(I,K) * FQW(I,K) + DQW_NT(I,K)                 IMCLTQ5B.357    
                                                                           IMCLTQ5B.358    
            DTL(I,K) = DTRDZ(I,K) * FTL(I,K) + DTL_NT(I,K)                 IMCLTQ5B.359    
                                                                           IMCLTQ5B.360    
                                                                           IMCLTQ5B.361    
!  Define matrix elements (A always zero for this case).                   IMCLTQ5B.362    
                                                                           IMCLTQ5B.363    
            CTQ = -DTRDZ(I,K) * GAMMA(k)*RHOKH(I,K)*RDZ(I,K)  ! P244.36    IMCLTQ5B.364    
            RBTQ = 1.0 / ( 1.0  - CTQ*( 1.0 + AT_ATQ(I,K-1) ) )            IMCLTQ5B.365    
!                                            ... Reciprocal of P244.113    IMCLTQ5B.366    
!  Now start Gaussian elimination                                          IMCLTQ5B.367    
                                                                           IMCLTQ5B.368    
            DQW(I,K) = RBTQ * ( DQW(I,K) - CTQ*DQW(I,K-1) )                IMCLTQ5B.369    
            DTL(I,K) = RBTQ * ( DTL(I,K) - CTQ*DTL(I,K-1) )                IMCLTQ5B.370    
          ELSEIF (K .LT. NRML(I)) THEN                                     IMCLTQ5B.371    
                                                                           IMCLTQ5B.372    
!  Add layer depths to form total rml depth.                               IMCLTQ5B.373    
                                                                           IMCLTQ5B.374    
            DELTAP_RML(I) = DELTAP_RML(I) + DELTAP(I,K)                    IMCLTQ5B.375    
                                                                           IMCLTQ5B.376    
!  "Explicit" flux divergence across layer giving explicit                 IMCLTQ5B.377    
!  increment due to the local mixing.P244.54/38                            IMCLTQ5B.378    
                                                                           IMCLTQ5B.379    
            DQW(I,K) = -DTRDZ(I,K) * ( FQW(I,K+1) - FQW(I,K) )             IMCLTQ5B.380    
     &                + DQW_NT(I,K)                                        IMCLTQ5B.381    
                                                                           IMCLTQ5B.382    
            DTL(I,K) = -DTRDZ(I,K) * ( FTL(I,K+1) - FTL(I,K) )             IMCLTQ5B.383    
     &                + DTL_NT(I,K)                                        IMCLTQ5B.384    
                                                                           IMCLTQ5B.385    
!  Define matrix elements.                                                 IMCLTQ5B.386    
                                                                           IMCLTQ5B.387    
            AT_ATQ(I,K) = -DTRDZ(I,K) *                                    IMCLTQ5B.388    
     &      GAMMA(K+1)*RHOKH(I,K+1)*RDZ(I,K+1)                             IMCLTQ5B.389    
            CTQ = -DTRDZ(I,K) * GAMMA(k)*RHOKH(I,K)*RDZ(I,K)! P244.36      IMCLTQ5B.390    
            RBTQ = 1.0 / ( 1.0  - AT_ATQ(I,K)                              IMCLTQ5B.391    
     &                          - CTQ * ( 1.0 + AT_ATQ(I,K-1) ) )          IMCLTQ5B.392    
!                                             ... Reciprocal of P244.113   IMCLTQ5B.393    
!  Now start Gaussian elimination                                          IMCLTQ5B.394    
                                                                           IMCLTQ5B.395    
            DQW(I,K) = RBTQ * ( DQW(I,K) - CTQ*DQW(I,K-1) )                IMCLTQ5B.396    
            DTL(I,K) = RBTQ * ( DTL(I,K) - CTQ*DTL(I,K-1) )                IMCLTQ5B.397    
            AT_ATQ(I,K) = RBTQ * AT_ATQ(I,K)                 ! P244.115    IMCLTQ5B.398    
          ENDIF                                                            IMCLTQ5B.399    
        ENDDO  !p_points                                                   IMCLTQ5B.400    
      ENDDO !blm1                                                          IMCLTQ5B.401    
                                                                           IMCLTQ5B.402    
!-----------------------------------------------------------------------   IMCLTQ5B.403    
!! 2.3 Downward sweep through matrix. Add implicit increments due to       IMCLTQ5B.404    
!!     local mixing within the rapidly mixing layer.  Update fluxes of     IMCLTQ5B.405    
!!     heat and moisture at the surface and the top-of-rml using           IMCLTQ5B.406    
!!     local mixing increments for layers 1 and NRML respectively.         IMCLTQ5B.407    
!-----------------------------------------------------------------------   IMCLTQ5B.408    
                                                                           IMCLTQ5B.409    
      DO K=BLM1,1,-1                                                       IMCLTQ5B.410    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.411    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRML(I))) THEN                IMCLTQ5B.412    
            QW(I,K) = QW(I,K) + DQW(I,K)                   ! P244.128      IMCLTQ5B.413    
            TL(I,K) = TL(I,K) + DTL(I,K)                   ! P244.127      IMCLTQ5B.414    
            FQW(I,K+1) = FQW(I,K+1)                                        IMCLTQ5B.415    
     &                 + GAMMA(K+1)*RHOKH(I,K+1)*RDZ(I,K+1)*DQW(I,K)       IMCLTQ5B.416    
            FTL(I,K+1) = FTL(I,K+1)                                        IMCLTQ5B.417    
     &                + GAMMA(K+1)*RHOKH(I,K+1)*RDZ(I,K+1)*DTL(I,K)        IMCLTQ5B.418    
          ELSEIF ((NRML(I) .GE. 2) .AND. (K .LT. NRML(I))) THEN            IMCLTQ5B.419    
            DQW(I,K) = DQW(I,K)                                            IMCLTQ5B.420    
     &                           - AT_ATQ(I,K)*DQW(I,K+1)  ! P244.???      IMCLTQ5B.421    
            DTL(I,K) = DTL(I,K)                                            IMCLTQ5B.422    
     &                           - AT_ATQ(I,K)*DTL(I,K+1)  ! P244.???      IMCLTQ5B.423    
            QW(I,K) = QW(I,K) + DQW(I,K)                   ! P244.128      IMCLTQ5B.424    
            TL(I,K) = TL(I,K) + DTL(I,K)                   ! P244.127      IMCLTQ5B.425    
          ENDIF                                                            IMCLTQ5B.426    
                                                                           IMCLTQ5B.427    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. 1)) THEN                      IMCLTQ5B.428    
                                                                           IMCLTQ5B.429    
            IF (LAND_MASK(I)) THEN                                         IMCLTQ5B.430    
                                                                           IMCLTQ5B.431    
              DO ITILE=1,N_TYPES                                           IMCLTQ5B.432    
                GAMMA_RKE_DQ(I) = GAMMA(1)*RHOKE(I,ITILE) *                IMCLTQ5B.433    
     &                     (DQW(I,1) - ALPHA1(I,ITILE)*DTL(I,1))           IMCLTQ5B.434    
                                                                           IMCLTQ5B.435    
                FTL_TILE(I,ITILE) = FTL_TILE(I,ITILE) +                    IMCLTQ5B.436    
     &              RHOKPM_TILE(I,ITILE)*(LAT_HEAT(I)*                     IMCLTQ5B.437    
     &              GAMMA_RKE_DQ(I)- GAMMA(1)*ASHTF(I)*DTL(I,1))           IMCLTQ5B.438    
                                                                           IMCLTQ5B.439    
                FQW_TILE(I,ITILE) = FQW_TILE(I,ITILE) -                    IMCLTQ5B.440    
     &                      RHOKPM_TILE(I,ITILE) * (CP*GAMMA_RKE_DQ(I) +   IMCLTQ5B.441    
     &                      GAMMA(1)*RESFT(I,ITILE)*ASHTF(I)*DQW(I,1))     IMCLTQ5B.442    
                EPOT_TILE(I,ITILE) = EPOT_TILE(I,ITILE) -                  ANG1F405.204    
     &                      RHOKPM_POT_TILE(I,ITILE) *                     ANG1F405.205    
     &                      (CP*GAMMA_RKE_DQ(I) +                          ANG1F405.206    
     &                      GAMMA(1)*ASHTF(I)*DQW(I,1))                    ANG1F405.207    
                                                                           IMCLTQ5B.443    
              ENDDO ! ITILE                                                IMCLTQ5B.444    
                                                                           IMCLTQ5B.445    
            ELSEIF (ICE_FRACT(I) .GT. 0.0) THEN                            IMCLTQ5B.446    
                                                                           IMCLTQ5B.447    
              GAMMA_RKE_DQ(I) = GAMMA(1)*RHOKE(I,1) *                      IMCLTQ5B.448    
     &                     (DQW(I,1) - ALPHA1(I,1)*DTL(I,1))               IMCLTQ5B.449    
                                                                           IMCLTQ5B.450    
              FQW_ICE(I) = FQW(I,1) - E_SEA(I) - RHOKPM_TILE(I,1) *        IMCLTQ5B.451    
     &             (CP*GAMMA_RKE_DQ(I) + GAMMA(1)*ASHTF(I)*DQW(I,1))       IMCLTQ5B.452    
              FTL_ICE(I) = FTL(I,1) - H_SEA(I)/CP + RHOKPM_TILE(I,1) *     IMCLTQ5B.453    
     &             (LS*GAMMA_RKE_DQ(I) - GAMMA(1)*ASHTF(I)*DTL(I,1))       IMCLTQ5B.454    
              E_SEA(I) = E_SEA(I) - (1.0 - ICE_FRACT(I)) *                 IMCLTQ5B.455    
     &                                  GAMMA(1)*RHOKH_1(I)*DQW(I,1)       IMCLTQ5B.456    
              H_SEA(I) = H_SEA(I) - (1.0 - ICE_FRACT(I)) * CP *            IMCLTQ5B.457    
     &                                  GAMMA(1)*RHOKH_1(I)*DTL(I,1)       IMCLTQ5B.458    
              FTL_TILE(I,1) = FTL_ICE(I) + H_SEA(I)/CP                     IMCLTQ5B.459    
              FQW_TILE(I,1) = FQW_ICE(I) + E_SEA(I)                        IMCLTQ5B.460    
              EPOT_TILE(I,1) = FQW_ICE(I) + E_SEA(I)                       ANG1F405.208    
                                                                           IMCLTQ5B.461    
            ELSE ! ordinary sea point                                      IMCLTQ5B.462    
              FTL_TILE(I,1) = FTL(I,1) -                                   IMCLTQ5B.463    
     &                            GAMMA(1)*RHOKH_1(I)*DTL(I,1)             IMCLTQ5B.464    
              FQW_TILE(I,1) = FQW(I,1) -                                   IMCLTQ5B.465    
     &                            GAMMA(1)*RHOKH_1(I)*DQW(I,1)             IMCLTQ5B.466    
              EPOT_TILE(I,1) = EPOT(I) -                                   ANG1F405.209    
     &                            GAMMA(1)*RHOKH_1(I)*DQW(I,1)             ANG1F405.210    
                                                                           ANG1F405.211    
                                                                           IMCLTQ5B.467    
            ENDIF ! land/ice/sea                                           IMCLTQ5B.468    
                                                                           IMCLTQ5B.469    
          ENDIF ! nrml >= 2 and k=1                                        IMCLTQ5B.470    
                                                                           IMCLTQ5B.471    
! Reset level 1 fluxes to zero before reaveraging tiles                    IMCLTQ5B.472    
                                                                           IMCLTQ5B.473    
        ENDDO  ! p_points                                                  IMCLTQ5B.474    
      ENDDO  !blm,-1,1                                                     IMCLTQ5B.475    
                                                                           IMCLTQ5B.476    
                                                                           IMCLTQ5B.477    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.478    
        IF(LAND_MASK(I)) THEN                                              IMCLTQ5B.479    
          FTL(I,1)=0.0                                                     IMCLTQ5B.480    
          FQW(I,1)=0.0                                                     IMCLTQ5B.481    
          EPOT(I)=0.0                                                      ANG1F405.212    
        ELSE                                                               IMCLTQ5B.482    
          FTL(I,1)=FTL_TILE(I,1)                                           IMCLTQ5B.483    
          FQW(I,1)=FQW_TILE(I,1)                                           IMCLTQ5B.484    
          RHOKE_PM_GB(I)=RHOKE(I,1)*RHOKPM_TILE(I,1)                       IMCLTQ5B.485    
        ENDIF                                                              IMCLTQ5B.486    
      ENDDO                                                                IMCLTQ5B.487    
                                                                           IMCLTQ5B.488    
                                                                           IMCLTQ5B.489    
      DO ITILE=1,N_TYPES                                                   IMCLTQ5B.490    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.491    
          IF(LAND_MASK(I)) THEN                                            IMCLTQ5B.492    
            FTL(I,1)=FTL(I,1)+FTL_TILE(I,ITILE)*TILE_FRAC(I,ITILE)         IMCLTQ5B.493    
            FQW(I,1)=FQW(I,1)+FQW_TILE(I,ITILE)*TILE_FRAC(I,ITILE)         IMCLTQ5B.494    
            EPOT(I)=EPOT(I)+EPOT_TILE(I,ITILE)*TILE_FRAC(I,ITILE)          ANG1F405.213    
            RHOKE_PM_GB(I) = RHOKE_PM_GB(I) + TILE_FRAC(I,ITILE)*          IMCLTQ5B.495    
     &                       RHOKE(I,ITILE)*RHOKPM_TILE(I,ITILE)           IMCLTQ5B.496    
                                                                           IMCLTQ5B.497    
          ELSE                                                             IMCLTQ5B.498    
            FTL_TILE(I,ITILE) = FTL(I,1)                                   IMCLTQ5B.499    
            FQW_TILE(I,ITILE) = FQW(I,1)                                   IMCLTQ5B.500    
            EPOT_TILE(I,ITILE) = EPOT(I)                                   ANG1F405.214    
          ENDIF                                                            IMCLTQ5B.501    
        ENDDO                                                              IMCLTQ5B.502    
      ENDDO                                                                IMCLTQ5B.503    
                                                                           IMCLTQ5B.504    
!-----------------------------------------------------------------------   IMCLTQ5B.505    
!! 3.  Calculate those matrix and vector elements on the LHS of eqn        IMCLTQ5B.506    
!!     P244.79 which are to do with implicit solution of the moisture      IMCLTQ5B.507    
!!     transport problem at the surface, above the rml (if it exists)      IMCLTQ5B.508    
!!     and between all levels if it does not.                              IMCLTQ5B.509    
!!     Begin with "upward sweep" through lower half of matrix).            IMCLTQ5B.510    
!-----------------------------------------------------------------------   IMCLTQ5B.511    
!! 3.1 Row of matrix applying to QW transport into top "boundary"          IMCLTQ5B.512    
!!     layer of model atmosphere.                                          IMCLTQ5B.513    
!-----------------------------------------------------------------------   IMCLTQ5B.514    
                                                                           IMCLTQ5B.515    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.516    
! Include non-turbulent increments.                                        IMCLTQ5B.517    
        DQW(I,BL_LEVELS) = DTRDZ(I,BL_LEVELS) * FQW(I,BL_LEVELS)           IMCLTQ5B.518    
     &                     +DQW_NT(I,BL_LEVELS)                            IMCLTQ5B.519    
!                                                            ... P244.58   IMCLTQ5B.520    
                                                                           IMCLTQ5B.521    
        AQ_AM(I,BL_LEVELS) = -DTRDZ(I,BL_LEVELS)               ! P244.56   IMCLTQ5B.522    
     &       * GAMMA(BL_LEVELS)*RHOKH(I,BL_LEVELS)*                        IMCLTQ5B.523    
     &          RDZ(I,BL_LEVELS)                                           IMCLTQ5B.524    
                                                                           IMCLTQ5B.525    
        RBQ = 1.0 / ( 1.0 - AQ_AM(I,BL_LEVELS) )    ! Reciprocal P244.98   IMCLTQ5B.526    
        DQW(I,BL_LEVELS) = RBQ * DQW(I,BL_LEVELS)   ! P244.99              IMCLTQ5B.527    
        AQ_AM(I,BL_LEVELS) = RBQ * AQ_AM(I,BL_LEVELS)         ! P244.100   IMCLTQ5B.528    
      ENDDO                                                                IMCLTQ5B.529    
                                                                           IMCLTQ5B.530    
!-----------------------------------------------------------------------   IMCLTQ5B.531    
!! 3.2 Rows of matrix applying to "middle of boundary layer" model         IMCLTQ5B.532    
!!     layers, i.e. all but the topmost and bottom layers.                 IMCLTQ5B.533    
!-----------------------------------------------------------------------   IMCLTQ5B.534    
                                                                           IMCLTQ5B.535    
      DO K=BLM1,2,-1                                                       IMCLTQ5B.536    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.537    
                                                                           IMCLTQ5B.538    
!  "Explicit" flux divergence across layer giving explicit QW increment.   IMCLTQ5B.539    
                                                                           IMCLTQ5B.540    
          IF ( K .GT. NRML(I) ) THEN                                       IMCLTQ5B.541    
            DQW(I,K) = -DTRDZ(I,K) * ( FQW(I,K+1) - FQW(I,K) )             IMCLTQ5B.542    
     &                + DQW_NT(I,K)                                        IMCLTQ5B.543    
!                                                            ... P244.54   IMCLTQ5B.544    
                                                                           IMCLTQ5B.545    
            CQ = -DTRDZ(I,K) * GAMMA(K+1)*RHOKH(I,K+1)*RDZ(I,K+1)          IMCLTQ5B.546    
!                                                              ! P244.52   IMCLTQ5B.547    
            AQ_AM(I,K) = -DTRDZ(I,K) * GAMMA(K)*RHOKH(I,K)*RDZ(I,K)        IMCLTQ5B.548    
!                                                              ! P244.51   IMCLTQ5B.549    
            RBQ = 1.0 / ( 1.0 - AQ_AM(I,K) - CQ*( 1.0 + AQ_AM(I,K+1) ) )   IMCLTQ5B.550    
!                       1                       2                    2 1   IMCLTQ5B.551    
!                                             ... reciprocal of P244.101   IMCLTQ5B.552    
                                                                           IMCLTQ5B.553    
! Now include non-turbulent increments.                                    IMCLTQ5B.554    
            DQW(I,K) = RBQ * (DQW(I,K) - CQ*DQW(I,K+1) )      ! P244.102   IMCLTQ5B.555    
                                                                           IMCLTQ5B.556    
            AQ_AM(I,K) = RBQ * AQ_AM(I,K)                     ! P244.103   IMCLTQ5B.557    
          ENDIF                                                            IMCLTQ5B.558    
        ENDDO ! P_points                                                   IMCLTQ5B.559    
      ENDDO !blm1,2,-1                                                     IMCLTQ5B.560    
                                                                           IMCLTQ5B.561    
!-----------------------------------------------------------------------   IMCLTQ5B.562    
!! 3.3 Bottom model layer QW row of matrix equation.                       IMCLTQ5B.563    
!-----------------------------------------------------------------------   IMCLTQ5B.564    
                                                                           IMCLTQ5B.565    
                                                                           IMCLTQ5B.566    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.567    
                                                                           IMCLTQ5B.568    
        DO ITILE=1,N_TYPES                                                 IMCLTQ5B.569    
          IF (LAND_MASK(I)) THEN                                           IMCLTQ5B.570    
            BPM(I,ITILE) = GAMMA(1)*ASHTF(I)*RHOKPM_TILE(I,ITILE)          IMCLTQ5B.571    
          ELSE                                                             IMCLTQ5B.572    
            BPM(I,ITILE) = (1. - ICE_FRACT(I))*GAMMA(1)*RHOKH_1(I) +       IMCLTQ5B.573    
     &                      GAMMA(1)*ASHTF(I)*RHOKPM_TILE(I,1)             IMCLTQ5B.574    
          ENDIF                                                            IMCLTQ5B.575    
                                                                           IMCLTQ5B.576    
          BPM_GB(I)=BPM_GB(I) + BPM(I,ITILE) * TILE_FRAC(I,ITILE)          IMCLTQ5B.577    
                                                                           IMCLTQ5B.578    
        ENDDO !n_types                                                     IMCLTQ5B.579    
                                                                           IMCLTQ5B.580    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMCLTQ5B.581    
                                                                           IMCLTQ5B.582    
!-----------------------------------------------------------------------   IMCLTQ5B.583    
!! 3.3.1 Start calculating rapidly mixing layer increments.                IMCLTQ5B.584    
!-----------------------------------------------------------------------   IMCLTQ5B.585    
                                                                           IMCLTQ5B.586    
          NRMLP1 = NRML(I) + 1                                             IMCLTQ5B.587    
                                                                           IMCLTQ5B.588    
!  "Explicit" QW increment for the rapidly mixing layer.                   IMCLTQ5B.589    
                                                                           IMCLTQ5B.590    
          DQW_RML(I) = -DTRDZ_RML(I) * ( FQW(I,NRMLP1) - FQW(I,1) )        IMCLTQ5B.591    
                                                                           IMCLTQ5B.592    
!  Define coefficients A,B,C, for implicit calculations.                   IMCLTQ5B.593    
                                                                           IMCLTQ5B.594    
          AQ_RML(I) = - DTRDZ_RML(I)*GAMMA(1)*CP*RHOKE_PM_GB(I)            IMCLTQ5B.595    
                                                                           IMCLTQ5B.596    
          CQ_RML = -DTRDZ_RML(I) * GAMMA(NRMLP1)                           IMCLTQ5B.597    
     &             *RHOKH(I,NRMLP1)*RDZ(I,NRMLP1)                          IMCLTQ5B.598    
                                                                           IMCLTQ5B.599    
          RBQ_RML=0.0                                                      IMCLTQ5B.600    
                                                                           IMCLTQ5B.601    
          IF (LAND_MASK(I)) THEN                                           IMCLTQ5B.602    
            DO ITILE=1,N_TYPES                                             IMCLTQ5B.603    
                                                                           IMCLTQ5B.604    
              RBQ_RML = RBQ_RML + TILE_FRAC(I,ITILE) *                     IMCLTQ5B.605    
     &              1./(1. - AQ_RML(I) - CQ_RML*(1. + AQ_AM(I,NRMLP1))     IMCLTQ5B.606    
     &               + DTRDZ_RML(I)*RESFT(I,ITILE)*BPM(I,ITILE) )          IMCLTQ5B.607    
                                                                           IMCLTQ5B.608    
            ENDDO ! n_types                                                IMCLTQ5B.609    
          ELSE                                                             IMCLTQ5B.610    
            RBQ_RML = 1./(1. - AQ_RML(I)                                   IMCLTQ5B.611    
     &                - CQ_RML*(1. + AQ_AM(I,NRMLP1))                      IMCLTQ5B.612    
     &                + DTRDZ_RML(I)*RESFT(I,1)*BPM_GB(I) )                IMCLTQ5B.613    
          ENDIF                                                            IMCLTQ5B.614    
                                                                           IMCLTQ5B.615    
          DQW_RML(I) = RBQ_RML * ( DQW_RML(I)                              IMCLTQ5B.616    
     &                                 - CQ_RML * DQW(I,NRMLP1) )          IMCLTQ5B.617    
          AQ_RML(I) = RBQ_RML * AQ_RML(I)                                  IMCLTQ5B.618    
        ELSE                                                               IMCLTQ5B.619    
                                                                           IMCLTQ5B.620    
!  "Explicit" increment for QW(1) when there is no rapidly mixing          IMCLTQ5B.621    
!  layer or when it is only one model layer in depth.                      IMCLTQ5B.622    
                                                                           IMCLTQ5B.623    
          DQW(I,1) = - DTRDZ(I,1)*(FQW(I,2) - FQW(I,1)) + DQW_NT(I,1)      IMCLTQ5B.624    
                                                                           IMCLTQ5B.625    
          AQ_AM(I,1) = - DTRDZ(I,1)*GAMMA(1)*CP*RHOKE_PM_GB(I)             IMCLTQ5B.626    
                                                                           IMCLTQ5B.627    
          CQ = - DTRDZ(I,1)*GAMMA(2)*RHOKH(I,2)*RDZ(I,2)                   IMCLTQ5B.628    
                                                                           IMCLTQ5B.629    
          RBQ=0.0                                                          IMCLTQ5B.630    
                                                                           IMCLTQ5B.631    
          DO ITILE=1,N_TYPES                                               IMCLTQ5B.632    
            IF (LAND_MASK(I)) THEN                                         IMCLTQ5B.633    
              RBQ = RBQ + TILE_FRAC(I,ITILE) *                             IMCLTQ5B.634    
     &                    1./( 1. - AQ_AM(I,1) - CQ*(1. + AQ_AM(I,2))      IMCLTQ5B.635    
     &                    + DTRDZ(I,1)*RESFT(I,ITILE)*BPM(I,ITILE) )       IMCLTQ5B.636    
            ELSEIF(ITILE .EQ. 1) THEN                                      IMCLTQ5B.637    
              RBQ =  1./( 1. - AQ_AM(I,1) - CQ*(1. + AQ_AM(I,2))           IMCLTQ5B.638    
     &                + DTRDZ(I,1)*RESFT(I,1)*BPM(I,1) )                   IMCLTQ5B.639    
            ENDIF                                                          IMCLTQ5B.640    
          ENDDO ! n_types                                                  IMCLTQ5B.641    
                                                                           IMCLTQ5B.642    
          DQW(I,1) = RBQ*(DQW(I,1)  - CQ*DQW(I,2))                         IMCLTQ5B.643    
          AQ_AM(I,1) = RBQ*AQ_AM(I,1)                                      IMCLTQ5B.644    
        ENDIF                                                              IMCLTQ5B.645    
      ENDDO                                                                IMCLTQ5B.646    
                                                                           IMCLTQ5B.647    
!-----------------------------------------------------------------------   IMCLTQ5B.648    
!! 4.  Calculate those matrix and vector elements on the LHS of eqn        IMCLTQ5B.649    
!!     P244.79 which are to do with implicit solution of the heat          IMCLTQ5B.650    
!!     transport problem (i.e. for ice/liquid                              IMCLTQ5B.651    
!!     water temperatures in atmospheric boundary layer), and begin the    IMCLTQ5B.652    
!!     solution algorithm (perform "upward sweep" through upper half of    IMCLTQ5B.653    
!!     matrix).                                                            IMCLTQ5B.654    
!-----------------------------------------------------------------------   IMCLTQ5B.655    
                                                                           IMCLTQ5B.656    
!-----------------------------------------------------------------------   IMCLTQ5B.657    
!! 4.2 Lowest atmospheric layer TL row of matrix.                          IMCLTQ5B.658    
!-----------------------------------------------------------------------   IMCLTQ5B.659    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.660    
      IF (NRML(I) .GE. 2) THEN                                             IMCLTQ5B.661    
       NRMLP1 = NRML(I) + 1                                                IMCLTQ5B.662    
                                                                           IMCLTQ5B.663    
!  "Explicit" rapidly mixing layer increment for TL.                       IMCLTQ5B.664    
                                                                           IMCLTQ5B.665    
          DTL_RML(I) = - DTRDZ_RML(I) * ( FTL(I,NRMLP1) - FTL(I,1) )       IMCLTQ5B.666    
          AT_RML(I) = - DTRDZ_RML(I)*GAMMA(NRMLP1)*                        IMCLTQ5B.667    
     &                  RHOKH(I,NRMLP1)*RDZ(I,NRMLP1)                      IMCLTQ5B.668    
                                                                           IMCLTQ5B.669    
          CT_RML = - DTRDZ_RML(I)*GAMMA(1)*RHOKE_PM_GB(I)*LAT_HEAT(I)      IMCLTQ5B.670    
                                                                           IMCLTQ5B.671    
          RBT_RML=0.0                                                      IMCLTQ5B.672    
          IF(LAND_MASK(I)) THEN                                            IMCLTQ5B.673    
            DO ITILE=1,N_TYPES                                             IMCLTQ5B.674    
                                                                           IMCLTQ5B.675    
              RBT_RML = RBT_RML + TILE_FRAC(I,ITILE) *                     IMCLTQ5B.676    
     &                1./(1. - AT_RML(I) - ALPHA1(I,ITILE)*CT_RML*         IMCLTQ5B.677    
     &                 (1.+AQ_RML(I)) + DTRDZ_RML(I)*BPM(I,ITILE) )        IMCLTQ5B.678    
            ENDDO                                                          IMCLTQ5B.679    
          ELSE                                                             IMCLTQ5B.680    
              RBT_RML = 1./(1. - AT_RML(I) - ALPHA1(I,1)*CT_RML*           IMCLTQ5B.681    
     &                 (1.+AQ_RML(I)) + DTRDZ_RML(I)*BPM(I,1) )            IMCLTQ5B.682    
          ENDIF                                                            IMCLTQ5B.683    
                                                                           IMCLTQ5B.684    
          DTL_RML(I) = RBT_RML*(DTL_RML(I) - CT_RML*DQW_RML(I))            IMCLTQ5B.685    
          AT_RML(I) = RBT_RML * AT_RML(I)                                  IMCLTQ5B.686    
        ELSE                                                               IMCLTQ5B.687    
                                                                           IMCLTQ5B.688    
!  "Explicit" increment to TL(1) when there is no rapidly mixing layer     IMCLTQ5B.689    
!  or it does not extend beyond the bottom model layer.                    IMCLTQ5B.690    
                                                                           IMCLTQ5B.691    
          DTL(I,1) = - DTRDZ(I,1)*(FTL(I,2) - FTL(I,1))                    IMCLTQ5B.692    
     &               + DTL_NT(I,1)                                         IMCLTQ5B.693    
          CT = - DTRDZ(I,1)*GAMMA(1)*RHOKE_PM_GB(I)*LAT_HEAT(I)            IMCLTQ5B.694    
                                                                           IMCLTQ5B.695    
          AT_ATQ(I,1) = - DTRDZ(I,1)*GAMMA(2)*RHOKH(I,2)*RDZ(I,2)          IMCLTQ5B.696    
                                                                           IMCLTQ5B.697    
          RBT=0.0                                                          IMCLTQ5B.698    
                                                                           IMCLTQ5B.699    
          DO ITILE=1,N_TYPES                                               IMCLTQ5B.700    
                                                                           IMCLTQ5B.701    
            IF(LAND_MASK(I)) THEN                                          IMCLTQ5B.702    
              RBT = RBT + TILE_FRAC(I,ITILE) *                             IMCLTQ5B.703    
     &                1./( 1. - AT_ATQ(I,1) - ALPHA1(I,ITILE)*CT*          IMCLTQ5B.704    
     &                (1. + AQ_AM(I,1)) + DTRDZ(I,1)*BPM(I,ITILE) )        IMCLTQ5B.705    
            ELSEIF(ITILE .EQ.1) THEN                                       IMCLTQ5B.706    
              RBT = 1./( 1. - AT_ATQ(I,1) - ALPHA1(I,1)*CT*                IMCLTQ5B.707    
     &                (1. + AQ_AM(I,1)) + DTRDZ(I,1)*BPM(I,1) )            IMCLTQ5B.708    
            ENDIF                                                          IMCLTQ5B.709    
          ENDDO                                                            IMCLTQ5B.710    
                                                                           IMCLTQ5B.711    
          DTL(I,1) = RBT*(DTL(I,1) - CT*DQW(I,1))                          IMCLTQ5B.712    
          AT_ATQ(I,1) = RBT*AT_ATQ(I,1)                                    IMCLTQ5B.713    
        ENDIF                                                              IMCLTQ5B.714    
      ENDDO                                                                IMCLTQ5B.715    
!-----------------------------------------------------------------------   IMCLTQ5B.716    
!! 4.3 Rows of matrix applying to TL transport into model layers in the    IMCLTQ5B.717    
!!     "middle" of the "boundary" layer, i.e. all but the bottom layer     IMCLTQ5B.718    
!!     and the top "boundary" layer.                                       IMCLTQ5B.719    
!-----------------------------------------------------------------------   IMCLTQ5B.720    
      DO K=2,BLM1                                                          IMCLTQ5B.721    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.722    
                                                                           IMCLTQ5B.723    
!   "Explicit" flux divergence across layer giving explicit TL increment   IMCLTQ5B.724    
!   due to mixing above rml if it exists or for all levels if it does      IMCLTQ5B.725    
!   not.                                                                   IMCLTQ5B.726    
                                                                           IMCLTQ5B.727    
          NRMLP1 = NRML(I) + 1                                             IMCLTQ5B.728    
          IF (K .GT. NRML(I)) THEN                                         IMCLTQ5B.729    
            DTL(I,K) = -DTRDZ(I,K) * ( FTL(I,K+1) - FTL(I,K) )             IMCLTQ5B.730    
     &                               +DTL_NT(I,K)                          IMCLTQ5B.731    
!                                                            ... P244.38   IMCLTQ5B.732    
                                                                           IMCLTQ5B.733    
            AT_ATQ(I,K) = -DTRDZ(I,K)*GAMMA(K+1)*                          IMCLTQ5B.734    
     &      RHOKH(I,K+1)*RDZ(I,K+1)                            ! P244.35   IMCLTQ5B.735    
            CT = -DTRDZ(I,K) * GAMMA(K)*RHOKH(I,K)*RDZ(I,K)  ! P244.36     IMCLTQ5B.736    
            IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRMLP1)) THEN               IMCLTQ5B.737    
              RBT = 1.0 / ( 1.0 - AT_ATQ(I,K) - CT*( 1.0 + AT_RML(I) ) )   IMCLTQ5B.738    
              DTL(I,K) = RBT * ( DTL(I,K) - CT*DTL_RML(I) )                IMCLTQ5B.739    
            ELSE                                                           IMCLTQ5B.740    
              RBT = 1.0 / ( 1.0 - AT_ATQ(I,K)                              IMCLTQ5B.741    
     &                          - CT*( 1.0 + AT_ATQ(I,K-1) ) )             IMCLTQ5B.742    
!                         1          2                     2 1             IMCLTQ5B.743    
!                                             ... Reciprocal of P244.113   IMCLTQ5B.744    
                                                                           IMCLTQ5B.745    
              DTL(I,K) = RBT * ( DTL(I,K) - CT*DTL(I,K-1) )                IMCLTQ5B.746    
!                                                           ... P244.114   IMCLTQ5B.747    
            ENDIF                                                          IMCLTQ5B.748    
            AT_ATQ(I,K) = RBT * AT_ATQ(I,K)                   ! P244.115   IMCLTQ5B.749    
          ENDIF                                                            IMCLTQ5B.750    
        ENDDO                                                              IMCLTQ5B.751    
      ENDDO                                                                IMCLTQ5B.752    
!-----------------------------------------------------------------------   IMCLTQ5B.753    
!! 4.4 Top "boundary" layer TL row of matrix.  TL for this layer can       IMCLTQ5B.754    
!!     then be, and is, updated.                                           IMCLTQ5B.755    
!-----------------------------------------------------------------------   IMCLTQ5B.756    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.757    
        DTL(I,BL_LEVELS) = DTRDZ(I,BL_LEVELS) * FTL(I,BL_LEVELS)           IMCLTQ5B.758    
     &                   + DTL_NT(I,BL_LEVELS)                             IMCLTQ5B.759    
!                                                            ... P244.42   IMCLTQ5B.760    
        CT = -DTRDZ(I,BL_LEVELS) * GAMMA(BL_LEVELS)*                       IMCLTQ5B.761    
     &        RHOKH(I,BL_LEVELS)*RDZ(I,BL_LEVELS)                          IMCLTQ5B.762    
                                                                           IMCLTQ5B.763    
        IF (NRML(I) .EQ. BLM1) THEN                                        IMCLTQ5B.764    
          RBT = 1.0 / ( 1.0 - CT*( 1.0 + AT_RML(I) ) )                     IMCLTQ5B.765    
          DTL(I,BL_LEVELS) = RBT * ( DTL(I,BL_LEVELS)                      IMCLTQ5B.766    
     &                                  - CT*DTL_RML(I) )                  IMCLTQ5B.767    
        ELSE                                                               IMCLTQ5B.768    
         RBT = 1.0 / ( 1.0 - CT*( 1.0 + AT_ATQ(I,BLM1) ) )                 IMCLTQ5B.769    
!                                             ... Reciprocal of P244.116   IMCLTQ5B.770    
                                                                           IMCLTQ5B.771    
          DTL(I,BL_LEVELS) = RBT * ( DTL(I,BL_LEVELS)                      IMCLTQ5B.772    
     &              - CT*DTL(I,BLM1) )   ! P244.117                        IMCLTQ5B.773    
        ENDIF                                                              IMCLTQ5B.774    
                                                                           IMCLTQ5B.775    
        TL(I,BL_LEVELS) = TL(I,BL_LEVELS) + DTL(I,BL_LEVELS) ! P244.127    IMCLTQ5B.776    
                                                                           IMCLTQ5B.777    
      ENDDO                                                                IMCLTQ5B.778    
                                                                           IMCLTQ5B.779    
!-----------------------------------------------------------------------   IMCLTQ5B.780    
!! 5.  "Downward sweep" through whole matrix.  TL, QW and                  IMCLTQ5B.781    
!!     updated when the final implicit increments have been calculated.    IMCLTQ5B.782    
!-----------------------------------------------------------------------   IMCLTQ5B.783    
!! 5.1 Remaining TL rows of matrix and add implicit increments above       IMCLTQ5B.784    
!!     the rml or at all levels if it is less than two layers thick.       IMCLTQ5B.785    
!-----------------------------------------------------------------------   IMCLTQ5B.786    
                                                                           IMCLTQ5B.787    
      DO K=BLM1,1,-1                                                       IMCLTQ5B.788    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.789    
          IF ( (K .GT. NRML(I)) .OR. (NRML(I) .LT. 2) ) THEN               IMCLTQ5B.790    
            DTL(I,K) = DTL(I,K) - AT_ATQ(I,K)*DTL(I,K+1)                   IMCLTQ5B.791    
                                                              ! P244.118   IMCLTQ5B.792    
            TL(I,K) = TL(I,K) + DTL(I,K)                   ! P244.127      IMCLTQ5B.793    
          ENDIF                                                            IMCLTQ5B.794    
        ENDDO                                                              IMCLTQ5B.795    
      ENDDO                                                                IMCLTQ5B.796    
                                                                           IMCLTQ5B.797    
!-----------------------------------------------------------------------   IMCLTQ5B.798    
!! 5.2 Rapidly mixing layer increments                                     IMCLTQ5B.799    
!-----------------------------------------------------------------------   IMCLTQ5B.800    
                                                                           IMCLTQ5B.801    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.802    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMCLTQ5B.803    
          NRMLP1 = NRML(I) + 1                                             IMCLTQ5B.804    
          DTL_RML(I) = DTL_RML(I) - AT_RML(I) * DTL(I,NRMLP1)              IMCLTQ5B.805    
          DQW_RML(I) = DQW_RML(I)                                          IMCLTQ5B.806    
     &                      - AQ_RML(I) * ALPHA1_GB(I) * DTL_RML(I)        IMCLTQ5B.807    
          TL(I,1) = TL(I,1) + DTL_RML(I)                                   IMCLTQ5B.808    
          QW(I,1) = QW(I,1) + DQW_RML(I)                                   IMCLTQ5B.809    
        ELSE                                                               IMCLTQ5B.810    
                                                                           IMCLTQ5B.811    
!-----------------------------------------------------------------------   IMCLTQ5B.812    
!! 5.3 Lowest-level QW row of matrix; local mixing where there is no rml   IMCLTQ5B.813    
!-----------------------------------------------------------------------   IMCLTQ5B.814    
                                                                           IMCLTQ5B.815    
          DQW(I,1) = DQW(I,1) - ALPHA1_GB(I)*AQ_AM(I,1)*DTL(I,1)           IMCLTQ5B.816    
          QW(I,1) = QW(I,1) + DQW(I,1)     ! P244.128                      IMCLTQ5B.817    
        ENDIF                                                              IMCLTQ5B.818    
      ENDDO                                                                IMCLTQ5B.819    
                                                                           IMCLTQ5B.820    
!-----------------------------------------------------------------------   IMCLTQ5B.821    
!! 5.4 Remaining QW rows of matrix + updating of QW's.                     IMCLTQ5B.822    
!!     Add implicit increments due to mixing above rml or at all levels    IMCLTQ5B.823    
!!     if there it does not exist.                                         IMCLTQ5B.824    
!-----------------------------------------------------------------------   IMCLTQ5B.825    
                                                                           IMCLTQ5B.826    
      DO K=2,BL_LEVELS                                                     IMCLTQ5B.827    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.828    
          IF (K .GT. NRML(I)) THEN                                         IMCLTQ5B.829    
                                                                           IMCLTQ5B.830    
            IF ((NRML(I) .GE. 2) .AND. (K-1 .EQ. NRML(I))) THEN            IMCLTQ5B.831    
              DQW(I,K) = DQW(I,K) - AQ_AM(I,K)*DQW_RML(I)                  IMCLTQ5B.832    
            ELSE                                                           IMCLTQ5B.833    
              DQW(I,K) = DQW(I,K) - AQ_AM(I,K)*DQW(I,K-1) ! P244.121       IMCLTQ5B.834    
            ENDIF                                                          IMCLTQ5B.835    
                                                                           IMCLTQ5B.836    
            QW(I,K) = QW(I,K) + DQW(I,K)                  ! P244.128       IMCLTQ5B.837    
          ELSE                                                             IMCLTQ5B.838    
                                                                           IMCLTQ5B.839    
!  Add the increments due to rapid mixing if in the rapidly mixing layer   IMCLTQ5B.840    
                                                                           IMCLTQ5B.841    
            TL(I,K) = TL(I,K) + DTL_RML(I)                                 IMCLTQ5B.842    
            QW(I,K) = QW(I,K) + DQW_RML(I)                                 IMCLTQ5B.843    
          ENDIF                                                            IMCLTQ5B.844    
                                                                           IMCLTQ5B.845    
        ENDDO !p_points                                                    IMCLTQ5B.846    
      ENDDO !bl_levels                                                     IMCLTQ5B.847    
                                                                           IMCLTQ5B.848    
!-----------------------------------------------------------------------   IMCLTQ5B.849    
!! 6.  Calculate final implicit fluxes of heat and moisture.               IMCLTQ5B.850    
!-----------------------------------------------------------------------   IMCLTQ5B.851    
!! 6.1 Surface fluxes for the 3 surface types: land, sea-ice, ordinary     IMCLTQ5B.852    
!!     sea. Pass out the value of RHOKH(,1) in GAMMA*RHOKH_1 to satisfy    IMCLTQ5B.853    
!!     STASH GAMMA*RHOKH_RDZ will contain precisely that on output.        IMCLTQ5B.854    
!-----------------------------------------------------------------------   IMCLTQ5B.855    
                                                                           IMCLTQ5B.856    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ5B.857    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMCLTQ5B.858    
           DELTA_TL(I) =  DTL_RML(I)                                       IMCLTQ5B.859    
           DELTA_QW(I) = DQW_RML(I)                                        IMCLTQ5B.860    
        ELSE                                                               IMCLTQ5B.861    
           DELTA_TL(I) = DTL(I,1)                                          IMCLTQ5B.862    
           DELTA_QW(I) = DQW(I,1)                                          IMCLTQ5B.863    
        ENDIF                                                              IMCLTQ5B.864    
                                                                           IMCLTQ5B.865    
        GAMMA_RKE_DQ(I) = GAMMA(1)*RHOKE(I,1)*                             IMCLTQ5B.866    
     &    (DELTA_QW(I) - ALPHA1(I,1)*DELTA_TL(I))                          IMCLTQ5B.867    
      ENDDO !p_points                                                      IMCLTQ5B.868    
                                                                           IMCLTQ5B.869    
                                                                           IMCLTQ5B.870    
      DO ITILE=1,N_TYPES                                                   IMCLTQ5B.871    
                                                                           IMCLTQ5B.872    
CDIR$ IVDEP                                                                IMCLTQ5B.878    
! Fujitsu vectorization directive                                          GRB0F405.359    
!OCL NOVREC                                                                GRB0F405.360    
         DO L=LAND1,LAND1+LAND_PTS-1                                       IMCLTQ5B.879    
           I = LAND_INDEX(L)                                               IMCLTQ5B.880    
                                                                           IMCLTQ5B.882    
! overwrite gamma_rke_dq for land points only                              IMCLTQ5B.883    
            GAMMA_RKE_DQ(I) = GAMMA(1)*RHOKE(I,ITILE)*                     IMCLTQ5B.884    
     &                  (DELTA_QW(I) - ALPHA1(I,ITILE)*DELTA_TL(I))        IMCLTQ5B.885    
                                                                           IMCLTQ5B.886    
            temp1= RHOKPM_TILE(I,ITILE)*( LAT_HEAT(I)*GAMMA_RKE_DQ(I) -    IMCLTQ5B.887    
     &                                   GAMMA(1)*ASHTF(I)*DELTA_TL(I) )   IMCLTQ5B.888    
                                                                           IMCLTQ5B.889    
            FTL_TILE(I,ITILE) = FTL_TILE(I,ITILE) + temp1                  IMCLTQ5B.890    
            FTL(I,1) = FTL(I,1) + temp1 * TILE_FRAC(I,ITILE)               IMCLTQ5B.891    
                                                                           IMCLTQ5B.892    
                                                                           IMCLTQ5B.893    
            temp2= RHOKPM_TILE(I,ITILE)*( CP*GAMMA_RKE_DQ(I) +             IMCLTQ5B.894    
     &             GAMMA(1)*RESFT(I,ITILE)*ASHTF(I)*DELTA_QW(I) )          IMCLTQ5B.895    
                                                                           IMCLTQ5B.896    
            FQW_TILE(I,ITILE) = FQW_TILE(I,ITILE) - temp2                  IMCLTQ5B.897    
            FQW(I,1) = FQW(I,1) - temp2 * TILE_FRAC(I,ITILE)               IMCLTQ5B.898    
            temp3= RHOKPM_TILE(I,ITILE)*( CP*GAMMA_RKE_DQ(I) +             ANG1F405.215    
     &             GAMMA(1)*ASHTF(I)*DELTA_QW(I) )                         ANG1F405.216    
                                                                           ANG1F405.217    
            EPOT_TILE(I,ITILE) = EPOT_TILE(I,ITILE) - temp3                ANG1F405.218    
            EPOT(I) = EPOT(I) - temp3 * TILE_FRAC(I,ITILE)                 ANG1F405.219    
                                                                           IMCLTQ5B.899    
            SURF_HT_FLUX(I,ITILE) = RADNET_C(I,ITILE) -                    APA1F405.489    
     &         LAT_HEAT(I)*FQW_TILE(I,ITILE) - CP*FTL_TILE(I,ITILE)        IMCLTQ5B.901    
                                                                           IMCLTQ5B.902    
                                                                           IMCLTQ5B.903    
                                                                           IMCLTQ5B.904    
            IF(ITILE .EQ. 1) THEN                                          IMCLTQ5B.905    
              FTL_ICE(I) = 0.0                                             IMCLTQ5B.906    
              FQW_ICE(I) = 0.0                                             IMCLTQ5B.907    
            ENDIF                                                          IMCLTQ5B.908    
                                                                           IMCLTQ5B.909    
          ENDDO ! land points                                              IMCLTQ5B.913    
        ENDDO ! End of Tile loop                                           IMCLTQ5B.914    
                                                                           IMCLTQ5B.915    
                                                                           IMCLTQ5B.916    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.917    
                                                                           IMCLTQ5B.918    
        IF (.NOT. LAND_MASK(I) .AND. ICE_FRACT(I).GT.0.0) THEN             IMCLTQ5B.919    
          FQW_ICE(I) = FQW(I,1) - E_SEA(I) - RHOKPM_TILE(I,1) *            IMCLTQ5B.920    
     &            (CP*GAMMA_RKE_DQ(I) + GAMMA(1)*ASHTF(I)*DELTA_QW(I))     IMCLTQ5B.921    
          FTL_ICE(I) =  FTL(I,1) - H_SEA(I)/CP + RHOKPM_TILE(I,1) *        IMCLTQ5B.922    
     &            (LS*GAMMA_RKE_DQ(I) - GAMMA(1)*ASHTF(I)*DELTA_TL(I))     IMCLTQ5B.923    
          E_SEA(I) = E_SEA(I) - (1.0 - ICE_FRACT(I)) *                     IMCLTQ5B.924    
     &                               GAMMA(1)*RHOKE(I,1)*DELTA_QW(I)       IMCLTQ5B.925    
          H_SEA(I) = H_SEA(I) - (1.0 - ICE_FRACT(I)) * CP *                IMCLTQ5B.926    
     &                               GAMMA(1)*RHOKH_1(I)*DELTA_TL(I)       IMCLTQ5B.927    
          FTL(I,1) = FTL_ICE(I) + H_SEA(I)/CP                              IMCLTQ5B.928    
          FQW(I,1) = FQW_ICE(I) + E_SEA(I)                                 IMCLTQ5B.929    
                                                                           IMCLTQ5B.930    
          FTL_TILE(I,1)=FTL(I,1)                                           IMCLTQ5B.931    
          FQW_TILE(I,1)=FQW(I,1)                                           IMCLTQ5B.932    
          EPOT(I) = FQW_ICE(I) + E_SEA(I)                                  ANG1F405.220    
          EPOT_TILE(I,1)=EPOT(I)                                           ANG1F405.221    
                                                                           ANG1F405.222    
                                                                           IMCLTQ5B.933    
          SURF_HT_FLUX(I,1) = RADNET_C(I,1) - LS*FQW_ICE(I) -              APA1F405.490    
     &                                    CP*FTL_ICE(I)                    IMCLTQ5B.935    
                                                                           IMCLTQ5B.936    
! ordinary sea point                                                       IMCLTQ5B.937    
        ELSEIF(.NOT. LAND_MASK(I) .AND. ICE_FRACT(I).EQ.0.0) THEN          IMCLTQ5B.938    
                                                                           IMCLTQ5B.939    
          FTL(I,1) = FTL(I,1) - GAMMA(1)*RHOKH_1(I)*DELTA_TL(I)            IMCLTQ5B.940    
          FQW(I,1) = FQW(I,1) - GAMMA(1)*RHOKH_1(I)*DELTA_QW(I)            IMCLTQ5B.941    
                                                                           IMCLTQ5B.942    
          FTL_TILE(I,1)=FTL(I,1)                                           IMCLTQ5B.943    
          FQW_TILE(I,1)=FQW(I,1)                                           IMCLTQ5B.944    
          EPOT(I) = EPOT(I) - GAMMA(1)*RHOKH_1(I)*DELTA_QW(I)              ANG1F405.223    
          EPOT_TILE(I,1)=EPOT(I)                                           ANG1F405.224    
                                                                           IMCLTQ5B.945    
          E_SEA(I) = FQW(I,1)                                              IMCLTQ5B.946    
          H_SEA(I) = FTL(I,1)*CP                                           IMCLTQ5B.947    
                                                                           IMCLTQ5B.948    
          FTL_ICE(I) = 0.0                                                 IMCLTQ5B.949    
          FQW_ICE(I) = 0.0                                                 IMCLTQ5B.950    
                                                                           ARN1F404.14     
          SURF_HT_FLUX(I,1) = RADNET_C(I,1) - LC*E_SEA(I) - H_SEA(I)       APA1F405.491    
                                                                           IMCLTQ5B.951    
        ENDIF                                                              IMCLTQ5B.952    
      ENDDO                                                                IMCLTQ5B.953    
                                                                           IMCLTQ5B.954    
C-----------------------------------------------------------------------   ANG1F405.225    
CL  Ensures that the potential evaporation rate equals the evaporation     ANG1F405.226    
CL  rate, when there is net condensation. Otherwise E/Ep could be          ANG1F405.227    
CL  <0 or >1 when the implicit adjustment is added.                        ANG1F405.228    
C-----------------------------------------------------------------------   ANG1F405.229    
      DO I=P1,P1+P_POINTS-1                                                ANG1F405.230    
        IF(FQW(I,1).LT.0.0)THEN                                            ANG1F405.231    
          EPOT(I)=FQW(I,1)                                                 ANG1F405.232    
        ENDIF                                                              ANG1F405.233    
      ENDDO                                                                ANG1F405.234    
!-----------------------------------------------------------------------   IMCLTQ5B.955    
!! 6.2 Fluxes at layer interfaces above the surface.                       IMCLTQ5B.956    
!-----------------------------------------------------------------------   IMCLTQ5B.957    
      DO K=2,BL_LEVELS                                                     IMCLTQ5B.958    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ5B.959    
                                                                           IMCLTQ5B.960    
!  Calculate and store fluxes due to local mixing.                         IMCLTQ5B.961    
!  FTL(local mixing) stored in array AT,                                   IMCLTQ5B.962    
!  FQW(local mixing) stored in array AQ_AM.                                IMCLTQ5B.963    
                                                                           IMCLTQ5B.964    
          NRMLP1 = NRML(I) + 1                                             IMCLTQ5B.965    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRMLP1)) THEN                 IMCLTQ5B.966    
            AT_ATQ(I,K) = FTL(I,K) - GAMMA(K)*RHOKH(I,K)*RDZ(I,K)          IMCLTQ5B.967    
     &                              * ( DTL(I,K) - DTL_RML(I) )            IMCLTQ5B.968    
            AQ_AM(I,K) = FQW(I,K) - GAMMA(K)*RHOKH(I,K)*RDZ(I,K)           IMCLTQ5B.969    
     &                              * ( DQW(I,K) - DQW_RML(I) )            IMCLTQ5B.970    
          ELSE                                                             IMCLTQ5B.971    
            AT_ATQ(I,K) = FTL(I,K) - GAMMA(K)*RHOKH(I,K)*RDZ(I,K)          IMCLTQ5B.972    
     &                              * ( DTL(I,K) - DTL(I,K-1) )            IMCLTQ5B.973    
            AQ_AM(I,K) = FQW(I,K) - GAMMA(K)*RHOKH(I,K)*RDZ(I,K)           IMCLTQ5B.974    
     &                              * ( DQW(I,K) - DQW(I,K-1) )            IMCLTQ5B.975    
          ENDIF                                                            IMCLTQ5B.976    
                                                                           IMCLTQ5B.977    
!  Now calculate the implicit fluxes including both local mixing and       IMCLTQ5B.978    
!  if appropriate also the fluxes due to rapid mixing through layers.      IMCLTQ5B.979    
                                                                           IMCLTQ5B.980    
          IF ( K .EQ. 2 ) THEN                                             IMCLTQ5B.981    
            IF ( NRML(I) .GE. 2 ) THEN                                     IMCLTQ5B.982    
              FTL(I,K) = AT_ATQ(I,K)                                       IMCLTQ5B.983    
     &                    + FTL(I,K-1) - DTL_RML(I) / DTRDZ(I,K-1)         IMCLTQ5B.984    
              FQW(I,K) = AQ_AM(I,K)                                        IMCLTQ5B.985    
     &                    + FQW(I,K-1) - DQW_RML(I) / DTRDZ(I,K-1)         IMCLTQ5B.986    
            ELSE                                                           IMCLTQ5B.987    
              FTL(I,K) = AT_ATQ(I,K)                                       IMCLTQ5B.988    
              FQW(I,K) = AQ_AM(I,K)                                        IMCLTQ5B.989    
            ENDIF                                                          IMCLTQ5B.990    
          ELSEIF ( K .LE. NRML(I) ) THEN                                   IMCLTQ5B.991    
            FTL(I,K) = AT_ATQ(I,K) - AT_ATQ(I,K-1)                         IMCLTQ5B.992    
     &                    + FTL(I,K-1) - DTL_RML(I) / DTRDZ(I,K-1)         IMCLTQ5B.993    
            FQW(I,K) = AQ_AM(I,K) - AQ_AM(I,K-1)                           IMCLTQ5B.994    
     &                    + FQW(I,K-1) - DQW_RML(I) / DTRDZ(I,K-1)         IMCLTQ5B.995    
          ELSE                                                             IMCLTQ5B.996    
            FTL(I,K) = AT_ATQ(I,K)                                         IMCLTQ5B.997    
            FQW(I,K) = AQ_AM(I,K)                                          IMCLTQ5B.998    
          ENDIF                                                            IMCLTQ5B.999    
        ENDDO ! p_points                                                   IMCLTQ5B.1000   
      ENDDO ! bl_levels                                                    IMCLTQ5B.1001   
                                                                           IMCLTQ5B.1002   
      IF (LTIMER) THEN                                                     IMCLTQ5B.1003   
        CALL TIMER('IMCALTQ ',4)                                           IMCLTQ5B.1004   
      ENDIF                                                                IMCLTQ5B.1005   
                                                                           IMCLTQ5B.1006   
      RETURN                                                               IMCLTQ5B.1007   
      END                                                                  IMCLTQ5B.1008   
*ENDIF                                                                     IMCLTQ5B.1009