*IF DEF,A03_3A,OR,DEF,A03_5A,OR,DEF,A03_5B,OR,DEF,A03_7A,OR,DEF,A03_6A     ARN1F404.3      
C ******************************COPYRIGHT******************************    GTS2F400.4447   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4448   
C                                                                          GTS2F400.4449   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4450   
C restrictions as set forth in the contract.                               GTS2F400.4451   
C                                                                          GTS2F400.4452   
C                Meteorological Office                                     GTS2F400.4453   
C                London Road                                               GTS2F400.4454   
C                BRACKNELL                                                 GTS2F400.4455   
C                Berkshire UK                                              GTS2F400.4456   
C                RG12 2SZ                                                  GTS2F400.4457   
C                                                                          GTS2F400.4458   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4459   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4460   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4461   
C Modelling at the above address.                                          GTS2F400.4462   
C ******************************COPYRIGHT******************************    GTS2F400.4463   
C                                                                          GTS2F400.4464   
C*LL  SUBROUTINE IMP_MIX -----------------------------------------------   IMPMIX2C.3      
CLL                                                                        IMPMIX2C.4      
CLL  Purpose: Calculate turbulent mixing increments for a passive tracer   IMPMIX2C.5      
CLL           using an implicit numerical scheme.  The tridiagonal         IMPMIX2C.6      
CLL           matices are inverted using simple Gaussian elimination.      IMPMIX2C.7      
CLL                                                                        IMPMIX2C.8      
CLL                                                                        IMPMIX2C.10     
CLL  Model           Modification history :                                IMPMIX2C.11     
CLL version  Date                                                          IMPMIX2C.12     
CLL   3.4  18/10/94   *DECK inserted into UM version 3.4. S Jackson        IMPMIX2C.13     
CLL   4.2   Oct. 96   T3E migration - *DEF CRAY removed                    GSS1F402.64     
CLL                                     S J Swarbrick                      GSS1F402.65     
CLL  4.5    Jul. 98  Kill the IBM specific lines (JCThil)                  AJC1F405.143    
CLL                                                                        IMPMIX2C.14     
CLL  SDJ  <- Programmers of some or all of previous code or changes        IMPMIX2C.15     
CLL                                                                        IMPMIX2C.16     
CLL  Programming standard: UM Documentation Paper No 4, Version 2,         IMPMIX2C.17     
CLL                        dated 18/1/90                                   IMPMIX2C.18     
CLL                                                                        IMPMIX2C.19     
CLL  System component covered: P244                                        IMPMIX2C.20     
CLL                                                                        IMPMIX2C.21     
CLL  Project task: P24                                                     IMPMIX2C.22     
CLL                                                                        IMPMIX2C.23     
CLL  Documentation: UM Documentation Paper No 24.                          IMPMIX2C.24     
CLL                                                                        IMPMIX2C.25     
C*----------------------------------------------------------------------   IMPMIX2C.26     
C*L  Arguments :-                                                          IMPMIX2C.27     

      SUBROUTINE IMP_MIX (                                                  1,2IMPMIX2C.28     
     & P_FIELD,P1,P_POINTS,BL_LEVELS,DELTA_AK,DELTA_BK                     IMPMIX2C.29     
     &,GAMMA_RHOKH_RDZ,GAMMA_RHOK_DEP                                      IMPMIX2C.30     
     &,PSTAR,TIMESTEP                                                      IMPMIX2C.31     
     &,F_FIELD,SURF_DEP_FLUX,FIELD                                         IMPMIX2C.32     
     &,NRML                                                                IMPMIX2C.33     
     &,ERROR,LTIMER                                                        IMPMIX2C.34     
     & )                                                                   IMPMIX2C.35     
      IMPLICIT NONE                                                        IMPMIX2C.36     
C                                                                          IMPMIX2C.37     
C  Inputs :-                                                               IMPMIX2C.38     
C                                                                          IMPMIX2C.39     
      INTEGER                                                              IMPMIX2C.40     
     & P_FIELD                     ! IN No. of points in P-grid.           IMPMIX2C.41     
     &,P1                          ! IN First point to be processed in     IMPMIX2C.42     
C                                  !    P-grid.                            IMPMIX2C.43     
     &,P_POINTS                    ! IN Number of P-grid points to be      IMPMIX2C.44     
C                                  !    processed.                         IMPMIX2C.45     
     &,BL_LEVELS                   ! IN No. of atmospheric levels for      IMPMIX2C.49     
C                                  !    which boundary layer fluxes are    IMPMIX2C.50     
C                                  !    calculated.                        IMPMIX2C.51     
      REAL                                                                 IMPMIX2C.52     
     & DELTA_AK(BL_LEVELS)         ! IN Difference of hybrid 'A' across    IMPMIX2C.53     
C                                  !    boundary layers (K-1/2 to K+1/2)   IMPMIX2C.54     
C                                  !    (upper minus lower).               IMPMIX2C.55     
     &,DELTA_BK(BL_LEVELS)         ! IN Difference of hybrid 'B' across    IMPMIX2C.56     
C                                  !    boundary layers (K-1/2 to K+1/2)   IMPMIX2C.57     
C                                  !    (upper minus lower).               IMPMIX2C.58     
     &,GAMMA_RHOKH_RDZ(P_FIELD,2:BL_LEVELS)                                IMPMIX2C.59     
C                                  ! IN Turbulent mixing coefs. above      IMPMIX2C.60     
C                                  !    surface, =GAMMA(K)*RHOKH(,K)       IMPMIX2C.61     
C                                  !    *RDZ(K) for K>=2 (from KMKH).      IMPMIX2C.62     
     &,GAMMA_RHOK_DEP(P_FIELD)     ! IN Surface exchange coefficient       IMPMIX2C.63     
C                                  !    for surface deposition*GAMMA(1)    IMPMIX2C.64     
     &,PSTAR(P_FIELD)              ! IN Surface pressure (Pa).             IMPMIX2C.65     
     &,TIMESTEP                    ! IN Timestep in seconds.               IMPMIX2C.66     
C                                                                          IMPMIX2C.67     
C  Next 2 arrays are IN as "explicit" fluxes and OUT as "implicit"         IMPMIX2C.68     
C  fluxes.                                                                 IMPMIX2C.69     
C                                                                          IMPMIX2C.70     
      REAL                                                                 IMPMIX2C.71     
     & F_FIELD(P_FIELD,BL_LEVELS)  ! INOUT Flux of tracer                  IMPMIX2C.72     
     &,SURF_DEP_FLUX(P_FIELD)      ! INOUT surface deposition flux         IMPMIX2C.73     
     &,FIELD(P_FIELD,BL_LEVELS)    ! INOUT Amount of tracer                IMPMIX2C.74     
                                                                           IMPMIX2C.75     
      INTEGER                                                              IMPMIX2C.76     
     & NRML(P_FIELD)               ! IN The number of model layers         IMPMIX2C.77     
C                                  !    in the unstable rapidly mixing     IMPMIX2C.78     
C                                  !    layer. Zero if surface layer       IMPMIX2C.79     
C                                  !    is stable.                         IMPMIX2C.80     
     &,ERROR                       ! OUT 1 if bad arguments, else 0.       IMPMIX2C.81     
                                                                           IMPMIX2C.82     
      LOGICAL                                                              IMPMIX2C.83     
     & LTIMER                      ! IN Logical switch for TIMER diagnos   IMPMIX2C.84     
                                                                           IMPMIX2C.85     
C*                                                                         IMPMIX2C.86     
C*L  External references :-                                                IMPMIX2C.87     
                                                                           IMPMIX2C.88     
      EXTERNAL TIMER                                                       IMPMIX2C.89     
                                                                           IMPMIX2C.90     
C*                                                                         IMPMIX2C.91     
C*L  Local and other symbolic constants :-                                 IMPMIX2C.92     
*CALL C_G                                                                  IMPMIX2C.93     
C*                                                                         IMPMIX2C.94     
C*L Workspace :-                                                           IMPMIX2C.95     
C   4*BL_LEVELS + 4 blocks of real workspace are required.                 IMPMIX2C.96     
      REAL                                                                 IMPMIX2C.98     
     & AF(P_FIELD,BL_LEVELS)       ! Elements in rows in matrix            IMPMIX2C.99     
C                                  ! equation (modified during             IMPMIX2C.100    
C                                  ! Gaussian elimination calculations).   IMPMIX2C.101    
     &,AF_RML(P_FIELD)             ! Matrix element for field in           IMPMIX2C.102    
C                                  ! rapidly mixing layer.                 IMPMIX2C.103    
     &,DELTAP(P_FIELD,BL_LEVELS)   ! Vertical pressure difference across   IMPMIX2C.104    
C                                  ! hybrid layers (upper minus lower)     IMPMIX2C.105    
C                                  ! (Pa).                                 IMPMIX2C.106    
     &,DELTAP_RML(P_FIELD)         ! Vertical pressure difference across   IMPMIX2C.107    
C                                  ! the rapidly mixing layer (Pa).        IMPMIX2C.108    
     &,D_FIELD(P_FIELD,BL_LEVELS)  ! Delta FIELD (tracer field)            IMPMIX2C.109    
C                                  ! elements of vector on RHS, then       IMPMIX2C.110    
C                                  ! LHS, of eqn P244.79.                  IMPMIX2C.111    
     &,DFLD_RML(P_FIELD)           ! Delta FIELD for rapidly               IMPMIX2C.112    
C                                  ! mixing layer.                         IMPMIX2C.113    
     &,DTRDZ(P_FIELD,BL_LEVELS)    ! -g.dt/dp for bottom BL_LEVELS         IMPMIX2C.114    
C                                  ! model layers (needed in P245).        IMPMIX2C.115    
     &,DTRDZ_RML(P_FIELD)          ! -g.dt/dp for the rapidly              IMPMIX2C.116    
C                                  ! mixing layer (needed in P245).        IMPMIX2C.117    
C*                                                                         IMPMIX2C.141    
C  Local scalars :-                                                        IMPMIX2C.142    
      REAL                                                                 IMPMIX2C.143    
     & CF       ! Matrix element for local increments to rml               IMPMIX2C.144    
     &,CF_RML   ! As above but for rapidly mixing layer increment.         IMPMIX2C.145    
     &,RBF      ! Reciprocal of B for local increments to rml              IMPMIX2C.146    
     &,RBF_RML  ! As above but for the rapidly mixing layer increment.     IMPMIX2C.147    
     &,DTIMEG   ! TIMESTEP * G (used in several places).                   IMPMIX2C.148    
      INTEGER                                                              IMPMIX2C.149    
     & BLM1     ! BL_LEVELS minus 1.                                       IMPMIX2C.150    
     &,NRMLP1   ! NRML plus 1.                                             IMPMIX2C.151    
     &,I        ! Loop counter (horizontal field index).                   IMPMIX2C.152    
     &,J        ! Offset version of I.                                     IMPMIX2C.153    
     &,K        ! Loop counter (vertical index).                           IMPMIX2C.154    
     &,KM1      ! K minus 1.                                               IMPMIX2C.155    
     &,KP1      ! K plus 1.                                                IMPMIX2C.156    
C                                                                          IMPMIX2C.157    
      IF (LTIMER) THEN                                                     IMPMIX2C.158    
        CALL TIMER('IMPMIX  ',3)                                           IMPMIX2C.159    
      ENDIF                                                                IMPMIX2C.160    
                                                                           IMPMIX2C.161    
      ERROR=0                                                              IMPMIX2C.162    
                                                                           IMPMIX2C.163    
      DTIMEG = TIMESTEP * G                                                IMPMIX2C.164    
      BLM1 = BL_LEVELS-1                                                   IMPMIX2C.165    
                                                                           IMPMIX2C.166    
C                                                                          IMPMIX2C.167    
CL----------------------------------------------------------------------   IMPMIX2C.168    
CL (A) Calculations on P-grid.                                             IMPMIX2C.169    
CL----------------------------------------------------------------------   IMPMIX2C.170    
C                                                                          IMPMIX2C.171    
C-----------------------------------------------------------------------   IMPMIX2C.172    
CL 1.  Calculate pressure across layer (in hybrid coordinates), DELTAP,    IMPMIX2C.173    
CL     and then -gdt/dP = dt/rho*dz for use throughout section (A)         IMPMIX2C.174    
C-----------------------------------------------------------------------   IMPMIX2C.175    
C                                                                          IMPMIX2C.176    
      DO 1 K=1,BL_LEVELS                                                   IMPMIX2C.177    
        DO 11 I=P1,P1+P_POINTS-1                                           IMPMIX2C.178    
          DELTAP(I,K) = DELTA_AK(K) + PSTAR(I)*DELTA_BK(K)                 IMPMIX2C.179    
          DTRDZ(I,K) = -DTIMEG / DELTAP(I,K)                               IMPMIX2C.180    
   11   CONTINUE                                                           IMPMIX2C.181    
   1  CONTINUE                                                             IMPMIX2C.182    
C                                                                          IMPMIX2C.183    
C-----------------------------------------------------------------------   IMPMIX2C.184    
CL 2.  Calculate implicit FIELD increments due to local mixing within      IMPMIX2C.185    
CL     the rapidly mixing layer (where it exists).                         IMPMIX2C.186    
CL     The surface fluxes F_FIELD(I,1) and SURF_DEP_FLUX(I) are used for   IMPMIX2C.187    
CL     calculating the rapidly mixing layer increments so not here.        IMPMIX2C.188    
CL     Therefore the matrix equation we must solve to find the implicit    IMPMIX2C.189    
CL     FIELD increments due to local mixing within the rml does not        IMPMIX2C.190    
CL     have a "surface" row.                                               IMPMIX2C.191    
C-----------------------------------------------------------------------   IMPMIX2C.192    
C                                                                          IMPMIX2C.193    
C-----------------------------------------------------------------------   IMPMIX2C.194    
CL 2.1 Start 'upward sweep' with lowest model layer, which will be the     IMPMIX2C.195    
CL     bottom of the rapidly mixing layer (rml) if it exists.              IMPMIX2C.196    
C-----------------------------------------------------------------------   IMPMIX2C.197    
C                                                                          IMPMIX2C.198    
      DO 21 I=P1,P1+P_POINTS-1                                             IMPMIX2C.199    
        IF (NRML(I) .GE. 2) THEN                                           IMPMIX2C.200    
C                                                                          IMPMIX2C.201    
C  "Explicit" increments due to local mixing within the rml.               IMPMIX2C.202    
C                                                                          IMPMIX2C.203    
          D_FIELD(I,1) = -DTRDZ(I,1) * F_FIELD(I,2)                        IMPMIX2C.204    
C                                                                          IMPMIX2C.205    
C  Define matrix elements (CF always zero for this case).                  IMPMIX2C.206    
C                                                                          IMPMIX2C.207    
          AF(I,1) = -DTRDZ(I,1) * GAMMA_RHOKH_RDZ(I,2)                     IMPMIX2C.208    
          RBF = 1.0 / ( 1.0 - AF(I,1) )                                    IMPMIX2C.209    
C                                                                          IMPMIX2C.210    
C  Now start Gaussian elimination                                          IMPMIX2C.211    
C                                                                          IMPMIX2C.212    
          D_FIELD(I,1) = RBF * D_FIELD(I,1)                                IMPMIX2C.213    
          AF(I,1) = RBF * AF(I,1)                                          IMPMIX2C.214    
C                                                                          IMPMIX2C.215    
C  Start calculating DELTAP_RML. Mid-level depths added in 2.2 below.      IMPMIX2C.216    
C                                                                          IMPMIX2C.217    
          DELTAP_RML(I) = DELTAP(I,1)                                      IMPMIX2C.218    
        ELSE ! No rapidly mixing layer calculations                        IMPMIX2C.219    
          DTRDZ_RML(I) = 1.E30                                             IMPMIX2C.220    
          DFLD_RML(I) = 1.E30                                              IMPMIX2C.221    
          AF_RML(I) = 1.E30                                                IMPMIX2C.222    
          DELTAP_RML(I) = 1.E30                                            IMPMIX2C.223    
        ENDIF                                                              IMPMIX2C.224    
   21 CONTINUE                                                             IMPMIX2C.225    
C                                                                          IMPMIX2C.226    
C-----------------------------------------------------------------------   IMPMIX2C.227    
CL 2.2 Continue upward sweep through middle of the rapidly mixing layer    IMPMIX2C.228    
CL     (if it exists) and to its top. NB NRML is always < or = BLM1.       IMPMIX2C.229    
C-----------------------------------------------------------------------   IMPMIX2C.230    
C                                                                          IMPMIX2C.231    
      DO 22 K=2,BLM1                                                       IMPMIX2C.232    
        KP1 = K+1                                                          IMPMIX2C.233    
        KM1 = K-1                                                          IMPMIX2C.234    
        DO 221 I=P1,P1+P_POINTS-1                                          IMPMIX2C.235    
C                                                                          IMPMIX2C.236    
C   If in the top rapidly mixing layer then do not include flux at its     IMPMIX2C.237    
C   top in the calculation, i.e. F_FIELD(I,NRML+1) is not                  IMPMIX2C.238    
C   included here; it is taken account of in the non-local mixing          IMPMIX2C.239    
C   through the "rapidly mixing layer".                                    IMPMIX2C.240    
C                                                                          IMPMIX2C.241    
          IF ( K .EQ. NRML(I) ) THEN                                       IMPMIX2C.242    
C                                                                          IMPMIX2C.243    
C   Add final DELTAP contribution to DELTAP_RML and then calculate         IMPMIX2C.244    
C   DTRDZ_RML.  Lower level contributions added in 2.1 and below.          IMPMIX2C.245    
C                                                                          IMPMIX2C.246    
            DELTAP_RML(I) = DELTAP_RML(I) + DELTAP(I,K)                    IMPMIX2C.247    
            DTRDZ_RML(I) = -DTIMEG / DELTAP_RML(I)                         IMPMIX2C.248    
C                                                                          IMPMIX2C.249    
C  "Explicit" flux divergence across layer giving explicit                 IMPMIX2C.250    
C  increment due to the local mixing at the top of rml.                    IMPMIX2C.251    
C                                                                          IMPMIX2C.252    
            D_FIELD(I,K) = DTRDZ(I,K) * F_FIELD(I,K)                       IMPMIX2C.253    
C                                                                          IMPMIX2C.254    
C  Define matrix elements (AF always zero for this case).                  IMPMIX2C.255    
C                                                                          IMPMIX2C.256    
            CF = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,K)                        IMPMIX2C.257    
            RBF = 1.0 / ( 1.0 - CF*( 1.0 + AF(I,KM1) ) )                   IMPMIX2C.258    
C                                                                          IMPMIX2C.259    
C  Now start Gaussian elimination                                          IMPMIX2C.260    
C                                                                          IMPMIX2C.261    
            D_FIELD(I,K) = RBF * ( D_FIELD(I,K)                            IMPMIX2C.262    
     &                                   - CF*D_FIELD(I,KM1) )             IMPMIX2C.263    
          ELSEIF (K .LT. NRML(I)) THEN                                     IMPMIX2C.264    
C                                                                          IMPMIX2C.265    
C  Add layer depths to form total rml depth.                               IMPMIX2C.266    
C                                                                          IMPMIX2C.267    
            DELTAP_RML(I) = DELTAP_RML(I) + DELTAP(I,K)                    IMPMIX2C.268    
C                                                                          IMPMIX2C.269    
C  "Explicit" flux divergence across layer giving explicit                 IMPMIX2C.270    
C  increment due to the local mixing.                                      IMPMIX2C.271    
C                                                                          IMPMIX2C.272    
            D_FIELD(I,K) = -DTRDZ(I,K) * (F_FIELD(I,KP1) - F_FIELD(I,K))   IMPMIX2C.273    
C                                                                          IMPMIX2C.274    
C  Define matrix elements.                                                 IMPMIX2C.275    
C                                                                          IMPMIX2C.276    
            AF(I,K) = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,KP1)                 IMPMIX2C.277    
            CF = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,K)                        IMPMIX2C.278    
            RBF = 1.0 / ( 1.0 - AF(I,K) - CF * ( 1.0 + AF(I,KM1) ) )       IMPMIX2C.279    
C                                                                          IMPMIX2C.280    
C  Now start Gaussian elimination                                          IMPMIX2C.281    
C                                                                          IMPMIX2C.282    
            D_FIELD(I,K) = RBF * ( D_FIELD(I,K) - CF*D_FIELD(I,KM1) )      IMPMIX2C.283    
            AF(I,K) = RBF * AF(I,K)                                        IMPMIX2C.284    
          ENDIF                                                            IMPMIX2C.285    
  221   CONTINUE                                                           IMPMIX2C.286    
   22 CONTINUE                                                             IMPMIX2C.287    
C                                                                          IMPMIX2C.288    
C-----------------------------------------------------------------------   IMPMIX2C.289    
CL 2.3 Downward sweep through matrix. Add implicit increments due to       IMPMIX2C.290    
CL     local mixing within the rapidly mixing layer.  Update surface       IMPMIX2C.291    
CL     deposition flux and the top-of-rml tracer flux using                IMPMIX2C.292    
CL     local mixing increments for layers 1 and NRML respectively.         IMPMIX2C.293    
C-----------------------------------------------------------------------   IMPMIX2C.294    
C                                                                          IMPMIX2C.295    
      DO 23 K=BLM1,1,-1                                                    IMPMIX2C.296    
        KP1 = K + 1                                                        IMPMIX2C.297    
        DO 231 I=P1,P1+P_POINTS-1                                          IMPMIX2C.298    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRML(I))) THEN                IMPMIX2C.299    
            FIELD(I,K) = FIELD(I,K) + D_FIELD(I,K)                         IMPMIX2C.300    
            F_FIELD(I,KP1) = F_FIELD(I,KP1)                                IMPMIX2C.301    
     &                          + GAMMA_RHOKH_RDZ(I,KP1)*D_FIELD(I,K)      IMPMIX2C.302    
          ELSEIF ((NRML(I) .GE. 2) .AND. (K .LT. NRML(I))) THEN            IMPMIX2C.303    
            D_FIELD(I,K) = D_FIELD(I,K)                                    IMPMIX2C.304    
     &                           - AF(I,K)*D_FIELD(I,KP1)                  IMPMIX2C.305    
            FIELD(I,K) = FIELD(I,K) + D_FIELD(I,K)                         IMPMIX2C.306    
          ENDIF                                                            IMPMIX2C.307    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. 1)) THEN                      IMPMIX2C.308    
            SURF_DEP_FLUX(I) = SURF_DEP_FLUX(I)                            IMPMIX2C.309    
     &                           - GAMMA_RHOK_DEP(I) * D_FIELD(I,1)        IMPMIX2C.310    
          ENDIF                                                            IMPMIX2C.311    
  231   CONTINUE                                                           IMPMIX2C.312    
   23 CONTINUE                                                             IMPMIX2C.313    
C                                                                          IMPMIX2C.314    
C-----------------------------------------------------------------------   IMPMIX2C.315    
CL 4.  Calculate those matrix and vector elements on the LHS of eqn        IMPMIX2C.316    
CL     which are to do with implicit solution of the tracer                IMPMIX2C.317    
CL     transport problem at the surface, above the rml (if it exists)      IMPMIX2C.318    
CL     and between all levels if it does not.                              IMPMIX2C.319    
CL     Begin with "upward sweep" through lower half of matrix).            IMPMIX2C.320    
C-----------------------------------------------------------------------   IMPMIX2C.321    
C                                                                          IMPMIX2C.322    
      DO 31 I=P1,P1+P_POINTS-1                                             IMPMIX2C.323    
C-----------------------------------------------------------------------   IMPMIX2C.324    
CL 4.2 Lowest atmospheric layer FIELD row of matrix.                       IMPMIX2C.325    
C-----------------------------------------------------------------------   IMPMIX2C.326    
        IF (NRML(I) .GE. 2) THEN                                           IMPMIX2C.327    
          NRMLP1 = NRML(I) + 1                                             IMPMIX2C.328    
C                                                                          IMPMIX2C.329    
C  "Explicit" rapidly mixing layer increment for FIELD.                    IMPMIX2C.330    
C                                                                          IMPMIX2C.331    
          DFLD_RML(I) = -DTRDZ_RML(I) *                                    IMPMIX2C.332    
     &                 (F_FIELD(I,NRMLP1) - F_FIELD(I,1)                   IMPMIX2C.333    
     &                                    - SURF_DEP_FLUX(I))              IMPMIX2C.334    
          AF_RML(I) = -DTRDZ_RML(I) * GAMMA_RHOKH_RDZ(I,NRMLP1)            IMPMIX2C.335    
          CF_RML = -DTRDZ_RML(I) * GAMMA_RHOK_DEP(I)                       IMPMIX2C.336    
          RBF_RML = 1.0 / ( 1.0 - AF_RML(I) - CF_RML )                     IMPMIX2C.337    
          DFLD_RML(I) = RBF_RML * DFLD_RML(I)                              IMPMIX2C.338    
          AF_RML(I) = RBF_RML * AF_RML(I)                                  IMPMIX2C.339    
        ELSE                                                               IMPMIX2C.340    
C                                                                          IMPMIX2C.341    
C "Explicit" increment to FIELD(1) when there is no rapidly mixing layer   IMPMIX2C.342    
C  or it does not extend beyond the bottom model layer.                    IMPMIX2C.343    
C                                                                          IMPMIX2C.344    
          D_FIELD(I,1) = -DTRDZ(I,1) *                                     IMPMIX2C.345    
     &                   ( F_FIELD(I,2) - F_FIELD(I,1)                     IMPMIX2C.346    
     &                                  - SURF_DEP_FLUX(I) )               IMPMIX2C.347    
                                                                           IMPMIX2C.348    
          CF = -DTRDZ(I,1) * GAMMA_RHOK_DEP(I)                             IMPMIX2C.349    
          AF(I,1) = -DTRDZ(I,1) * GAMMA_RHOKH_RDZ(I,2)                     IMPMIX2C.350    
          RBF = 1.0 / ( 1.0 - AF(I,1) - CF )                               IMPMIX2C.351    
          D_FIELD(I,1) = RBF * D_FIELD(I,1)                                IMPMIX2C.352    
          AF(I,1) = RBF * AF(I,1)                                          IMPMIX2C.353    
        ENDIF                                                              IMPMIX2C.354    
   31 CONTINUE                                                             IMPMIX2C.355    
C-----------------------------------------------------------------------   IMPMIX2C.356    
CL 4.3 Rows of matrix applying to FIELD transport into model layers in     IMPMIX2C.357    
CL     the "middle" of the "boundary" layer, i.e. all but the bottom       IMPMIX2C.358    
CL     layer and the top "boundary" layer.                                 IMPMIX2C.359    
C-----------------------------------------------------------------------   IMPMIX2C.360    
      DO 43 K=2,BLM1                                                       IMPMIX2C.361    
        KP1 = K+1                                                          IMPMIX2C.362    
        KM1 = K-1                                                          IMPMIX2C.363    
        DO 431 I=P1,P1+P_POINTS-1                                          IMPMIX2C.364    
C                                                                          IMPMIX2C.365    
C   "Explicit" flux divergence across layer giving explicit FIELD          IMPMIX2C.366    
C   increment due to mixing above rml if it exists or for all levels if    IMPMIX2C.367    
C   it does not.                                                           IMPMIX2C.368    
C                                                                          IMPMIX2C.369    
          NRMLP1 = NRML(I) + 1                                             IMPMIX2C.370    
          IF (K .GT. NRML(I)) THEN                                         IMPMIX2C.371    
            D_FIELD(I,K) = -DTRDZ(I,K) * (F_FIELD(I,KP1) - F_FIELD(I,K))   IMPMIX2C.372    
            AF(I,K) = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,KP1)                 IMPMIX2C.373    
            CF = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,K)                        IMPMIX2C.374    
            IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRMLP1)) THEN               IMPMIX2C.375    
              RBF = 1.0 / ( 1.0 - AF(I,K)                                  IMPMIX2C.376    
     &                            - CF * ( 1.0 + AF_RML(I) ) )             IMPMIX2C.377    
              D_FIELD(I,K) = RBF * ( D_FIELD(I,K)                          IMPMIX2C.378    
     &                                    - CF*DFLD_RML(I) )               IMPMIX2C.379    
            ELSE                                                           IMPMIX2C.380    
              RBF = 1.0 / ( 1.0 - AF(I,K)                                  IMPMIX2C.381    
     &                            - CF * ( 1.0 + AF(I,KM1) ) )             IMPMIX2C.382    
              D_FIELD(I,K) = RBF * ( D_FIELD(I,K)                          IMPMIX2C.383    
     &                                    - CF*D_FIELD(I,KM1) )            IMPMIX2C.384    
            ENDIF                                                          IMPMIX2C.385    
            AF(I,K) = RBF * AF(I,K)                                        IMPMIX2C.386    
          ENDIF                                                            IMPMIX2C.387    
  431   CONTINUE                                                           IMPMIX2C.388    
   43 CONTINUE                                                             IMPMIX2C.389    
C-----------------------------------------------------------------------   IMPMIX2C.390    
CL 4.4 Top "boundary" layer FIELD row of matrix. FIELD for this layer      IMPMIX2C.391    
CL     can then be, and is, updated.                                       IMPMIX2C.392    
C-----------------------------------------------------------------------   IMPMIX2C.393    
      DO 44 I=P1,P1+P_POINTS-1                                             IMPMIX2C.394    
        D_FIELD(I,BL_LEVELS) = DTRDZ(I,BL_LEVELS) * F_FIELD(I,BL_LEVELS)   IMPMIX2C.395    
C                                                                          IMPMIX2C.396    
        CF = -DTRDZ(I,BL_LEVELS) * GAMMA_RHOKH_RDZ(I,BL_LEVELS)            IMPMIX2C.397    
        IF (NRML(I) .EQ. BLM1) THEN                                        IMPMIX2C.398    
          RBF = 1.0 / ( 1.0 - CF*( 1.0 + AF_RML(I) ) )                     IMPMIX2C.399    
          D_FIELD(I,BL_LEVELS) = RBF * ( D_FIELD(I,BL_LEVELS)              IMPMIX2C.400    
     &                                        - CF*DFLD_RML(I) )           IMPMIX2C.401    
        ELSE                                                               IMPMIX2C.402    
          RBF = 1.0 / ( 1.0 - CF*( 1.0 + AF(I,BLM1) ) )                    IMPMIX2C.403    
          D_FIELD(I,BL_LEVELS) = RBF * ( D_FIELD(I,BL_LEVELS)              IMPMIX2C.404    
     &                                        - CF*D_FIELD(I,BLM1) )       IMPMIX2C.405    
        ENDIF                                                              IMPMIX2C.406    
        FIELD(I,BL_LEVELS) = FIELD(I,BL_LEVELS) + D_FIELD(I,BL_LEVELS)     IMPMIX2C.407    
   44 CONTINUE                                                             IMPMIX2C.408    
C                                                                          IMPMIX2C.409    
C-----------------------------------------------------------------------   IMPMIX2C.410    
CL 5.  "Downward sweep" through whole matrix.  FIELD is updated when       IMPMIX2C.411    
CL     the final implicit increments have been calculated.                 IMPMIX2C.412    
C-----------------------------------------------------------------------   IMPMIX2C.413    
CL 5.1 Remaining FIELD rows of matrix and add implicit increments above    IMPMIX2C.414    
CL     the rml or at all levels if it is less than two layers thick.       IMPMIX2C.415    
C-----------------------------------------------------------------------   IMPMIX2C.416    
C                                                                          IMPMIX2C.417    
      DO 51 K=BLM1,1,-1                                                    IMPMIX2C.418    
        DO 511 I=P1,P1+P_POINTS-1                                          IMPMIX2C.419    
          IF ( (K .GT. NRML(I)) .OR. (NRML(I) .LT. 2) ) THEN               IMPMIX2C.420    
            D_FIELD(I,K) = D_FIELD(I,K) - AF(I,K)*D_FIELD(I,K+1)           IMPMIX2C.421    
            FIELD(I,K) = FIELD(I,K) + D_FIELD(I,K)                         IMPMIX2C.422    
          ENDIF                                                            IMPMIX2C.423    
  511   CONTINUE                                                           IMPMIX2C.424    
   51 CONTINUE                                                             IMPMIX2C.425    
C                                                                          IMPMIX2C.426    
C-----------------------------------------------------------------------   IMPMIX2C.427    
CL 5.2 Rapidly mixing layer increments                                     IMPMIX2C.428    
C-----------------------------------------------------------------------   IMPMIX2C.429    
      DO 52 I=P1,P1+P_POINTS-1                                             IMPMIX2C.430    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMPMIX2C.431    
          NRMLP1 = NRML(I) + 1                                             IMPMIX2C.432    
          DFLD_RML(I) = DFLD_RML(I) - AF_RML(I) * D_FIELD(I,NRMLP1)        IMPMIX2C.433    
          FIELD(I,1) = FIELD(I,1) + DFLD_RML(I)                            IMPMIX2C.434    
        ENDIF                                                              IMPMIX2C.435    
   52 CONTINUE                                                             IMPMIX2C.436    
C                                                                          IMPMIX2C.437    
C-----------------------------------------------------------------------   IMPMIX2C.438    
CL 5.4 Add implicit increments due to rapid mixing if in rapid mixing      IMPMIX2C.439    
CL     layer.                                                              IMPMIX2C.440    
C-----------------------------------------------------------------------   IMPMIX2C.441    
      DO 54 K=2,BL_LEVELS                                                  IMPMIX2C.442    
        DO 541 I=P1,P1+P_POINTS-1                                          IMPMIX2C.443    
          IF (K .LE. NRML(I)) THEN                                         IMPMIX2C.444    
C                                                                          IMPMIX2C.445    
C  Add the increments due to rapid mixing if in the rapidly mixing layer   IMPMIX2C.446    
C                                                                          IMPMIX2C.447    
            FIELD(I,K) = FIELD(I,K) + DFLD_RML(I)                          IMPMIX2C.448    
          ENDIF                                                            IMPMIX2C.449    
  541   CONTINUE                                                           IMPMIX2C.450    
   54 CONTINUE                                                             IMPMIX2C.451    
C                                                                          IMPMIX2C.452    
C-----------------------------------------------------------------------   IMPMIX2C.453    
CL 6.  Calculate final implicit flux of tracer.                            IMPMIX2C.454    
C-----------------------------------------------------------------------   IMPMIX2C.455    
CL 6.1 Surface fluxes.                                                     IMPMIX2C.456    
C-----------------------------------------------------------------------   IMPMIX2C.457    
C                                                                          IMPMIX2C.458    
      DO 61 I=P1,P1+P_POINTS-1                                             IMPMIX2C.459    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMPMIX2C.460    
          SURF_DEP_FLUX(I) = SURF_DEP_FLUX(I) - GAMMA_RHOK_DEP(I) *        IMPMIX2C.461    
     &                                                       DFLD_RML(I)   IMPMIX2C.462    
        ELSE                                                               IMPMIX2C.463    
          SURF_DEP_FLUX(I) = SURF_DEP_FLUX(I) - GAMMA_RHOK_DEP(I) *        IMPMIX2C.464    
     &                                                      D_FIELD(I,1)   IMPMIX2C.465    
        ENDIF                                                              IMPMIX2C.466    
   61 CONTINUE                                                             IMPMIX2C.467    
C                                                                          IMPMIX2C.468    
C-----------------------------------------------------------------------   IMPMIX2C.469    
CL 6.2 Fluxes at layer interfaces above the surface.                       IMPMIX2C.470    
C-----------------------------------------------------------------------   IMPMIX2C.471    
      DO 62 K=2,BL_LEVELS                                                  IMPMIX2C.472    
        KM1 = K-1                                                          IMPMIX2C.473    
        DO 621 I=P1,P1+P_POINTS-1                                          IMPMIX2C.474    
C                                                                          IMPMIX2C.475    
C  Calculate and store fluxes due to local mixing.                         IMPMIX2C.476    
C  F_FIELD(local mixing) stored in array AF.                               IMPMIX2C.477    
C                                                                          IMPMIX2C.478    
          NRMLP1 = NRML(I) + 1                                             IMPMIX2C.479    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRMLP1)) THEN                 IMPMIX2C.480    
            AF(I,K) = F_FIELD(I,K) - GAMMA_RHOKH_RDZ(I,K)                  IMPMIX2C.481    
     &                              * ( D_FIELD(I,K) - DFLD_RML(I) )       IMPMIX2C.482    
          ELSE                                                             IMPMIX2C.483    
            AF(I,K) = F_FIELD(I,K) - GAMMA_RHOKH_RDZ(I,K)                  IMPMIX2C.484    
     &                              * ( D_FIELD(I,K) - D_FIELD(I,KM1) )    IMPMIX2C.485    
          ENDIF                                                            IMPMIX2C.486    
C                                                                          IMPMIX2C.487    
C  Now calculate the implicit fluxes including both local mixing and       IMPMIX2C.488    
C  if appropriate also the fluxes due to rapid mixing through layers.      IMPMIX2C.489    
C                                                                          IMPMIX2C.490    
          IF ( K .EQ. 2 ) THEN                                             IMPMIX2C.491    
            IF ( NRML(I) .GE. 2 ) THEN                                     IMPMIX2C.492    
              F_FIELD(I,K) = AF(I,K)                                       IMPMIX2C.493    
     &                         + F_FIELD(I,KM1) + SURF_DEP_FLUX(I)         IMPMIX2C.494    
     &                         - DFLD_RML(I) / DTRDZ(I,KM1)                IMPMIX2C.495    
            ELSE                                                           IMPMIX2C.496    
              F_FIELD(I,K) = AF(I,K)                                       IMPMIX2C.497    
            ENDIF                                                          IMPMIX2C.498    
          ELSEIF ( K .LE. NRML(I) ) THEN                                   IMPMIX2C.499    
            F_FIELD(I,K) = AF(I,K) - AF(I,KM1)                             IMPMIX2C.500    
     &                     + F_FIELD(I,KM1) - DFLD_RML(I) / DTRDZ(I,KM1)   IMPMIX2C.501    
          ELSE                                                             IMPMIX2C.502    
            F_FIELD(I,K) = AF(I,K)                                         IMPMIX2C.503    
          ENDIF                                                            IMPMIX2C.504    
  621   CONTINUE                                                           IMPMIX2C.505    
   62 CONTINUE                                                             IMPMIX2C.506    
C                                                                          IMPMIX2C.507    
  999 CONTINUE   ! Branch for error exit.                                  IMPMIX2C.508    
                                                                           IMPMIX2C.509    
      IF (LTIMER) THEN                                                     IMPMIX2C.510    
        CALL TIMER('IMPMIX  ',4)                                           IMPMIX2C.511    
      ENDIF                                                                IMPMIX2C.512    
                                                                           IMPMIX2C.513    
      RETURN                                                               IMPMIX2C.514    
      END                                                                  IMPMIX2C.515    
*ENDIF                                                                     IMPMIX2C.516