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

      SUBROUTINE IM_CAL_TQ (P_FIELD,P1,P_POINTS,BL_LEVELS,LAND_FIELD,       2,4IMCLTQ7A.46     
     &                      LAND_INDEX,NTYPE,TILE_INDEX,TILE_PTS,          IMCLTQ7A.47     
     &                      LAND_MASK,LTIMER,                              IMCLTQ7A.48     
     &                      ALPHA1,ALPHA1_SICE,ASHTF,ASHTF_SNOW,           IMCLTQ7A.49     
     &                      DTL_NT,DQW_NT,DTRDZ,ICE_FRACT,                 IMCLTQ7A.50     
     &                      RDZ,RESFT,RHOKH,                               IMCLTQ7A.51     
     &                      RHOKH_1,RHOKH1_SICE,RHOKPM,RHOKPM_SICE,        IMCLTQ7A.52     
     &                      TILE_FRAC,                                     IMCLTQ7A.53     
     &                      FQW,FQW_ICE,FQW_TILE,E_SEA,                    IMCLTQ7A.54     
     &                      FTL,FTL_ICE,FTL_TILE,H_SEA,QW,TL)              IMCLTQ7A.55     
                                                                           IMCLTQ7A.56     
      IMPLICIT NONE                                                        IMCLTQ7A.57     
                                                                           IMCLTQ7A.58     
      INTEGER                                                              IMCLTQ7A.59     
     & P_FIELD                     ! IN No. of points in P-grid.           IMCLTQ7A.60     
     &,P1                          ! IN First point to be processed in     IMCLTQ7A.61     
!                                  !    P-grid.                            IMCLTQ7A.62     
     &,P_POINTS                    ! IN Number of P-grid points to be      IMCLTQ7A.63     
!                                  !    processed.                         IMCLTQ7A.64     
     &,BL_LEVELS                   ! IN No. of atmospheric levels for      IMCLTQ7A.65     
!                                  !    which boundary layer fluxes are    IMCLTQ7A.66     
!                                  !    calculated.                        IMCLTQ7A.67     
     &,LAND_FIELD                  ! IN Total number of land points.       IMCLTQ7A.68     
     &,LAND_INDEX(P_FIELD)         ! IN Index of land points.              IMCLTQ7A.69     
     &,NTYPE                       ! IN Number of land surface tiles.      IMCLTQ7A.70     
     &,TILE_PTS(NTYPE)             ! IN Number of tiles.                   IMCLTQ7A.71     
     &,TILE_INDEX(LAND_FIELD,NTYPE)! IN Index of tile points.              IMCLTQ7A.72     
                                                                           IMCLTQ7A.73     
      REAL                                                                 IMCLTQ7A.74     
     & ALPHA1(LAND_FIELD,NTYPE)    ! IN Gradient of saturated specific     IMCLTQ7A.75     
!                                  !    humidity with respect to           IMCLTQ7A.76     
!                                  !    temperature between the bottom     IMCLTQ7A.77     
!                                  !    model layer and tile surfaces.     IMCLTQ7A.78     
     &,ALPHA1_SICE(P_FIELD)        ! IN ALPHA1 for sea-ice                 IMCLTQ7A.79     
     &,ASHTF(P_FIELD)              ! IN Coefficient to calculate surface   IMCLTQ7A.80     
!                                  !    heat flux into soil or sea-ice     IMCLTQ7A.81     
!                                  !    (W/m2/K).                          IMCLTQ7A.82     
     &,ASHTF_SNOW(P_FIELD)         ! IN Coefficient to calculate surface   IMCLTQ7A.83     
!                                  !    heat flux into snow (W/m2/K).      IMCLTQ7A.84     
     &,DTL_NT(P_FIELD,BL_LEVELS)   ! IN Non-turbulent increment for TL.    IMCLTQ7A.85     
     &,DQW_NT(P_FIELD,BL_LEVELS)   ! IN Non-turbulent increment for QW.    IMCLTQ7A.86     
     &,DTRDZ(P_FIELD,BL_LEVELS)    ! IN -g.dt/dp for model layers.         IMCLTQ7A.87     
     &,ICE_FRACT(P_FIELD)          ! IN Fraction of grid-box which is      IMCLTQ7A.88     
!                                  !    sea-ice (decimal fraction).        IMCLTQ7A.89     
     &,RDZ(P_FIELD,BL_LEVELS)      ! IN 1./dz for model layers.            IMCLTQ7A.90     
     &,RESFT(LAND_FIELD,NTYPE)     ! IN Total resistance factor            IMCLTQ7A.91     
     &,RHOKH(P_FIELD,2:BL_LEVELS)  ! IN Exchange coeff for FTL above       IMCLTQ7A.92     
!                                  !    surface.                           IMCLTQ7A.93     
     &,RHOKH_1(LAND_FIELD,NTYPE)   ! IN Land surface exchange coeff.       IMCLTQ7A.94     
     &,RHOKH1_SICE(P_FIELD)        ! IN Sea and sea-ice surface exchange   IMCLTQ7A.95     
!                                  !    coeff.                             IMCLTQ7A.96     
     &,RHOKPM(LAND_FIELD,NTYPE)    ! IN Land surface exchange coeff.       IMCLTQ7A.97     
     &,RHOKPM_SICE(P_FIELD)        ! IN Sea-ice surface exchange coeff.    IMCLTQ7A.98     
     &,TILE_FRAC(LAND_FIELD,NTYPE)                                         IMCLTQ7A.99     
!                                  ! IN Tile fractions.                    IMCLTQ7A.100    
                                                                           IMCLTQ7A.101    
       LOGICAL                                                             IMCLTQ7A.102    
     & LAND_MASK(P_FIELD)          ! IN T for land, F elsewhere.           IMCLTQ7A.103    
     &,LTIMER                      ! IN Logical for TIMER.                 IMCLTQ7A.104    
                                                                           IMCLTQ7A.105    
      REAL                                                                 IMCLTQ7A.106    
     & FQW(P_FIELD,BL_LEVELS)      ! INOUT Flux of QW (ie., for surface,   IMCLTQ7A.107    
!                                  !       total evaporation). Kg/sq m/s   IMCLTQ7A.108    
     &,FQW_ICE(P_FIELD)            ! INOUT Surface flux of QW for          IMCLTQ7A.109    
!                                  !       sea-ice.                        IMCLTQ7A.110    
     &,FQW_TILE(LAND_FIELD,NTYPE)  ! INOUT Surface flux of QW for land     IMCLTQ7A.111    
!                                  !       tiles.                          IMCLTQ7A.112    
     &,FTL(P_FIELD,BL_LEVELS)      ! INOUT Flux of TL (ie., for surface,   IMCLTQ7A.113    
!                                  !       H/Cp where H is sensible heat   IMCLTQ7A.114    
!                                  !       in W per sq m).                 IMCLTQ7A.115    
     &,FTL_ICE(P_FIELD)            ! INOUT H/Cp for sea-ice.               IMCLTQ7A.116    
     &,FTL_TILE(LAND_FIELD,NTYPE)  ! INOUT H/Cp for land tiles.            IMCLTQ7A.117    
     &,E_SEA(P_FIELD)              ! INOUT Evaporation from sea times      IMCLTQ7A.118    
!                                  !       leads fraction (kg/m2/s).       IMCLTQ7A.119    
!                                  !       Zero over land.                 IMCLTQ7A.120    
     &,H_SEA(P_FIELD)              ! INOUT Surface sensible heat flux      IMCLTQ7A.121    
!                                  !       over sea times leads fraction   IMCLTQ7A.122    
!                                  !       Zero over land.                 IMCLTQ7A.123    
     &,QW(P_FIELD,BL_LEVELS)       ! INOUT Total water content (kg per     IMCLTQ7A.124    
!                                  !       kg air).  From P243.            IMCLTQ7A.125    
     &,TL(P_FIELD,BL_LEVELS)       ! INOUT Liquid/frozen water             IMCLTQ7A.126    
!                                          temperature (K).  From P243.    IMCLTQ7A.127    
                                                                           IMCLTQ7A.128    
!  External references :-                                                  IMCLTQ7A.129    
      EXTERNAL TIMER                                                       IMCLTQ7A.130    
                                                                           IMCLTQ7A.131    
!  Local and other symbolic constants :-                                   IMCLTQ7A.132    
*CALL C_LHEAT                                                              IMCLTQ7A.133    
*CALL C_R_CP                                                               IMCLTQ7A.134    
*CALL C_GAMMA                                                              IMCLTQ7A.135    
      REAL LS                                                              IMCLTQ7A.136    
      PARAMETER (                                                          IMCLTQ7A.137    
     & LS=LC+LF     ! Latent heat of sublimation (J per kg).               IMCLTQ7A.138    
     &)                                                                    IMCLTQ7A.139    
! Workspace :-                                                             IMCLTQ7A.140    
      REAL                                                                 IMCLTQ7A.141    
     & AQ(P_FIELD,BL_LEVELS)   ! Matrix elements.                          IMCLTQ7A.142    
     &,AT(P_FIELD,BL_LEVELS)   ! Matrix elements.                          IMCLTQ7A.143    
     &,BQ1(P_FIELD)            ! Matrix element.                           IMCLTQ7A.144    
     &,BT1(P_FIELD)            ! Matrix element.                           IMCLTQ7A.145    
     &,CQ1(P_FIELD)            ! Matrix element.                           IMCLTQ7A.146    
     &,CT1(P_FIELD)            ! Matrix element.                           IMCLTQ7A.147    
     &,DQW(P_FIELD,BL_LEVELS)  ! Delta QW.                                 IMCLTQ7A.148    
     &,DTL(P_FIELD,BL_LEVELS)  ! Delta TL.                                 IMCLTQ7A.149    
                                                                           IMCLTQ7A.150    
!  Local scalars :-                                                        IMCLTQ7A.151    
                                                                           IMCLTQ7A.152    
      REAL                                                                 IMCLTQ7A.153    
     & CQ       ! Matrix element.                                          IMCLTQ7A.154    
     &,CT       ! Matrix element.                                          IMCLTQ7A.155    
     &,RBQ      ! Reciprocal of BQ'.                                       IMCLTQ7A.156    
     &,RBT      ! Reciprocal of BT'.                                       IMCLTQ7A.157    
                                                                           IMCLTQ7A.158    
      INTEGER                                                              IMCLTQ7A.159    
     & BLM1     ! BL_LEVELS minus 1.                                       IMCLTQ7A.160    
     &,I        ! Loop counter (horizontal field index).                   IMCLTQ7A.161    
     &,J        ! Loop counter (tile field index).                         IMCLTQ7A.162    
     &,K        ! Loop counter (vertical index).                           IMCLTQ7A.163    
     &,L        ! Loop counter (horizontal field index).                   IMCLTQ7A.164    
     &,N        ! Loop counter (tile index).                               IMCLTQ7A.165    
                                                                           IMCLTQ7A.166    
      IF (LTIMER) THEN                                                     IMCLTQ7A.167    
        CALL TIMER('IMCALTQ ',3)                                           IMCLTQ7A.168    
      ENDIF                                                                IMCLTQ7A.169    
                                                                           IMCLTQ7A.170    
      BLM1 = BL_LEVELS-1                                                   IMCLTQ7A.171    
                                                                           IMCLTQ7A.172    
!-----------------------------------------------------------------------   IMCLTQ7A.173    
!! 1.  Calculate those matrix and vector elements on the LHS of eqn        IMCLTQ7A.174    
!!     P244.79 which are to do with implicit solution of the moisture      IMCLTQ7A.175    
!!     transport problem - upward sweep through lower half of matrix.      IMCLTQ7A.176    
!-----------------------------------------------------------------------   IMCLTQ7A.177    
!! 1.1 Row of matrix for QW on top boundary layer level.                   IMCLTQ7A.178    
!-----------------------------------------------------------------------   IMCLTQ7A.179    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.180    
        DQW(I,BL_LEVELS) = DTRDZ(I,BL_LEVELS) * FQW(I,BL_LEVELS)           IMCLTQ7A.181    
     &                     +DQW_NT(I,BL_LEVELS)               ! P244.58    IMCLTQ7A.182    
        AQ(I,BL_LEVELS) = - DTRDZ(I,BL_LEVELS)                ! P244.56    IMCLTQ7A.183    
     &       * GAMMA(BL_LEVELS)*RHOKH(I,BL_LEVELS)*RDZ(I,BL_LEVELS)        IMCLTQ7A.184    
        RBQ = 1.0 / ( 1.0 - AQ(I,BL_LEVELS) )   ! Reciprocal of P244.98    IMCLTQ7A.185    
        DQW(I,BL_LEVELS) = RBQ * DQW(I,BL_LEVELS)             ! P244.99    IMCLTQ7A.186    
        AQ(I,BL_LEVELS) = RBQ * AQ(I,BL_LEVELS)               ! P244.100   IMCLTQ7A.187    
      ENDDO                                                                IMCLTQ7A.188    
                                                                           IMCLTQ7A.189    
!-----------------------------------------------------------------------   IMCLTQ7A.190    
!! 1.2 Rows of matrix for QW on intermediate levels.                       IMCLTQ7A.191    
!-----------------------------------------------------------------------   IMCLTQ7A.192    
      DO K=BLM1,2,-1                                                       IMCLTQ7A.193    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ7A.194    
          DQW(I,K) = - DTRDZ(I,K) * ( FQW(I,K+1) - FQW(I,K) )              IMCLTQ7A.195    
     &               + DQW_NT(I,K)                            ! P244.54    IMCLTQ7A.196    
          CQ = - DTRDZ(I,K)*GAMMA(K+1)*RHOKH(I,K+1)*RDZ(I,K+1)! P244.52    IMCLTQ7A.197    
          AQ(I,K) = - DTRDZ(I,K)*GAMMA(K)*RHOKH(I,K)*RDZ(I,K) ! P244.51    IMCLTQ7A.198    
          RBQ = 1.0 / ( 1.0 - AQ(I,K) - CQ*(1.0 + AQ(I,K+1)) )             IMCLTQ7A.199    
!                                             ... reciprocal of P244.101   IMCLTQ7A.200    
          DQW(I,K) = RBQ * ( DQW(I,K) - CQ*DQW(I,K+1) )       ! P244.102   IMCLTQ7A.201    
          AQ(I,K) = RBQ * AQ(I,K)                             ! P244.103   IMCLTQ7A.202    
        ENDDO                                                              IMCLTQ7A.203    
      ENDDO                                                                IMCLTQ7A.204    
                                                                           IMCLTQ7A.205    
!-----------------------------------------------------------------------   IMCLTQ7A.206    
!! 1.3 Row of matrix for QW on lowest level.                               IMCLTQ7A.207    
!-----------------------------------------------------------------------   IMCLTQ7A.208    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.209    
        DQW(I,1) = - DTRDZ(I,1)*(FQW(I,2) - FQW(I,1)) + DQW_NT(I,1)        IMCLTQ7A.210    
        AQ(I,1) = 0.                                                       IMCLTQ7A.211    
        CQ1(I) = - GAMMA(2)*DTRDZ(I,1)*RHOKH(I,2)*RDZ(I,2)                 IMCLTQ7A.212    
        BQ1(I) = 1. - (1. + AQ(I,2))*CQ1(I)                                IMCLTQ7A.213    
        IF ( .NOT. LAND_MASK(I) ) THEN                                     IMCLTQ7A.214    
! Sea or sea-ice                                                           IMCLTQ7A.215    
          AQ(I,1) = - CP*GAMMA(1)*DTRDZ(I,1)*ICE_FRACT(I) *                IMCLTQ7A.216    
     &                      ALPHA1_SICE(I)*RHOKH1_SICE(I)*RHOKPM_SICE(I)   IMCLTQ7A.217    
          BQ1(I) = BQ1(I) + GAMMA(1)*DTRDZ(I,1) *                          IMCLTQ7A.218    
     &                      ( (1. - ICE_FRACT(I))*RHOKH1_SICE(I) +         IMCLTQ7A.219    
     &        ICE_FRACT(I)*(ASHTF(I)+CP*RHOKH1_SICE(I))*RHOKPM_SICE(I) )   IMCLTQ7A.220    
        ENDIF                                                              IMCLTQ7A.221    
      ENDDO                                                                IMCLTQ7A.222    
                                                                           IMCLTQ7A.223    
! Snow-free land tiles                                                     IMCLTQ7A.224    
      DO N=1,NTYPE-1                                                       IMCLTQ7A.225    
        DO J=1,TILE_PTS(N)                                                 IMCLTQ7A.226    
          L = TILE_INDEX(J,N)                                              IMCLTQ7A.227    
          I = LAND_INDEX(L)                                                IMCLTQ7A.228    
          AQ(I,1) = AQ(I,1) - CP*GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *      IMCLTQ7A.229    
     &                   RESFT(L,N)*ALPHA1(L,N)*RHOKH_1(L,N)*RHOKPM(L,N)   IMCLTQ7A.230    
          BQ1(I) = BQ1(I) + GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *           IMCLTQ7A.231    
     &               RESFT(L,N)*RHOKPM(L,N)*(CP*RHOKH_1(L,N) + ASHTF(I))   IMCLTQ7A.232    
        ENDDO                                                              IMCLTQ7A.233    
      ENDDO                                                                IMCLTQ7A.234    
                                                                           IMCLTQ7A.235    
! Snow and land-ice tile                                                   IMCLTQ7A.236    
      N = NTYPE                                                            IMCLTQ7A.237    
      DO J=1,TILE_PTS(N)                                                   IMCLTQ7A.238    
        L = TILE_INDEX(J,N)                                                IMCLTQ7A.239    
        I = LAND_INDEX(L)                                                  IMCLTQ7A.240    
        AQ(I,1) = AQ(I,1) - CP*GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *        IMCLTQ7A.241    
     &                              ALPHA1(L,N)*RHOKH_1(L,N)*RHOKPM(L,N)   IMCLTQ7A.242    
        BQ1(I) = BQ1(I) + GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *             IMCLTQ7A.243    
     &                     RHOKPM(L,N)*(CP*RHOKH_1(L,N) + ASHTF_SNOW(I))   IMCLTQ7A.244    
      ENDDO                                                                IMCLTQ7A.245    
                                                                           IMCLTQ7A.246    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.247    
        DQW(I,1) = (DQW(I,1)  - CQ1(I)*DQW(I,2)) / BQ1(I)                  IMCLTQ7A.248    
        AQ(I,1) = AQ(I,1) / BQ1(I)                                         IMCLTQ7A.249    
      ENDDO                                                                IMCLTQ7A.250    
                                                                           IMCLTQ7A.251    
!-----------------------------------------------------------------------   IMCLTQ7A.252    
!! 2.  Calculate those matrix and vector elements on the LHS of eqn        IMCLTQ7A.253    
!!     P244.79 which are to do with implicit solution of the heat          IMCLTQ7A.254    
!!     transport problem - upward sweep through upper half of matrix.      IMCLTQ7A.255    
!-----------------------------------------------------------------------   IMCLTQ7A.256    
!! 2.1 Row of matrix for TL on lowest level.                               IMCLTQ7A.257    
!-----------------------------------------------------------------------   IMCLTQ7A.258    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.259    
        DTL(I,1) = - DTRDZ(I,1)*(FTL(I,2) - FTL(I,1)) + DTL_NT(I,1)        IMCLTQ7A.260    
        AT(I,1) = - DTRDZ(I,1)*GAMMA(2)*RHOKH(I,2)*RDZ(I,2)                IMCLTQ7A.261    
        BT1(I) = 1. - AT(I,1)                                              IMCLTQ7A.262    
        CT1(I) = 0.                                                        IMCLTQ7A.263    
        IF ( .NOT.LAND_MASK(I) ) THEN                                      IMCLTQ7A.264    
! Sea or sea-ice                                                           IMCLTQ7A.265    
          CT1(I) = - LS*GAMMA(1)*DTRDZ(I,1)*ICE_FRACT(I) *                 IMCLTQ7A.266    
     &                                     RHOKH1_SICE(I)*RHOKPM_SICE(I)   IMCLTQ7A.267    
          BT1(I) = BT1(I) - ALPHA1_SICE(I)*CT1(I) + GAMMA(1)*DTRDZ(I,1)    IMCLTQ7A.268    
     &                        * ( ICE_FRACT(I)*ASHTF(I)*RHOKPM_SICE(I)     IMCLTQ7A.269    
     &                            + (1. - ICE_FRACT(I))*RHOKH1_SICE(I) )   IMCLTQ7A.270    
        ENDIF                                                              IMCLTQ7A.271    
      ENDDO                                                                IMCLTQ7A.272    
                                                                           IMCLTQ7A.273    
! Snow-free land tiles                                                     IMCLTQ7A.274    
      DO N=1,NTYPE-1                                                       IMCLTQ7A.275    
        DO J=1,TILE_PTS(N)                                                 IMCLTQ7A.276    
          L = TILE_INDEX(J,N)                                              IMCLTQ7A.277    
          I = LAND_INDEX(L)                                                IMCLTQ7A.278    
          CT1(I) = CT1(I) - LC*GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *        IMCLTQ7A.279    
     &                               RESFT(L,N)*RHOKH_1(L,N)*RHOKPM(L,N)   IMCLTQ7A.280    
          BT1(I) = BT1(I) + GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *           IMCLTQ7A.281    
     &             RHOKPM(L,N)*( LC*ALPHA1(L,N)*RESFT(L,N)*RHOKH_1(L,N)    IMCLTQ7A.282    
     &                                                      + ASHTF(I) )   IMCLTQ7A.283    
        ENDDO                                                              IMCLTQ7A.284    
      ENDDO                                                                IMCLTQ7A.285    
                                                                           IMCLTQ7A.286    
! Snow and land-ice tile                                                   IMCLTQ7A.287    
      N = NTYPE                                                            IMCLTQ7A.288    
      DO J=1,TILE_PTS(N)                                                   IMCLTQ7A.289    
        L = TILE_INDEX(J,N)                                                IMCLTQ7A.290    
        I = LAND_INDEX(L)                                                  IMCLTQ7A.291    
        CT1(I) = CT1(I) - LS*GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *          IMCLTQ7A.292    
     &                                          RHOKH_1(L,N)*RHOKPM(L,N)   IMCLTQ7A.293    
        BT1(I) = BT1(I) + GAMMA(1)*DTRDZ(I,1)*TILE_FRAC(L,N) *             IMCLTQ7A.294    
     &                        RHOKPM(L,N)*( LS*ALPHA1(L,N)*RHOKH_1(L,N)    IMCLTQ7A.295    
     &                                                 + ASHTF_SNOW(I) )   IMCLTQ7A.296    
      ENDDO                                                                IMCLTQ7A.297    
                                                                           IMCLTQ7A.298    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.299    
        BT1(I) = BT1(I) - CT1(I)*AQ(I,1)                                   IMCLTQ7A.300    
        DTL(I,1) = (DTL(I,1) - CT1(I)*DQW(I,1)) / BT1(I)                   IMCLTQ7A.301    
        AT(I,1) = AT(I,1) / BT1(I)                                         IMCLTQ7A.302    
      ENDDO                                                                IMCLTQ7A.303    
                                                                           IMCLTQ7A.304    
!-----------------------------------------------------------------------   IMCLTQ7A.305    
!! 2.2 Rows of matrix for TL on intermediate levels.                       IMCLTQ7A.306    
!-----------------------------------------------------------------------   IMCLTQ7A.307    
      DO K=2,BLM1                                                          IMCLTQ7A.308    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ7A.309    
          DTL(I,K) = - DTRDZ(I,K) * ( FTL(I,K+1) - FTL(I,K) )              IMCLTQ7A.310    
     &               + DTL_NT(I,K)                            ! P244.38    IMCLTQ7A.311    
          AT(I,K) = - DTRDZ(I,K)*GAMMA(K+1)*RHOKH(I,K+1)*RDZ(I,K+1)        IMCLTQ7A.312    
!                                                             ! P244.35    IMCLTQ7A.313    
          CT = - DTRDZ(I,K)*GAMMA(K)*RHOKH(I,K)*RDZ(I,K)      ! P244.36    IMCLTQ7A.314    
          RBT = 1.0 / ( 1.0 - AT(I,K) - CT*(1.0 + AT(I,K-1)) )             IMCLTQ7A.315    
!                                             ... Reciprocal of P244.113   IMCLTQ7A.316    
          DTL(I,K) = RBT * ( DTL(I,K) - CT*DTL(I,K-1) )       ! P244.114   IMCLTQ7A.317    
          AT(I,K) = RBT * AT(I,K)                             ! P244.115   IMCLTQ7A.318    
        ENDDO                                                              IMCLTQ7A.319    
      ENDDO                                                                IMCLTQ7A.320    
                                                                           IMCLTQ7A.321    
!-----------------------------------------------------------------------   IMCLTQ7A.322    
!! 2.3 Row of matrix for TL on top boundary layer level.                   IMCLTQ7A.323    
!-----------------------------------------------------------------------   IMCLTQ7A.324    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.325    
        DTL(I,BL_LEVELS) = DTRDZ(I,BL_LEVELS) * FTL(I,BL_LEVELS)           IMCLTQ7A.326    
     &                   + DTL_NT(I,BL_LEVELS)                ! P244.42    IMCLTQ7A.327    
        CT = - DTRDZ(I,BL_LEVELS)*GAMMA(BL_LEVELS)*                        IMCLTQ7A.328    
     &         RHOKH(I,BL_LEVELS)*RDZ(I,BL_LEVELS)                         IMCLTQ7A.329    
        RBT = 1.0 / ( 1.0 - CT*(1.0 + AT(I,BLM1)) )                        IMCLTQ7A.330    
!                                             ... Reciprocal of P244.116   IMCLTQ7A.331    
        DTL(I,BL_LEVELS) = RBT * ( DTL(I,BL_LEVELS) - CT*DTL(I,BLM1) )     IMCLTQ7A.332    
!                                                             ! P244.117   IMCLTQ7A.333    
      ENDDO                                                                IMCLTQ7A.334    
                                                                           IMCLTQ7A.335    
!-----------------------------------------------------------------------   IMCLTQ7A.336    
!! 3.  Downward sweep through whole matrix.                                IMCLTQ7A.337    
!-----------------------------------------------------------------------   IMCLTQ7A.338    
!! 3.1 Increment TL.                                                       IMCLTQ7A.339    
!-----------------------------------------------------------------------   IMCLTQ7A.340    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.341    
        TL(I,BL_LEVELS) = TL(I,BL_LEVELS) + DTL(I,BL_LEVELS)  ! P244.127   IMCLTQ7A.342    
      ENDDO                                                                IMCLTQ7A.343    
      DO K=BLM1,1,-1                                                       IMCLTQ7A.344    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ7A.345    
          DTL(I,K) = DTL(I,K) - AT(I,K)*DTL(I,K+1)            ! P244.118   IMCLTQ7A.346    
          TL(I,K) = TL(I,K) + DTL(I,K)                        ! P244.127   IMCLTQ7A.347    
        ENDDO                                                              IMCLTQ7A.348    
      ENDDO                                                                IMCLTQ7A.349    
                                                                           IMCLTQ7A.350    
!-----------------------------------------------------------------------   IMCLTQ7A.351    
!! 3.2 Increment QW.                                                       IMCLTQ7A.352    
!-----------------------------------------------------------------------   IMCLTQ7A.353    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.354    
        DQW(I,1) = DQW(I,1) - AQ(I,1)*DTL(I,1)                             IMCLTQ7A.355    
        QW(I,1) = QW(I,1) + DQW(I,1)                                       IMCLTQ7A.356    
      ENDDO                                                                IMCLTQ7A.357    
      DO K=2,BL_LEVELS                                                     IMCLTQ7A.358    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ7A.359    
          DQW(I,K) = DQW(I,K) - AQ(I,K)*DQW(I,K-1)            ! P244.121   IMCLTQ7A.360    
          QW(I,K) = QW(I,K) + DQW(I,K)                        ! P244.128   IMCLTQ7A.361    
        ENDDO                                                              IMCLTQ7A.362    
      ENDDO                                                                IMCLTQ7A.363    
                                                                           IMCLTQ7A.364    
!-----------------------------------------------------------------------   IMCLTQ7A.365    
!! 4.  Calculate final implicit fluxes of heat and moisture.               IMCLTQ7A.366    
!-----------------------------------------------------------------------   IMCLTQ7A.367    
!! 4.1 Surface fluxes.                                                     IMCLTQ7A.368    
!-----------------------------------------------------------------------   IMCLTQ7A.369    
      DO I=P1,P1+P_POINTS-1                                                IMCLTQ7A.370    
        FTL(I,1) = 0.                                                      IMCLTQ7A.371    
        FQW(I,1) = 0.                                                      IMCLTQ7A.372    
        IF ( .NOT.LAND_MASK(I) ) THEN                                      IMCLTQ7A.373    
          IF ( ICE_FRACT(I) .GT. 0. ) THEN                                 IMCLTQ7A.374    
! Sea-ice and leads                                                        IMCLTQ7A.375    
            FTL_ICE(I) = FTL_ICE(I) +                                      IMCLTQ7A.376    
     &                           GAMMA(1)*ICE_FRACT(I)*RHOKPM_SICE(I) *    IMCLTQ7A.377    
     &        ( LS*RHOKH1_SICE(I)*(DQW(I,1) - ALPHA1_SICE(I)*DTL(I,1))     IMCLTQ7A.378    
     &                                             - ASHTF(I)*DTL(I,1) )   IMCLTQ7A.379    
            FQW_ICE(I) = FQW_ICE(I) -                                      IMCLTQ7A.380    
     &                           GAMMA(1)*ICE_FRACT(I)*RHOKPM_SICE(I) *    IMCLTQ7A.381    
     &        ( CP*RHOKH1_SICE(I)*(DQW(I,1) - ALPHA1_SICE(I)*DTL(I,1))     IMCLTQ7A.382    
     &                                             + ASHTF(I)*DQW(I,1) )   IMCLTQ7A.383    
            H_SEA(I) = H_SEA(I) - (1.0 - ICE_FRACT(I)) * CP *              IMCLTQ7A.384    
     &                                  GAMMA(1)*RHOKH1_SICE(I)*DTL(I,1)   IMCLTQ7A.385    
            E_SEA(I) = E_SEA(I) - (1.0 - ICE_FRACT(I)) *                   IMCLTQ7A.386    
     &                                  GAMMA(1)*RHOKH1_SICE(I)*DQW(I,1)   IMCLTQ7A.387    
            FTL(I,1) = FTL_ICE(I) + H_SEA(I)/CP                            IMCLTQ7A.388    
            FQW(I,1) = FQW_ICE(I) + E_SEA(I)                               IMCLTQ7A.389    
          ELSE                                                             IMCLTQ7A.390    
! Unfrozen sea                                                             IMCLTQ7A.391    
            H_SEA(I) = H_SEA(I) - CP*GAMMA(1)*RHOKH1_SICE(I)*DTL(I,1)      IMCLTQ7A.392    
            E_SEA(I) = E_SEA(I) - GAMMA(1)*RHOKH1_SICE(I)*DQW(I,1)         IMCLTQ7A.393    
            FTL(I,1) = H_SEA(I)/CP                                         IMCLTQ7A.394    
            FQW(I,1) = E_SEA(I)                                            IMCLTQ7A.395    
          ENDIF                                                            IMCLTQ7A.396    
        ENDIF                                                              IMCLTQ7A.397    
      ENDDO                                                                IMCLTQ7A.398    
                                                                           IMCLTQ7A.399    
! Snow-free land tiles                                                     IMCLTQ7A.400    
      DO N=1,NTYPE-1                                                       IMCLTQ7A.401    
        DO J=1,TILE_PTS(N)                                                 IMCLTQ7A.402    
          L = TILE_INDEX(J,N)                                              IMCLTQ7A.403    
          I = LAND_INDEX(L)                                                IMCLTQ7A.404    
          FTL_TILE(L,N) = FTL_TILE(L,N) + GAMMA(1)*RHOKPM(L,N) *           IMCLTQ7A.405    
     &     ( LC*RESFT(L,N)*RHOKH_1(L,N)*(DQW(I,1)-ALPHA1(L,N)*DTL(I,1))    IMCLTQ7A.406    
     &                                             - ASHTF(I)*DTL(I,1) )   IMCLTQ7A.407    
          FQW_TILE(L,N) = FQW_TILE(L,N) - GAMMA(1)*RESFT(L,N) *            IMCLTQ7A.408    
     &    RHOKPM(L,N)*( CP*RHOKH_1(L,N)*(DQW(I,1)-ALPHA1(L,N)*DTL(I,1))    IMCLTQ7A.409    
     &                                             + ASHTF(I)*DQW(I,1) )   IMCLTQ7A.410    
          FTL(I,1) = FTL(I,1) + TILE_FRAC(L,N)*FTL_TILE(L,N)               IMCLTQ7A.411    
          FQW(I,1) = FQW(I,1) + TILE_FRAC(L,N)*FQW_TILE(L,N)               IMCLTQ7A.412    
        ENDDO                                                              IMCLTQ7A.413    
      ENDDO                                                                IMCLTQ7A.414    
                                                                           IMCLTQ7A.415    
! Snow and land-ice tile                                                   IMCLTQ7A.416    
      N = NTYPE                                                            IMCLTQ7A.417    
      DO J=1,TILE_PTS(N)                                                   IMCLTQ7A.418    
        L = TILE_INDEX(J,N)                                                IMCLTQ7A.419    
        I = LAND_INDEX(L)                                                  IMCLTQ7A.420    
        FTL_TILE(L,N) = FTL_TILE(L,N) + GAMMA(1)*RHOKPM(L,N) *             IMCLTQ7A.421    
     &              ( LS*RHOKH_1(L,N)*(DQW(I,1) - ALPHA1(L,N)*DTL(I,1))    IMCLTQ7A.422    
     &                                        - ASHTF_SNOW(I)*DTL(I,1) )   IMCLTQ7A.423    
        FQW_TILE(L,N) = FQW_TILE(L,N) - GAMMA(1)*RHOKPM(L,N) *             IMCLTQ7A.424    
     &              ( CP*RHOKH_1(L,N)*(DQW(I,1) - ALPHA1(L,N)*DTL(I,1))    IMCLTQ7A.425    
     &                                        + ASHTF_SNOW(I)*DQW(I,1) )   IMCLTQ7A.426    
        FTL(I,1) = FTL(I,1) + TILE_FRAC(L,N)*FTL_TILE(L,N)                 IMCLTQ7A.427    
        FQW(I,1) = FQW(I,1) + TILE_FRAC(L,N)*FQW_TILE(L,N)                 IMCLTQ7A.428    
      ENDDO                                                                IMCLTQ7A.429    
                                                                           IMCLTQ7A.430    
!-----------------------------------------------------------------------   IMCLTQ7A.431    
!! 4.2 Fluxes at layer interfaces above the surface.                       IMCLTQ7A.432    
!-----------------------------------------------------------------------   IMCLTQ7A.433    
      DO K=2,BL_LEVELS                                                     IMCLTQ7A.434    
        DO I=P1,P1+P_POINTS-1                                              IMCLTQ7A.435    
          FTL(I,K)  = FTL(I,K) - GAMMA(K)*RHOKH(I,K)*RDZ(I,K) ! P244.33    IMCLTQ7A.436    
     &                              * ( DTL(I,K) - DTL(I,K-1) )            IMCLTQ7A.437    
          FQW(I,K)  = FQW(I,K) - GAMMA(K)*RHOKH(I,K)*RDZ(I,K) ! P244.44    IMCLTQ7A.438    
     &                              * ( DQW(I,K) - DQW(I,K-1) )            IMCLTQ7A.439    
        ENDDO                                                              IMCLTQ7A.440    
      ENDDO                                                                IMCLTQ7A.441    
                                                                           IMCLTQ7A.442    
      IF (LTIMER) THEN                                                     IMCLTQ7A.443    
        CALL TIMER('IMCALTQ ',4)                                           IMCLTQ7A.444    
      ENDIF                                                                IMCLTQ7A.445    
                                                                           IMCLTQ7A.446    
      RETURN                                                               IMCLTQ7A.447    
      END                                                                  IMCLTQ7A.448    
*ENDIF                                                                     IMCLTQ7A.449