*IF DEF,A03_5A                                                             AJS1F401.1485   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.14487  
C                                                                          GTS2F400.14488  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.14489  
C restrictions as set forth in the contract.                               GTS2F400.14490  
C                                                                          GTS2F400.14491  
C                Meteorological Office                                     GTS2F400.14492  
C                London Road                                               GTS2F400.14493  
C                BRACKNELL                                                 GTS2F400.14494  
C                Berkshire UK                                              GTS2F400.14495  
C                RG12 2SZ                                                  GTS2F400.14496  
C                                                                          GTS2F400.14497  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.14498  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.14499  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.14500  
C Modelling at the above address.                                          GTS2F400.14501  
C ******************************COPYRIGHT******************************    GTS2F400.14502  
C                                                                          GTS2F400.14503  
C*LL  SUBROUTINE IMPL_CAL ----------------------------------------------   IMPLCA4A.3      
CLL                                                                        IMPLCA4A.4      
CLL  Purpose: Calculate increments for                                     IMPLCA4A.5      
CLL           atmospheric variables in the boundary layer, using an        IMPLCA4A.6      
CLL           implicit numerical scheme.  The tridiagonal matrices are     IMPLCA4A.7      
CLL           inverted using simple Gaussian elimination.                  IMPLCA4A.8      
CLL                                                                        IMPLCA4A.9      
CLL                                                                        IMPLCA4A.11     
CLL  Model           Modification history from model version 3.0           IMPLCA4A.12     
CLL version  Date                                                          IMPLCA4A.13     
CLL  3.1    12/01/93 Alternative, more complete implicit numerical         IMPLCA4A.14     
CLL                  scheme made available under *IF DEF,A03_2C.           IMPLCA4A.15     
CLL  3.3  07/07/93  Only versions 1B & 2C carried forward to UM3.3         IMPLCA4A.16     
CLL  3.4  06/06/94  DEF TIMER replaced by LOGICAL LTIMER                   IMPLCA4A.17     
CLL                  Argument LTIMER added                                 IMPLCA4A.18     
CLL                                                 S.J.Swarbrick          IMPLCA4A.19     
CLL   4.2   Oct. 96   T3E migration - *DEF CRAY removed                    GSS2F402.287    
CLL                                     S J Swarbrick                      GSS2F402.288    
!LL   4.3  14/01/97   MPP code : Corrected setting of polar rows           GPB1F403.160    
!LL                                                     P.Burton           GPB1F403.161    
CLL  4.5    Jul. 98  Kill the IBM specific lines (JCThil)                  AJC1F405.144    
CLL                                                                        IMPLCA4A.20     
CLL                                                                        IMPLCA4A.21     
CLL  FH, RNBS  <- Programmers of some or all of previous code or changes   IMPLCA4A.22     
CLL                                                                        IMPLCA4A.23     
CLL  Extensive modifications to incorporate Penman-Monteith                IMPLCA4A.24     
CLL  formulations                                                          IMPLCA4A.25     
CLL                                                                        IMPLCA4A.26     
CLL                                                J.Lean                  IMPLCA4A.27     
CLL                                                RE 31/10/94             IMPLCA4A.28     
CLL                                                                        IMPLCA4A.29     
CLL  Programming standard: UM Documentation Paper No 4, Version 2,         IMPLCA4A.30     
CLL                        dated 18/1/90                                   IMPLCA4A.31     
CLL                                                                        IMPLCA4A.32     
CLL  System component covered: P244                                        IMPLCA4A.33     
CLL                                                                        IMPLCA4A.34     
CLL  Project task: P24                                                     IMPLCA4A.35     
CLL                                                                        IMPLCA4A.36     
CLL  Documentation: UM Documentation Paper No 24.                          IMPLCA4A.37     
CLL                                                                        IMPLCA4A.38     
C*----------------------------------------------------------------------   IMPLCA4A.39     
C*L  Arguments :-                                                          IMPLCA4A.40     

      SUBROUTINE IMPL_CAL (                                                 2,8IMPLCA4A.41     
     + P_FIELD,U_FIELD,P1,U1,                                              IMPLCA4A.42     
     + P_POINTS,U_POINTS,BL_LEVELS,ROW_LENGTH,P_ROWS,U_ROWS                IMPLCA4A.43     
     +,ALPHA1,ASHTF,CDR10M,DELTA_AK,DELTA_BK                               IMPLCA4A.44     
     +,GAMMA_RHOKH_RDZ,GAMMA_RHOKM_RDZUV                                   IMPLCA4A.45     
     +,ICE_FRACT,LYING_SNOW,PSTAR,RADNET,RESFT,RHOKPM,RHOKPM_POT           ANG1F405.171    
     +,U0,V0,TIMESTEP,LAND_MASK,SU10,SV10                                  IMPLCA4A.47     
     +,EPOT,FQW,FTL,E_SEA,H_SEA,QW                                         ANG1F405.172    
     +,GAMMA_RHOKE,GAMMA_RHOKH_1,GAMMA_RHOKM_1,TL,U,V                      IMPLCA4A.49     
     +,DTRDZ,DTRDZ_RML,TAUX,TAUY,SURF_HT_FLUX,U10M,V10M,NRML               IMPLCA4A.50     
     +,ERROR,LTIMER                                                        IMPLCA4A.51     
     +)                                                                    IMPLCA4A.52     
      IMPLICIT NONE                                                        IMPLCA4A.53     
      LOGICAL LTIMER                                                       IMPLCA4A.54     
      INTEGER                                                              IMPLCA4A.55     
     + P_FIELD                     ! IN No. of points in P-grid.           IMPLCA4A.56     
     +,U_FIELD                     ! IN No. of points in UV-grid.          IMPLCA4A.57     
     +,P1                          ! IN First point to be processed in     IMPLCA4A.58     
C                                  !    P-grid.                            IMPLCA4A.59     
     +,U1                          ! IN First point to be processed in     IMPLCA4A.60     
C                                  !    UV-grid.                           IMPLCA4A.61     
     +,P_POINTS                    ! IN Number of P-grid points to be      IMPLCA4A.62     
C                                  !    processed.                         IMPLCA4A.63     
     +,U_POINTS                    ! IN Number of UV-grid points.          IMPLCA4A.67     
     +,BL_LEVELS                   ! IN No. of atmospheric levels for      IMPLCA4A.71     
C                                  !    which boundary layer fluxes are    IMPLCA4A.72     
C                                  !    calculated.                        IMPLCA4A.73     
     +,ROW_LENGTH                  ! IN No. of points in latitude row.     IMPLCA4A.74     
     +,P_ROWS                      ! IN No. of P-rows of data to be        IMPLCA4A.78     
C                                  !    processed.                         IMPLCA4A.79     
     +,U_ROWS                      ! IN No. of UV-rows of data to be       IMPLCA4A.83     
C                                  !    processed.                         IMPLCA4A.84     
      REAL                                                                 IMPLCA4A.88     
     + ALPHA1(P_FIELD)             ! IN Gradient of saturated specific     IMPLCA4A.89     
C                                  !    humidity with respect to           IMPLCA4A.90     
C                                  !    temperature between the bottom     IMPLCA4A.91     
C                                  !    model layer and the surface.       IMPLCA4A.92     
     +,ASHTF(P_FIELD)              ! IN Coefficient to calculate surface   IMPLCA4A.93     
C                                  !    heat flux into soil or sea-ice     IMPLCA4A.94     
C                                  !    (W/m2/K).                          IMPLCA4A.95     
     +,CDR10M(U_FIELD)             ! IN Used in calc of 10m wind - from    IMPLCA4A.96     
C                                  !    P243 (routine SF_EXCH).  First     IMPLCA4A.97     
C                                  !    and last rows are "missing data"   IMPLCA4A.98     
C                                  !    and not used.  UV-grid.            IMPLCA4A.99     
     +,DELTA_AK(BL_LEVELS)         ! IN Difference of hybrid 'A' across    IMPLCA4A.100    
C                                  !    boundary layers (K-1/2 to K+1/2)   IMPLCA4A.101    
C                                  !    (upper minus lower).               IMPLCA4A.102    
     +,DELTA_BK(BL_LEVELS)         ! IN Difference of hybrid 'B' across    IMPLCA4A.103    
C                                  !    boundary layers (K-1/2 to K+1/2)   IMPLCA4A.104    
C                                  !    (upper minus lower).               IMPLCA4A.105    
     +,GAMMA_RHOKH_RDZ(P_FIELD,2:BL_LEVELS)                                IMPLCA4A.106    
C                                  ! IN Exchange coeff for FTL above       IMPLCA4A.107    
C                                  !    surface, =GAMMA(K)*RHOKH(,K)       IMPLCA4A.108    
C                                  !    *RDZ(K) for K>=2 (from KMKH).      IMPLCA4A.109    
     +,GAMMA_RHOKM_RDZUV(U_FIELD,2:BL_LEVELS)                              IMPLCA4A.110    
C                                  ! IN Exchange coefficients for          IMPLCA4A.111    
C                                  !    momentum, on UV-grid with          IMPLCA4A.112    
C                                  !    first and last rows ignored.       IMPLCA4A.113    
C                                  !     =GAMMA(K)*RHOKM(,K)*RDZUV(,K)at   IMPLCA4A.114    
C                                  !    for K>=2 (from KMKH).              IMPLCA4A.115    
      REAL                         ! Split to avoid > 19 continuations.    IMPLCA4A.116    
     + ICE_FRACT(P_FIELD)          ! IN Fraction of grid-box which is      IMPLCA4A.117    
C                                  !    sea-ice (decimal fraction).        IMPLCA4A.118    
     +,LYING_SNOW(P_FIELD)         ! IN Lying snow (kg per sq m ie "mm")   IMPLCA4A.119    
     +,PSTAR(P_FIELD)              ! IN Surface pressure (Pa).             IMPLCA4A.120    
     +,RADNET(P_FIELD)             ! IN Area weighted ice component        IMPLCA4A.121    
C                                  !    of surface net radiation.          IMPLCA4A.122    
C                                  !    (+ve downwards, W per sq m)        IMPLCA4A.123    
     +,RESFT(P_FIELD)              ! IN Total resistance factor            IMPLCA4A.124    
     +,RHOKPM(P_FIELD)             ! IN Surface exchange coeff.            IMPLCA4A.125    
     +,RHOKPM_POT(P_FIELD)         ! IN Surface exchange coeff. for        ANG1F405.173    
!                                       potential evaporation.             ANG1F405.174    
     +,U0(U_FIELD)                 ! IN Westerly component of surface      IMPLCA4A.126    
C                                  !    current (m/s; 0 over land). UVG.   IMPLCA4A.127    
     +,V0(U_FIELD)                 ! IN Southerly component of surface     IMPLCA4A.128    
C                                  !    current (m/s; 0 over land). UVG.   IMPLCA4A.129    
     +,TIMESTEP                    ! IN Timestep in seconds.               IMPLCA4A.130    
      LOGICAL                                                              IMPLCA4A.131    
     + LAND_MASK(P_FIELD)          ! IN T for land, F elsewhere.           IMPLCA4A.132    
     +,SU10                        ! IN STASH flag for 10-metre W wind.    IMPLCA4A.133    
     +,SV10                        ! IN STASH flag for 10-metre S wind.    IMPLCA4A.134    
C                                                                          IMPLCA4A.135    
C  Next 5 arrays are all IN as "explicit" fluxes from P243 (SF_EXCH and    IMPLCA4A.136    
C  possibly KMKH), and OUT as "implicit" fluxes.                           IMPLCA4A.137    
C                                                                          IMPLCA4A.138    
      REAL                                                                 IMPLCA4A.139    
     + FQW(P_FIELD,BL_LEVELS)      ! INOUT Flux of QW (ie., for surface,   IMPLCA4A.140    
C                                  !       total evaporation). Kg/sq m/s   IMPLCA4A.141    
     &,EPOT(P_FIELD)               ! INOUT Potential evaporation rate.     ANG1F405.175    
     +,FTL(P_FIELD,BL_LEVELS)      ! INOUT Flux of TL (ie., for surface,   IMPLCA4A.142    
C                                  !       H/Cp where H is sensible heat   IMPLCA4A.143    
C                                  !       in W per sq m).                 IMPLCA4A.144    
     +,E_SEA(P_FIELD)              ! INOUT Evaporation from sea times      IMPLCA4A.145    
C                                  !       leads fraction (kg/m2/s).       IMPLCA4A.146    
C                                  !       Zero over land.                 IMPLCA4A.147    
     +,H_SEA(P_FIELD)              ! INOUT Surface sensible heat flux ov   IMPLCA4A.148    
C                                  !       sea times leads fraction (W/m   IMPLCA4A.149    
C                                  !       Zero over land.                 IMPLCA4A.150    
     +,QW(P_FIELD,BL_LEVELS)       ! INOUT Total water content (kg per     IMPLCA4A.151    
C                                  !       kg air).  From P243.            IMPLCA4A.152    
     +,GAMMA_RHOKE(P_FIELD)        ! IN    Surface exchange coeff. for     IMPLCA4A.153    
C                                  !       FQW, =GAMMA(1)*RHOKE from       IMPLCA4A.154    
C                                  !       SF_EXCH.                        IMPLCA4A.155    
C                                  !   OUT =RHOKE to satisfy STASH.        IMPLCA4A.156    
     +,GAMMA_RHOKH_1(P_FIELD)      ! IN    Surface exchange coeffs for     IMPLCA4A.157    
C                                  !       FTL, =GAMMA(1)*RHOKH(,1)        IMPLCA4A.158    
C                                  !       from P243 (SF_EXCH).            IMPLCA4A.159    
C                                  !   OUT =RHOKH_1 to satisfy STASH.      IMPLCA4A.160    
     +,GAMMA_RHOKM_1(U_FIELD)      ! IN    Surface exchange coeffs for     IMPLCA4A.161    
C                                  !       momentum, on UV-grid            IMPLCA4A.162    
C                                  !       with first and last rows        IMPLCA4A.163    
C                                  !       ignored. =GAMMA(1)*RHOKM(,1)    IMPLCA4A.164    
C                                  !       from P243 (SF_EXCH).            IMPLCA4A.165    
C                                  !   OUT =RHOKM_1 to satisfy STASH.      IMPLCA4A.166    
     +,TL(P_FIELD,BL_LEVELS)       ! INOUT Liquid/frozen water             IMPLCA4A.167    
C                                  !       temperature (K).  From P243.    IMPLCA4A.168    
     +,U(U_FIELD,BL_LEVELS)        ! INOUT Westerly wind (m/s).  On UV-    IMPLCA4A.169    
C                                  !       grid, 1st & last rows unused.   IMPLCA4A.170    
     +,V(U_FIELD,BL_LEVELS)        ! INOUT Southerly wind (m/s).  On UV-   IMPLCA4A.171    
C                                  !       grid, 1st & last rows unused.   IMPLCA4A.172    
      REAL                                                                 IMPLCA4A.173    
     + DTRDZ(P_FIELD,BL_LEVELS)    ! OUT -g.dt/dp for bottom BL_LEVELS     IMPLCA4A.174    
C                                  !     model layers (needed in P245).    IMPLCA4A.175    
     +,DTRDZ_RML(P_FIELD)          ! OUT -g.dt/dp for the rapidly          IMPLCA4A.176    
C                                  !     mixing layer (needed in P245).    IMPLCA4A.177    
     +,TAUX(U_FIELD,BL_LEVELS)     ! INOUT x-component of turbulent        IMPLCA4A.178    
C                                  !       stress at levels k-1/2;         IMPLCA4A.179    
C                                  !     eg. TAUX(,1) is surface stress.   IMPLCA4A.180    
C                                  !     UV-grid, 1st and last rows set    IMPLCA4A.181    
C                                  !     to "missing data". (N/sq m)       IMPLCA4A.182    
     +,TAUY(U_FIELD,BL_LEVELS)     ! INOUT y-component of turbulent        IMPLCA4A.183    
C                                  !       stress at levels k-1/2;         IMPLCA4A.184    
C                                  !     eg. TAUY(,1) is surface stress.   IMPLCA4A.185    
C                                  !     UV-grid, 1st and last rows set    IMPLCA4A.186    
C                                  !     to "missing data". (N/sq m)       IMPLCA4A.187    
     +,SURF_HT_FLUX(P_FIELD)       ! OUT Net downward heat flux at         IMPLCA4A.188    
C                                  !     surface over land or sea-ice      IMPLCA4A.189    
C                                  !     fraction of gridbox (W/m2).       IMPLCA4A.190    
     +,U10M(U_FIELD)               ! OUT Westerly wind at 10m (m/s).       IMPLCA4A.191    
C                                  !     1st & last rows "missing data".   IMPLCA4A.192    
     +,V10M(U_FIELD)               ! OUT Southerly wind at 10m (m/s).      IMPLCA4A.193    
C                                  !     1st & last rows "missing data".   IMPLCA4A.194    
      INTEGER                                                              IMPLCA4A.195    
     + NRML(P_FIELD)               ! IN The number of model layers         IMPLCA4A.196    
C                                  !    in the unstable rapidly mixing     IMPLCA4A.197    
C                                  !    layer. Zero if surface layer       IMPLCA4A.198    
C                                  !    is stable.                         IMPLCA4A.199    
     +,ERROR                       ! OUT 1 if bad arguments, else 0.       IMPLCA4A.200    
C*                                                                         IMPLCA4A.201    
C*L  External references :-                                                IMPLCA4A.202    
      EXTERNAL QSAT                                                        IMPLCA4A.203    
*IF -DEF,SCMA                                                              AJC1F405.145    
      EXTERNAL P_TO_UV                                                     IMPLCA4A.205    
*ENDIF                                                                     IMPLCA4A.206    
      EXTERNAL TIMER                                                       IMPLCA4A.207    
C*                                                                         IMPLCA4A.208    
C*L  Local and other symbolic constants :-                                 IMPLCA4A.209    
*CALL C_EPSLON                                                             IMPLCA4A.210    
*CALL C_G                                                                  IMPLCA4A.211    
*CALL C_LHEAT                                                              IMPLCA4A.212    
*CALL C_R_CP                                                               IMPLCA4A.213    
*CALL C_GAMMA                                                              IMPLCA4A.214    
*CALL C_SICEHC      ! Holds integer AI                                     IMPLCA4A.215    
      REAL LS                                                              IMPLCA4A.216    
      PARAMETER (                                                          IMPLCA4A.217    
     + LS=LC+LF     ! Latent heat of sublimation (J per kg).               IMPLCA4A.218    
     +)                                                                    IMPLCA4A.219    
C*                                                                         IMPLCA4A.220    
C*L Workspace :-                                                           IMPLCA4A.221    
C   6*BL_LEVELS + 2 blocks of real workspace are required.                 IMPLCA4A.222    
      REAL                                                                 IMPLCA4A.224    
     + AQ_AM(U_FIELD,BL_LEVELS)    ! As AQ: "Q" elements of matrix in      IMPLCA4A.225    
C                                  ! eqn P244.79 (modified during          IMPLCA4A.226    
C                                  ! Gaussian elimination process).        IMPLCA4A.227    
C                                  ! As AM: elements of matrix in eqn      IMPLCA4A.228    
C                                  ! P244.80 (also get modified).          IMPLCA4A.229    
     +,AQ_RML(U_FIELD)             ! Matrix element for humidity in        IMPLCA4A.230    
C                                  ! rapidly mixing layer. Then briefly    IMPLCA4A.231    
C                                  ! used for DELTAP on the UV grid.       IMPLCA4A.232    
     +,AT_ATQ(P_FIELD,BL_LEVELS)   ! Elements in atmospheric T rows of     IMPLCA4A.233    
C                                  ! matrix in eqn P244.79 (modified       IMPLCA4A.234    
C                                  ! during Gaussian elimination).         IMPLCA4A.235    
     +,AT_RML(P_FIELD)             ! Matrix element for temperature in     IMPLCA4A.236    
C                                  ! rapidly mixing layer.                 IMPLCA4A.237    
     +,BPM(P_FIELD)                ! Used in calculating elements of       IMPLCA4A.238    
C                                  ! TL(1) and QW(1) rows of matrix.       IMPLCA4A.239    
     +,DELTAP(U_FIELD,BL_LEVELS)   ! Vertical pressure difference across   IMPLCA4A.240    
C                                  ! hybrid layers (upper minus lower)     IMPLCA4A.241    
C                                  ! (Pa).                                 IMPLCA4A.242    
     +,DELTAP_RML(U_FIELD)         ! Vertical pressure difference across   IMPLCA4A.243    
C                                  ! the rapidly mixing layer (Pa).        IMPLCA4A.244    
     +,DQW_RML(P_FIELD)            ! Rapidly mixing layer increment        IMPLCA4A.245    
C                                  ! to QW.                                IMPLCA4A.246    
     +,DQW_DU(U_FIELD,BL_LEVELS)   ! As DQW: delta QW elements of vector   IMPLCA4A.247    
C                                  ! on RHS, then LHS, of eqn P244.79.     IMPLCA4A.248    
C                                  ! As DU: delta U elements of vector     IMPLCA4A.249    
C                                  ! on RHS, then LHS, of eqn P244.80.     IMPLCA4A.250    
     +,DTL_DV(U_FIELD,BL_LEVELS)   ! As DTL: delta TL (for atmosphere)     IMPLCA4A.251    
C                                  ! elements of vector on RHS, then       IMPLCA4A.252    
C                                  ! LHS, of eqn P244.79.                  IMPLCA4A.253    
C                                  ! As DV: delta V elements of vector     IMPLCA4A.254    
C                                  ! on RHS, then LHS, of eqn P244.80.     IMPLCA4A.255    
     +,DTL_RML(U_FIELD)            ! Delta TL for rapidly mixing layer.    IMPLCA4A.256    
     +,DTRDZ_UV(U_FIELD,BL_LEVELS) ! -g.dt/dp for model layers             IMPLCA4A.257    
C                                  ! interpolated to the UV-grid.          IMPLCA4A.258    
     +,FQW_ICE(P_FIELD)            ! "Explicit" surface flux of QW for     IMPLCA4A.259    
C                                  ! sea-ice fraction of gridsquare.       IMPLCA4A.260    
     +,FTL_ICE(P_FIELD)            ! "Explicit" surface flux of TL for     IMPLCA4A.261    
C                                  ! sea-ice fraction of gridsquare.       IMPLCA4A.262    
     +,LAT_HEAT(P_FIELD)           ! Latent heat of evaporation for        IMPLCA4A.263    
C                                  ! snow-free land or sublimation for     IMPLCA4A.264    
C                                  ! snow-covered land.                    IMPLCA4A.265    
C*                                                                         IMPLCA4A.309    
C  Local scalars :-                                                        IMPLCA4A.310    
      REAL                                                                 IMPLCA4A.311    
     + CTQ      ! Matrix element in P244.??, for local increments to rml   IMPLCA4A.312    
     +,CM       ! Matrix element in eqn P244.80.                           IMPLCA4A.313    
     +,CQ       ! Matrix element in "Q" row in eqn P244.79.                IMPLCA4A.314    
     +,CQ_RML   ! As above but for rapidly mixing layer increment.         IMPLCA4A.315    
     +,CT       ! Matrix element in "T" row in eqn P244.79.                IMPLCA4A.316    
     +,CT_RML   ! As above but for rapidly mixing layer increment.         IMPLCA4A.317    
     +,DTL      ! Increment in TL.                                         IMPLCA4A.318    
     +,DQW      ! Increment in QW.                                         IMPLCA4A.319    
     +,RBTQ     ! Reciprocal of B P244.??, for local increments to rml     IMPLCA4A.320    
     +,RBM      ! Reciprocal of BM(') (eqns P244.81, 85, 89).              IMPLCA4A.321    
     +,RBQ      ! Reciprocal of BQ(') (eqns P244.98, 101, 104).            IMPLCA4A.322    
     +,RBQ_RML  ! As above but for the rapidly mixing layer increment.     IMPLCA4A.323    
     +,RBT      ! Reciprocal of BT' (eqns P244.107, 110, 113).             IMPLCA4A.324    
     +,RBT_RML  ! As above but for the rapidly mixing layer increment.     IMPLCA4A.325    
     +,GAMMA_RKE_DQ ! Used in calculation of implicit increments to        IMPLCA4A.326    
C                   ! surface latent and sesible heat fluxes.              IMPLCA4A.327    
     +,DTIMEG   ! TIMESTEP * G (used in several places).                   IMPLCA4A.328    
      INTEGER                                                              IMPLCA4A.329    
     + BLM1     ! BL_LEVELS minus 1.                                       IMPLCA4A.330    
     +,NRMLP1   ! NRML plus 1.                                             IMPLCA4A.331    
     +,I        ! Loop counter (horizontal field index).                   IMPLCA4A.332    
     +,J        ! Offset version of I.                                     IMPLCA4A.333    
     +,K        ! Loop counter (vertical index).                           IMPLCA4A.334    
     +,KM1      ! K minus 1.                                               IMPLCA4A.335    
     +,KP1      ! K plus 1.                                                IMPLCA4A.336    
*IF DEF,MPP                                                                GPB1F403.162    
! MPP Common block                                                         GPB1F403.163    
*CALL PARVARS                                                              GPB1F403.164    
*ENDIF                                                                     GPB1F403.165    
C                                                                          IMPLCA4A.337    
C-----------------------------------------------------------------------   IMPLCA4A.338    
CL  0.  Check that the scalars input to define the grid are consistent.    IMPLCA4A.339    
C       See comments to routine SF_EXCH for details.                       IMPLCA4A.340    
C-----------------------------------------------------------------------   IMPLCA4A.341    
C                                                                          IMPLCA4A.342    
      IF (LTIMER) THEN                                                     IMPLCA4A.343    
      CALL TIMER('IMPLCAL ',3)                                             IMPLCA4A.344    
      ENDIF                                                                IMPLCA4A.345    
      ERROR=0                                                              IMPLCA4A.346    
*IF DEF,MPP                                                                AJC1F405.146    
      IF (                                                                 AJC1F405.147    
*ELSEIF DEF,SCMA                                                           AJC1F405.148    
      IF ( U_ROWS .NE. (P_ROWS) .OR.                                       AJC1F405.149    
*ELSE                                                                      AJC1F405.150    
      IF ( U_ROWS .NE. (P_ROWS+1) .OR.                                     AJC1F405.151    
*ENDIF                                                                     AJC1F405.152    
     +     U_POINTS .NE. (U_ROWS*ROW_LENGTH) .OR.                          IMPLCA4A.355    
     +     P_POINTS .NE. (P_ROWS*ROW_LENGTH) )  THEN                       IMPLCA4A.356    
        ERROR=1                                                            IMPLCA4A.357    
        GOTO999                                                            IMPLCA4A.358    
      ENDIF                                                                IMPLCA4A.359    
      DTIMEG = TIMESTEP * G                                                IMPLCA4A.361    
      BLM1 = BL_LEVELS-1                                                   IMPLCA4A.362    
C                                                                          IMPLCA4A.363    
CL----------------------------------------------------------------------   IMPLCA4A.364    
CL (A) Calculations on P-grid.                                             IMPLCA4A.365    
CL----------------------------------------------------------------------   IMPLCA4A.366    
C                                                                          IMPLCA4A.367    
C-----------------------------------------------------------------------   IMPLCA4A.368    
CL 1.  Calculate pressure across layer (in hybrid coordinates), DELTAP,    IMPLCA4A.369    
CL     and then -gdt/dP = dt/rho*dz for use throughout section (A)         IMPLCA4A.370    
C-----------------------------------------------------------------------   IMPLCA4A.371    
C                                                                          IMPLCA4A.372    
      DO 1 K=1,BL_LEVELS                                                   IMPLCA4A.373    
        DO 11 I=P1,P1+P_POINTS-1                                           IMPLCA4A.374    
          DELTAP(I,K) = DELTA_AK(K) + PSTAR(I)*DELTA_BK(K)                 IMPLCA4A.375    
          DTRDZ(I,K) = -DTIMEG / DELTAP(I,K)                               IMPLCA4A.376    
   11   CONTINUE                                                           IMPLCA4A.377    
   1  CONTINUE                                                             IMPLCA4A.378    
C                                                                          IMPLCA4A.379    
C-----------------------------------------------------------------------   IMPLCA4A.380    
CL 2.  Calculate implicit T and Q increments due to local mixing within    IMPLCA4A.381    
CL     the rapidly mixing layer (where it exists).                         IMPLCA4A.382    
CL     The surface fluxes FTL(I,1), FQW(I,1) are used for calculating      IMPLCA4A.383    
CL     the rapidly mixing layer (rml) increments but not here.             IMPLCA4A.384    
CL     Therefore the matrix equation we must solve to find the implicit    IMPLCA4A.385    
CL     T and Q increments due to local mixing within the rml does not      IMPLCA4A.386    
CL     have a "surface" row and we can solve for the T and Q increments    IMPLCA4A.387    
CL     for K = 1 to NRML simultaneously.                                   IMPLCA4A.388    
C-----------------------------------------------------------------------   IMPLCA4A.389    
C                                                                          IMPLCA4A.390    
C-----------------------------------------------------------------------   IMPLCA4A.391    
CL 2.1 Start 'upward sweep' with lowest model layer, which will be the     IMPLCA4A.392    
CL     bottom of the rapidly mixing layer (rml) if it exists.              IMPLCA4A.393    
C-----------------------------------------------------------------------   IMPLCA4A.394    
C                                                                          IMPLCA4A.395    
      DO 21 I=P1,P1+P_POINTS-1                                             IMPLCA4A.396    
        LAT_HEAT(I) = LC                                                   IMPLCA4A.397    
        IF (LAND_MASK(I)) THEN                                             IMPLCA4A.398    
          IF (LYING_SNOW(I).GT.0.0) LAT_HEAT(I) = LS                       IMPLCA4A.399    
        ELSE                                                               IMPLCA4A.400    
          IF (ICE_FRACT(I).GT.0.0) LAT_HEAT(I) = LS                        IMPLCA4A.401    
        ENDIF                                                              IMPLCA4A.402    
        IF (NRML(I) .GE. 2) THEN                                           IMPLCA4A.403    
C                                                                          IMPLCA4A.404    
C  "Explicit" increments due to local mixing within the rml.               IMPLCA4A.405    
C  P244.49/31 but surface flux used in rml increment calculations.         IMPLCA4A.406    
C                                                                          IMPLCA4A.407    
          DQW_DU(I,1) = -DTRDZ(I,1) * FQW(I,2)                             IMPLCA4A.408    
          DTL_DV(I,1) = -DTRDZ(I,1) * FTL(I,2)                             IMPLCA4A.409    
C                                                                          IMPLCA4A.410    
C  Define matrix elements (CTQ always zero for this case).                 IMPLCA4A.411    
C                                                                          IMPLCA4A.412    
          AT_ATQ(I,1) = -DTRDZ(I,1) * GAMMA_RHOKH_RDZ(I,2)    ! P244.28    IMPLCA4A.413    
          RBTQ = 1.0 / ( 1.0 - AT_ATQ(I,1) )    ! Reciprocal of P244.110   IMPLCA4A.414    
C                                                                          IMPLCA4A.415    
C  Now start Gaussian elimination                                          IMPLCA4A.416    
C                                                                          IMPLCA4A.417    
          DQW_DU(I,1) = RBTQ * DQW_DU(I,1)                    ! P244.102   IMPLCA4A.418    
          DTL_DV(I,1) = RBTQ * DTL_DV(I,1)                    ! P244.111   IMPLCA4A.419    
          AT_ATQ(I,1) = RBTQ * AT_ATQ(I,1)                    ! P244.112   IMPLCA4A.420    
C                                                                          IMPLCA4A.421    
C  Start calculating DELTAP_RML. Mid-level depths added in 2.2 below.      IMPLCA4A.422    
C                                                                          IMPLCA4A.423    
          DELTAP_RML(I) = DELTAP(I,1)                                      IMPLCA4A.424    
        ELSE ! No rapidly mixing layer calculations                        IMPLCA4A.425    
          DTRDZ_RML(I) = 1.E30                                             IMPLCA4A.426    
          DQW_RML(I) = 1.E30                                               IMPLCA4A.427    
          DTL_RML(I) = 1.E30                                               IMPLCA4A.428    
          AQ_RML(I) = 1.E30                                                IMPLCA4A.429    
          AT_RML(I) = 1.E30                                                IMPLCA4A.430    
          DELTAP_RML(I) = 1.E30                                            IMPLCA4A.431    
        ENDIF                                                              IMPLCA4A.432    
   21 CONTINUE                                                             IMPLCA4A.433    
C                                                                          IMPLCA4A.434    
C-----------------------------------------------------------------------   IMPLCA4A.435    
CL 2.2 Continue upward sweep through middle of the rapidly mixing layer    IMPLCA4A.436    
CL     (if it exists) and to its top. NB NRML is always <= BLM1.           IMPLCA4A.437    
C-----------------------------------------------------------------------   IMPLCA4A.438    
C                                                                          IMPLCA4A.439    
      DO 22 K=2,BLM1                                                       IMPLCA4A.440    
        KP1 = K+1                                                          IMPLCA4A.441    
        KM1 = K-1                                                          IMPLCA4A.442    
        DO 221 I=P1,P1+P_POINTS-1                                          IMPLCA4A.443    
C                                                                          IMPLCA4A.444    
C   If in the top rapidly mixing layer then do not include flux at its     IMPLCA4A.445    
C   top in the calculation ie FQW(I,NRML+1) and FTL(I,NRML+1) are not      IMPLCA4A.446    
C   included here; they are taken account of in the non-local mixing       IMPLCA4A.447    
C   through the "rapidly mixing layer".                                    IMPLCA4A.448    
C                                                                          IMPLCA4A.449    
          IF ( K .EQ. NRML(I) ) THEN                                       IMPLCA4A.450    
C                                                                          IMPLCA4A.451    
C   Add final DELTAP contribution to DELTAP_RML and then calculate         IMPLCA4A.452    
C   DTRDZ_RML.  Lower level contributions added in 2.1 and below.          IMPLCA4A.453    
C                                                                          IMPLCA4A.454    
            DELTAP_RML(I) = DELTAP_RML(I) + DELTAP(I,K)                    IMPLCA4A.455    
            DTRDZ_RML(I) = -DTIMEG / DELTAP_RML(I)                         IMPLCA4A.456    
C                                                                          IMPLCA4A.457    
C  "Explicit" flux divergence across layer giving explicit                 IMPLCA4A.458    
C  increment due to the local mixing at the top of rml.                    IMPLCA4A.459    
C                                                                          IMPLCA4A.460    
            DQW_DU(I,K) = DTRDZ(I,K) * FQW(I,K)                            IMPLCA4A.461    
            DTL_DV(I,K) = DTRDZ(I,K) * FTL(I,K)                            IMPLCA4A.462    
C                                                                          IMPLCA4A.463    
C  Define matrix elements (A always zero for this case).                   IMPLCA4A.464    
C                                                                          IMPLCA4A.465    
            CTQ = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,K)           ! P244.36   IMPLCA4A.466    
            RBTQ = 1.0 / ( 1.0  - CTQ*( 1.0 + AT_ATQ(I,KM1) ) )            IMPLCA4A.467    
C                                             ... Reciprocal of P244.113   IMPLCA4A.468    
C  Now start Gaussian elimination                                          IMPLCA4A.469    
C                                                                          IMPLCA4A.470    
            DQW_DU(I,K) = RBTQ * ( DQW_DU(I,K) - CTQ*DQW_DU(I,KM1) )       IMPLCA4A.471    
            DTL_DV(I,K) = RBTQ * ( DTL_DV(I,K) - CTQ*DTL_DV(I,KM1) )       IMPLCA4A.472    
          ELSEIF (K .LT. NRML(I)) THEN                                     IMPLCA4A.473    
C                                                                          IMPLCA4A.474    
C  Add layer depths to form total rml depth.                               IMPLCA4A.475    
C                                                                          IMPLCA4A.476    
            DELTAP_RML(I) = DELTAP_RML(I) + DELTAP(I,K)                    IMPLCA4A.477    
C                                                                          IMPLCA4A.478    
C  "Explicit" flux divergence across layer giving explicit                 IMPLCA4A.479    
C  increment due to the local mixing.P244.54/38                            IMPLCA4A.480    
C                                                                          IMPLCA4A.481    
            DQW_DU(I,K) = -DTRDZ(I,K) * ( FQW(I,KP1) - FQW(I,K) )          IMPLCA4A.482    
            DTL_DV(I,K) = -DTRDZ(I,K) * ( FTL(I,KP1) - FTL(I,K) )          IMPLCA4A.483    
C                                                                          IMPLCA4A.484    
C  Define matrix elements.                                                 IMPLCA4A.485    
C                                                                          IMPLCA4A.486    
            AT_ATQ(I,K) = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,KP1) ! P244.35   IMPLCA4A.487    
            CTQ = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,K)           ! P244.36   IMPLCA4A.488    
            RBTQ = 1.0 / ( 1.0  - AT_ATQ(I,K)                              IMPLCA4A.489    
     &                          - CTQ * ( 1.0 + AT_ATQ(I,KM1) ) )          IMPLCA4A.490    
C                                             ... Reciprocal of P244.113   IMPLCA4A.491    
C  Now start Gaussian elimination                                          IMPLCA4A.492    
C                                                                          IMPLCA4A.493    
            DQW_DU(I,K) = RBTQ * ( DQW_DU(I,K) - CTQ*DQW_DU(I,KM1) )       IMPLCA4A.494    
            DTL_DV(I,K) = RBTQ * ( DTL_DV(I,K) - CTQ*DTL_DV(I,KM1) )       IMPLCA4A.495    
            AT_ATQ(I,K) = RBTQ * AT_ATQ(I,K)                 ! P244.115    IMPLCA4A.496    
          ENDIF                                                            IMPLCA4A.497    
  221   CONTINUE                                                           IMPLCA4A.498    
   22 CONTINUE                                                             IMPLCA4A.499    
C                                                                          IMPLCA4A.500    
C-----------------------------------------------------------------------   IMPLCA4A.501    
CL 2.3 Downward sweep through matrix. Add implicit increments due to       IMPLCA4A.502    
CL     local mixing within the rapidly mixing layer.  Update fluxes of     IMPLCA4A.503    
CL     heat and moisture at the surface and the top-of-rml using           IMPLCA4A.504    
CL     local mixing increments for layers 1 and NRML respectively.         IMPLCA4A.505    
C-----------------------------------------------------------------------   IMPLCA4A.506    
C                                                                          IMPLCA4A.507    
      DO 23 K=BLM1,1,-1                                                    IMPLCA4A.508    
        KP1 = K + 1                                                        IMPLCA4A.509    
        DO 231 I=P1,P1+P_POINTS-1                                          IMPLCA4A.510    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRML(I))) THEN                IMPLCA4A.511    
            QW(I,K) = QW(I,K) + DQW_DU(I,K)                   ! P244.128   IMPLCA4A.512    
            TL(I,K) = TL(I,K) + DTL_DV(I,K)                   ! P244.127   IMPLCA4A.513    
            FQW(I,KP1) = FQW(I,KP1)                                        IMPLCA4A.514    
     &                    + GAMMA_RHOKH_RDZ(I,KP1)*DQW_DU(I,K)             IMPLCA4A.515    
            FTL(I,KP1) = FTL(I,KP1)                                        IMPLCA4A.516    
     &                    + GAMMA_RHOKH_RDZ(I,KP1)*DTL_DV(I,K)             IMPLCA4A.517    
          ELSEIF ((NRML(I) .GE. 2) .AND. (K .LT. NRML(I))) THEN            IMPLCA4A.518    
            DQW_DU(I,K) = DQW_DU(I,K)                                      IMPLCA4A.519    
     &                           - AT_ATQ(I,K)*DQW_DU(I,KP1)  ! P244.???   IMPLCA4A.520    
            DTL_DV(I,K) = DTL_DV(I,K)                                      IMPLCA4A.521    
     &                           - AT_ATQ(I,K)*DTL_DV(I,KP1)  ! P244.???   IMPLCA4A.522    
            QW(I,K) = QW(I,K) + DQW_DU(I,K)                   ! P244.128   IMPLCA4A.523    
            TL(I,K) = TL(I,K) + DTL_DV(I,K)                   ! P244.127   IMPLCA4A.524    
          ENDIF                                                            IMPLCA4A.525    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. 1)) THEN                      IMPLCA4A.526    
            GAMMA_RKE_DQ = GAMMA_RHOKE(I) *                                IMPLCA4A.527    
     &                     (DQW_DU(I,1) - ALPHA1(I)*DTL_DV(I,1))           IMPLCA4A.528    
            IF (LAND_MASK(I)) THEN                                         IMPLCA4A.529    
              FTL(I,1) = FTL(I,1) + RHOKPM(I)*(LAT_HEAT(I)*GAMMA_RKE_DQ    IMPLCA4A.530    
     &                                 - GAMMA(1)*ASHTF(I)*DTL_DV(I,1))    IMPLCA4A.531    
              FQW(I,1) = FQW(I,1) - RHOKPM(I)*(CP*GAMMA_RKE_DQ             IMPLCA4A.532    
     &                        + GAMMA(1)*RESFT(I)*ASHTF(I)*DQW_DU(I,1))    IMPLCA4A.533    
              EPOT(I) = EPOT(I) - RHOKPM_POT(I)*(CP*GAMMA_RKE_DQ           ANG1F405.176    
     &                        + GAMMA(1)*ASHTF(I)*DQW_DU(I,1))             ANG1F405.177    
            ELSEIF (ICE_FRACT(I) .GT. 0.0) THEN                            IMPLCA4A.534    
              FQW_ICE(I) = FQW(I,1) - E_SEA(I) - RHOKPM(I) *               IMPLCA4A.535    
     &                (CP*GAMMA_RKE_DQ + GAMMA(1)*ASHTF(I)*DQW_DU(I,1))    IMPLCA4A.536    
              FTL_ICE(I) = FTL(I,1) - H_SEA(I)/CP + RHOKPM(I) *            IMPLCA4A.537    
     &                (LS*GAMMA_RKE_DQ - GAMMA(1)*ASHTF(I)*DTL_DV(I,1))    IMPLCA4A.538    
              E_SEA(I) = E_SEA(I) - (1.0 - ICE_FRACT(I)) *                 IMPLCA4A.539    
     &                                     GAMMA_RHOKH_1(I)*DQW_DU(I,1)    IMPLCA4A.540    
              H_SEA(I) = H_SEA(I) - (1.0 - ICE_FRACT(I)) * CP *            IMPLCA4A.541    
     &                                     GAMMA_RHOKH_1(I)*DTL_DV(I,1)    IMPLCA4A.542    
              FTL(I,1) = FTL_ICE(I) + H_SEA(I)/CP                          IMPLCA4A.543    
              FQW(I,1) = FQW_ICE(I) + E_SEA(I)                             IMPLCA4A.544    
              EPOT(I) = FQW_ICE(I) + E_SEA(I)                              ANG1F405.178    
            ELSE ! ordinary sea point                                      IMPLCA4A.545    
              FTL(I,1) = FTL(I,1) - GAMMA_RHOKH_1(I)*DTL_DV(I,1)           IMPLCA4A.546    
              FQW(I,1) = FQW(I,1) - GAMMA_RHOKH_1(I)*DQW_DU(I,1)           IMPLCA4A.547    
              EPOT(I) = EPOT(I) - GAMMA_RHOKH_1(I)*DQW_DU(I,1)             ANG1F405.179    
            ENDIF                                                          IMPLCA4A.548    
          ENDIF                                                            IMPLCA4A.549    
  231   CONTINUE                                                           IMPLCA4A.550    
   23 CONTINUE                                                             IMPLCA4A.551    
C                                                                          IMPLCA4A.552    
C-----------------------------------------------------------------------   IMPLCA4A.553    
CL 3.  Calculate those matrix and vector elements on the LHS of eqn        IMPLCA4A.554    
CL     P244.79 which are to do with implicit solution of the moisture      IMPLCA4A.555    
CL     transport problem at the surface, above the rml (if it exists)      IMPLCA4A.556    
CL     and between all levels if it does not.                              IMPLCA4A.557    
CL     Begin with "upward sweep" through lower half of matrix).            IMPLCA4A.558    
C-----------------------------------------------------------------------   IMPLCA4A.559    
CL 3.1 Row of matrix applying to QW transport into top "boundary"          IMPLCA4A.560    
CL     layer of model atmosphere.                                          IMPLCA4A.561    
C-----------------------------------------------------------------------   IMPLCA4A.562    
C                                                                          IMPLCA4A.563    
      DO 31 I=P1,P1+P_POINTS-1                                             IMPLCA4A.564    
        DQW_DU(I,BL_LEVELS) = DTRDZ(I,BL_LEVELS) * FQW(I,BL_LEVELS)        IMPLCA4A.565    
C                                                            ... P244.58   IMPLCA4A.566    
C                                                                          IMPLCA4A.567    
        AQ_AM(I,BL_LEVELS) = -DTRDZ(I,BL_LEVELS)               ! P244.56   IMPLCA4A.568    
     +                        * GAMMA_RHOKH_RDZ(I,BL_LEVELS)               IMPLCA4A.569    
C                                                                          IMPLCA4A.570    
        RBQ = 1.0 / ( 1.0 - AQ_AM(I,BL_LEVELS) )    ! Reciprocal P244.98   IMPLCA4A.571    
        DQW_DU(I,BL_LEVELS) = RBQ * DQW_DU(I,BL_LEVELS)        ! P244.99   IMPLCA4A.572    
        AQ_AM(I,BL_LEVELS) = RBQ * AQ_AM(I,BL_LEVELS)         ! P244.100   IMPLCA4A.573    
   31 CONTINUE                                                             IMPLCA4A.574    
C                                                                          IMPLCA4A.575    
C-----------------------------------------------------------------------   IMPLCA4A.576    
CL 3.2 Rows of matrix applying to "middle of boundary layer" model         IMPLCA4A.577    
CL     layers, i.e. all but the topmost and bottom layers.                 IMPLCA4A.578    
C-----------------------------------------------------------------------   IMPLCA4A.579    
C                                                                          IMPLCA4A.580    
      DO 32 K=BLM1,2,-1                                                    IMPLCA4A.581    
        KP1=K+1                                                            IMPLCA4A.582    
        DO 321 I=P1,P1+P_POINTS-1                                          IMPLCA4A.583    
C                                                                          IMPLCA4A.584    
C  "Explicit" flux divergence across layer giving explicit QW increment.   IMPLCA4A.585    
C                                                                          IMPLCA4A.586    
          IF ( K .GT. NRML(I) ) THEN                                       IMPLCA4A.587    
            DQW_DU(I,K) = -DTRDZ(I,K) * ( FQW(I,KP1) - FQW(I,K) )          IMPLCA4A.588    
C                                                            ... P244.54   IMPLCA4A.589    
C                                                                          IMPLCA4A.590    
            CQ = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,KP1)          ! P244.52   IMPLCA4A.591    
            AQ_AM(I,K) = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,K)    ! P244.51   IMPLCA4A.592    
            RBQ = 1.0 / ( 1.0 - AQ_AM(I,K) - CQ*( 1.0 + AQ_AM(I,KP1) ) )   IMPLCA4A.593    
C                       1                       2                    2 1   IMPLCA4A.594    
C                                             ... reciprocal of P244.101   IMPLCA4A.595    
C                                                                          IMPLCA4A.596    
            DQW_DU(I,K) = RBQ * ( DQW_DU(I,K) - CQ*DQW_DU(I,KP1) )         IMPLCA4A.597    
C                                                           ... P244.102   IMPLCA4A.598    
C                                                                          IMPLCA4A.599    
            AQ_AM(I,K) = RBQ * AQ_AM(I,K)                     ! P244.103   IMPLCA4A.600    
          ENDIF                                                            IMPLCA4A.601    
  321   CONTINUE                                                           IMPLCA4A.602    
   32 CONTINUE                                                             IMPLCA4A.603    
C                                                                          IMPLCA4A.604    
C-----------------------------------------------------------------------   IMPLCA4A.605    
CL 3.3 Bottom model layer QW row of matrix equation.                       IMPLCA4A.606    
C-----------------------------------------------------------------------   IMPLCA4A.607    
C                                                                          IMPLCA4A.608    
      DO 33 I=P1,P1+P_POINTS-1                                             IMPLCA4A.609    
        IF (LAND_MASK(I)) THEN                                             IMPLCA4A.610    
          BPM(I) = GAMMA(1)*ASHTF(I)*RHOKPM(I)                             IMPLCA4A.611    
        ELSE                                                               IMPLCA4A.612    
          BPM(I) = (1. - ICE_FRACT(I))*GAMMA_RHOKH_1(I) +                  IMPLCA4A.613    
     &                      GAMMA(1)*ASHTF(I)*RHOKPM(I)                    IMPLCA4A.614    
        ENDIF                                                              IMPLCA4A.615    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMPLCA4A.616    
C                                                                          IMPLCA4A.617    
C-----------------------------------------------------------------------   IMPLCA4A.618    
CL 3.3.1 Start calculating rapidly mixing layer increments.                IMPLCA4A.619    
C-----------------------------------------------------------------------   IMPLCA4A.620    
C                                                                          IMPLCA4A.621    
          NRMLP1 = NRML(I) + 1                                             IMPLCA4A.622    
C                                                                          IMPLCA4A.623    
C  "Explicit" QW increment for the rapidly mixing layer.                   IMPLCA4A.624    
C                                                                          IMPLCA4A.625    
          DQW_RML(I) = -DTRDZ_RML(I) * ( FQW(I,NRMLP1) - FQW(I,1) )        IMPLCA4A.626    
C                                                                          IMPLCA4A.627    
C  Define coefficients A,B,C, for implicit calculations.                   IMPLCA4A.628    
C                                                                          IMPLCA4A.629    
          AQ_RML(I) = - DTRDZ_RML(I)*GAMMA_RHOKE(I)*CP*RHOKPM(I)           IMPLCA4A.630    
          CQ_RML = -DTRDZ_RML(I) * GAMMA_RHOKH_RDZ(I,NRMLP1)               IMPLCA4A.631    
          RBQ_RML = 1./(1. - AQ_RML(I) - CQ_RML*(1. + AQ_AM(I,NRMLP1))     IMPLCA4A.632    
     &                                + DTRDZ_RML(I)*RESFT(I)*BPM(I) )     IMPLCA4A.633    
          DQW_RML(I) = RBQ_RML * ( DQW_RML(I)                              IMPLCA4A.634    
     &                                 - CQ_RML * DQW_DU(I,NRMLP1) )       IMPLCA4A.635    
          AQ_RML(I) = RBQ_RML * AQ_RML(I)                                  IMPLCA4A.636    
        ELSE                                                               IMPLCA4A.637    
C                                                                          IMPLCA4A.638    
C  "Explicit" increment for QW(1) when there is no rapidly mixing          IMPLCA4A.639    
C  layer or when it is only one model layer in depth.                      IMPLCA4A.640    
C                                                                          IMPLCA4A.641    
          DQW_DU(I,1) = - DTRDZ(I,1)*(FQW(I,2) - FQW(I,1))                 IMPLCA4A.642    
          AQ_AM(I,1) = - DTRDZ(I,1)*GAMMA_RHOKE(I)*CP*RHOKPM(I)            IMPLCA4A.643    
          CQ = - DTRDZ(I,1)*GAMMA_RHOKH_RDZ(I,2)                           IMPLCA4A.644    
          RBQ = 1./( 1. - AQ_AM(I,1) - CQ*(1. + AQ_AM(I,2))                IMPLCA4A.645    
     &                               + DTRDZ(I,1)*RESFT(I)*BPM(I) )        IMPLCA4A.646    
          DQW_DU(I,1) = RBQ*(DQW_DU(I,1) - CQ*DQW_DU(I,2))                 IMPLCA4A.647    
          AQ_AM(I,1) = RBQ*AQ_AM(I,1)                                      IMPLCA4A.648    
        ENDIF                                                              IMPLCA4A.649    
   33 CONTINUE                                                             IMPLCA4A.650    
C                                                                          IMPLCA4A.651    
C-----------------------------------------------------------------------   IMPLCA4A.652    
CL 4.  Calculate those matrix and vector elements on the LHS of eqn        IMPLCA4A.653    
CL     P244.79 which are to do with implicit solution of the heat          IMPLCA4A.654    
CL     transport problem (i.e. for ice/liquid                              IMPLCA4A.655    
CL     water temperatures in atmospheric boundary layer), and begin the    IMPLCA4A.656    
CL     solution algorithm (perform "upward sweep" through upper half of    IMPLCA4A.657    
CL     matrix).                                                            IMPLCA4A.658    
C-----------------------------------------------------------------------   IMPLCA4A.659    
C-----------------------------------------------------------------------   IMPLCA4A.660    
CL 4.2 Lowest atmospheric layer TL row of matrix.                          IMPLCA4A.661    
C-----------------------------------------------------------------------   IMPLCA4A.662    
      DO 41 I=P1,P1+P_POINTS-1                                             IMPLCA4A.663    
        IF (NRML(I) .GE. 2) THEN                                           IMPLCA4A.664    
          NRMLP1 = NRML(I) + 1                                             IMPLCA4A.665    
C                                                                          IMPLCA4A.666    
C  "Explicit" rapidly mixing layer increment for TL.                       IMPLCA4A.667    
C                                                                          IMPLCA4A.668    
          DTL_RML(I) = - DTRDZ_RML(I) * ( FTL(I,NRMLP1) - FTL(I,1) )       IMPLCA4A.669    
          AT_RML(I) = - DTRDZ_RML(I) * GAMMA_RHOKH_RDZ(I,NRMLP1)           IMPLCA4A.670    
          CT_RML = - DTRDZ_RML(I)*GAMMA_RHOKE(I)*LAT_HEAT(I)*RHOKPM(I)     IMPLCA4A.671    
          RBT_RML = 1./(1. - AT_RML(I) - ALPHA1(I)*CT_RML*(1.+AQ_RML(I))   IMPLCA4A.672    
     &                                 + DTRDZ_RML(I)*BPM(I) )             IMPLCA4A.673    
          DTL_RML(I) = RBT_RML*(DTL_RML(I) - CT_RML*DQW_RML(I))            IMPLCA4A.674    
          AT_RML(I) = RBT_RML * AT_RML(I)                                  IMPLCA4A.675    
        ELSE                                                               IMPLCA4A.676    
C                                                                          IMPLCA4A.677    
C  "Explicit" increment to TL(1) when there is no rapidly mixing layer     IMPLCA4A.678    
C  or it does not extend beyond the bottom model layer.                    IMPLCA4A.679    
C                                                                          IMPLCA4A.680    
          DTL_DV(I,1) = - DTRDZ(I,1)*(FTL(I,2) - FTL(I,1))                 IMPLCA4A.681    
          CT = - DTRDZ(I,1)*GAMMA_RHOKE(I)*LAT_HEAT(I)*RHOKPM(I)           IMPLCA4A.682    
          AT_ATQ(I,1) = - DTRDZ(I,1)*GAMMA_RHOKH_RDZ(I,2)                  IMPLCA4A.683    
          RBT = 1./( 1. - AT_ATQ(I,1) - ALPHA1(I)*CT*(1. + AQ_AM(I,1))     IMPLCA4A.684    
     &                                + DTRDZ(I,1)*BPM(I) )                IMPLCA4A.685    
C                                                                          IMPLCA4A.686    
          DTL_DV(I,1) = RBT*(DTL_DV(I,1) - CT*DQW_DU(I,1))                 IMPLCA4A.687    
          AT_ATQ(I,1) = RBT*AT_ATQ(I,1)                                    IMPLCA4A.688    
        ENDIF                                                              IMPLCA4A.689    
   41 CONTINUE                                                             IMPLCA4A.690    
C-----------------------------------------------------------------------   IMPLCA4A.691    
CL 4.3 Rows of matrix applying to TL transport into model layers in the    IMPLCA4A.692    
CL     "middle" of the "boundary" layer, i.e. all but the bottom layer     IMPLCA4A.693    
CL     and the top "boundary" layer.                                       IMPLCA4A.694    
C-----------------------------------------------------------------------   IMPLCA4A.695    
      DO 43 K=2,BLM1                                                       IMPLCA4A.696    
        KP1 = K+1                                                          IMPLCA4A.697    
        KM1 = K-1                                                          IMPLCA4A.698    
        DO 431 I=P1,P1+P_POINTS-1                                          IMPLCA4A.699    
C                                                                          IMPLCA4A.700    
C   "Explicit" flux divergence across layer giving explicit TL increment   IMPLCA4A.701    
C   due to mixing above rml if it exists or for all levels if it does      IMPLCA4A.702    
C   not.                                                                   IMPLCA4A.703    
C                                                                          IMPLCA4A.704    
          NRMLP1 = NRML(I) + 1                                             IMPLCA4A.705    
          IF (K .GT. NRML(I)) THEN                                         IMPLCA4A.706    
            DTL_DV(I,K) = -DTRDZ(I,K) * ( FTL(I,KP1) - FTL(I,K) )          IMPLCA4A.707    
C                                                            ... P244.38   IMPLCA4A.708    
C                                                                          IMPLCA4A.709    
            AT_ATQ(I,K) = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,KP1) ! P244.35   IMPLCA4A.710    
            CT = -DTRDZ(I,K) * GAMMA_RHOKH_RDZ(I,K)            ! P244.36   IMPLCA4A.711    
            IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRMLP1)) THEN               IMPLCA4A.712    
              RBT = 1.0 / ( 1.0 - AT_ATQ(I,K) - CT*( 1.0 + AT_RML(I) ) )   IMPLCA4A.713    
              DTL_DV(I,K) = RBT * ( DTL_DV(I,K) - CT*DTL_RML(I) )          IMPLCA4A.714    
            ELSE                                                           IMPLCA4A.715    
              RBT = 1.0 / ( 1.0 - AT_ATQ(I,K)                              IMPLCA4A.716    
     &                          - CT*( 1.0 + AT_ATQ(I,KM1) ) )             IMPLCA4A.717    
C                         1          2                     2 1             IMPLCA4A.718    
C                                             ... Reciprocal of P244.113   IMPLCA4A.719    
C                                                                          IMPLCA4A.720    
              DTL_DV(I,K) = RBT * ( DTL_DV(I,K) - CT*DTL_DV(I,KM1) )       IMPLCA4A.721    
C                                                           ... P244.114   IMPLCA4A.722    
C                                                                          IMPLCA4A.723    
            ENDIF                                                          IMPLCA4A.724    
            AT_ATQ(I,K) = RBT * AT_ATQ(I,K)                   ! P244.115   IMPLCA4A.725    
          ENDIF                                                            IMPLCA4A.726    
  431   CONTINUE                                                           IMPLCA4A.727    
   43 CONTINUE                                                             IMPLCA4A.728    
C-----------------------------------------------------------------------   IMPLCA4A.729    
CL 4.4 Top "boundary" layer TL row of matrix.  TL for this layer can       IMPLCA4A.730    
CL     then be, and is, updated.                                           IMPLCA4A.731    
C-----------------------------------------------------------------------   IMPLCA4A.732    
      DO 44 I=P1,P1+P_POINTS-1                                             IMPLCA4A.733    
        DTL_DV(I,BL_LEVELS) = DTRDZ(I,BL_LEVELS) * FTL(I,BL_LEVELS)        IMPLCA4A.734    
C                                                            ... P244.42   IMPLCA4A.735    
C                                                                          IMPLCA4A.736    
        CT = -DTRDZ(I,BL_LEVELS) * GAMMA_RHOKH_RDZ(I,BL_LEVELS)! P244.40   IMPLCA4A.737    
        IF (NRML(I) .EQ. BLM1) THEN                                        IMPLCA4A.738    
          RBT = 1.0 / ( 1.0 - CT*( 1.0 + AT_RML(I) ) )                     IMPLCA4A.739    
          DTL_DV(I,BL_LEVELS) = RBT * ( DTL_DV(I,BL_LEVELS)                IMPLCA4A.740    
     +                                  - CT*DTL_RML(I) )                  IMPLCA4A.741    
        ELSE                                                               IMPLCA4A.742    
         RBT = 1.0 / ( 1.0 - CT*( 1.0 + AT_ATQ(I,BLM1) ) )                 IMPLCA4A.743    
C                    1          2                      2 1                 IMPLCA4A.744    
C                                             ... Reciprocal of P244.116   IMPLCA4A.745    
C                                                                          IMPLCA4A.746    
          DTL_DV(I,BL_LEVELS) = RBT * ( DTL_DV(I,BL_LEVELS)   ! P244.117   IMPLCA4A.747    
     +                                  - CT*DTL_DV(I,BLM1) )              IMPLCA4A.748    
        ENDIF                                                              IMPLCA4A.749    
        TL(I,BL_LEVELS) = TL(I,BL_LEVELS) + DTL_DV(I,BL_LEVELS)            IMPLCA4A.750    
C                                                           ... P244.127   IMPLCA4A.751    
C                                                                          IMPLCA4A.752    
   44 CONTINUE                                                             IMPLCA4A.753    
C                                                                          IMPLCA4A.754    
C-----------------------------------------------------------------------   IMPLCA4A.755    
CL 5.  "Downward sweep" through whole matrix.  TL, QW and                  IMPLCA4A.756    
CL     updated when the final implicit increments have been calculated.    IMPLCA4A.757    
C-----------------------------------------------------------------------   IMPLCA4A.758    
CL 5.1 Remaining TL rows of matrix and add implicit increments above       IMPLCA4A.759    
CL     the rml or at all levels if it is less than two layers thick.       IMPLCA4A.760    
C-----------------------------------------------------------------------   IMPLCA4A.761    
C                                                                          IMPLCA4A.762    
      DO 51 K=BLM1,1,-1                                                    IMPLCA4A.763    
        DO 511 I=P1,P1+P_POINTS-1                                          IMPLCA4A.764    
          IF ( (K .GT. NRML(I)) .OR. (NRML(I) .LT. 2) ) THEN               IMPLCA4A.765    
            DTL_DV(I,K) = DTL_DV(I,K) - AT_ATQ(I,K)*DTL_DV(I,K+1)          IMPLCA4A.766    
                                                              ! P244.118   IMPLCA4A.767    
            TL(I,K) = TL(I,K) + DTL_DV(I,K)                   ! P244.127   IMPLCA4A.768    
          ENDIF                                                            IMPLCA4A.769    
  511   CONTINUE                                                           IMPLCA4A.770    
   51 CONTINUE                                                             IMPLCA4A.771    
      DO 52 I=P1,P1+P_POINTS-1                                             IMPLCA4A.772    
C                                                                          IMPLCA4A.773    
C-----------------------------------------------------------------------   IMPLCA4A.774    
CL 5.2 Rapidly mixing layer increments                                     IMPLCA4A.775    
C-----------------------------------------------------------------------   IMPLCA4A.776    
C                                                                          IMPLCA4A.777    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMPLCA4A.778    
          NRMLP1 = NRML(I) + 1                                             IMPLCA4A.779    
          DTL_RML(I) = DTL_RML(I) - AT_RML(I) * DTL_DV(I,NRMLP1)           IMPLCA4A.780    
          DQW_RML(I) = DQW_RML(I)                                          IMPLCA4A.781    
     &                      - AQ_RML(I) * ALPHA1(I) * DTL_RML(I)           IMPLCA4A.782    
          TL(I,1) = TL(I,1) + DTL_RML(I)                                   IMPLCA4A.783    
          QW(I,1) = QW(I,1) + DQW_RML(I)                                   IMPLCA4A.784    
        ELSE                                                               IMPLCA4A.785    
C                                                                          IMPLCA4A.786    
C-----------------------------------------------------------------------   IMPLCA4A.787    
CL 5.3 Lowest-level QW row of matrix; local mixing where there is no rml   IMPLCA4A.788    
C-----------------------------------------------------------------------   IMPLCA4A.789    
                                                                           IMPLCA4A.790    
          DQW_DU(I,1) = DQW_DU(I,1) - ALPHA1(I)*AQ_AM(I,1)*DTL_DV(I,1)     IMPLCA4A.791    
          QW(I,1) = QW(I,1) + DQW_DU(I,1)     ! P244.128                   IMPLCA4A.792    
        ENDIF                                                              IMPLCA4A.793    
   52 CONTINUE                                                             IMPLCA4A.794    
C                                                                          IMPLCA4A.795    
C-----------------------------------------------------------------------   IMPLCA4A.796    
CL 5.4 Remaining QW rows of matrix + updating of QW's.                     IMPLCA4A.797    
CL     Add implicit increments due to mixing above rml or at all levels    IMPLCA4A.798    
CL     if there it does not exist.                                         IMPLCA4A.799    
C-----------------------------------------------------------------------   IMPLCA4A.800    
      DO 54 K=2,BL_LEVELS                                                  IMPLCA4A.801    
        DO 541 I=P1,P1+P_POINTS-1                                          IMPLCA4A.802    
          IF (K .GT. NRML(I)) THEN                                         IMPLCA4A.803    
            IF ((NRML(I) .GE. 2) .AND. (K-1 .EQ. NRML(I))) THEN            IMPLCA4A.804    
              DQW_DU(I,K) = DQW_DU(I,K) - AQ_AM(I,K)*DQW_RML(I)            IMPLCA4A.805    
            ELSE                                                           IMPLCA4A.806    
              DQW_DU(I,K) = DQW_DU(I,K) - AQ_AM(I,K)*DQW_DU(I,K-1)         IMPLCA4A.807    
C                                                           ... P244.121   IMPLCA4A.808    
            ENDIF                                                          IMPLCA4A.809    
            QW(I,K) = QW(I,K) + DQW_DU(I,K)                  ! P244.128    IMPLCA4A.810    
          ELSE                                                             IMPLCA4A.811    
C                                                                          IMPLCA4A.812    
C  Add the increments due to rapid mixing if in the rapidly mixing layer   IMPLCA4A.813    
C                                                                          IMPLCA4A.814    
            TL(I,K) = TL(I,K) + DTL_RML(I)                                 IMPLCA4A.815    
            QW(I,K) = QW(I,K) + DQW_RML(I)                                 IMPLCA4A.816    
          ENDIF                                                            IMPLCA4A.817    
  541   CONTINUE                                                           IMPLCA4A.818    
   54 CONTINUE                                                             IMPLCA4A.819    
C                                                                          IMPLCA4A.820    
C-----------------------------------------------------------------------   IMPLCA4A.821    
CL 6.  Calculate final implicit fluxes of heat and moisture.               IMPLCA4A.822    
C-----------------------------------------------------------------------   IMPLCA4A.823    
CL 6.1 Surface fluxes for the 3 surface types: land, sea-ice, ordinary     IMPLCA4A.824    
CL     sea. Pass out the value of RHOKH(,1) in GAMMA_RHOKH_1 to satisfy    IMPLCA4A.825    
CL     STASH GAMMA_RHOKH_RDZ will contain precisely that on output.        IMPLCA4A.826    
C-----------------------------------------------------------------------   IMPLCA4A.827    
C                                                                          IMPLCA4A.828    
      DO 61 I=P1,P1+P_POINTS-1                                             IMPLCA4A.829    
        IF ( NRML(I) .GE. 2 ) THEN                                         IMPLCA4A.830    
           DTL =  DTL_RML(I)                                               IMPLCA4A.831    
           DQW = DQW_RML(I)                                                IMPLCA4A.832    
        ELSE                                                               IMPLCA4A.833    
           DTL = DTL_DV(I,1)                                               IMPLCA4A.834    
           DQW = DQW_DU(I,1)                                               IMPLCA4A.835    
        ENDIF                                                              IMPLCA4A.836    
        GAMMA_RKE_DQ = GAMMA_RHOKE(I)*(DQW - ALPHA1(I)*DTL)                IMPLCA4A.837    
        IF (LAND_MASK(I)) THEN                                             IMPLCA4A.838    
          FTL_ICE(I) = 0.0                                                 IMPLCA4A.839    
          FQW_ICE(I) = 0.0                                                 IMPLCA4A.840    
          FTL(I,1) = FTL(I,1) + RHOKPM(I)*( LAT_HEAT(I)*GAMMA_RKE_DQ       IMPLCA4A.841    
     &                                      - GAMMA(1)*ASHTF(I)*DTL )      IMPLCA4A.842    
          FQW(I,1) = FQW(I,1) - RHOKPM(I)*( CP*GAMMA_RKE_DQ                IMPLCA4A.843    
     &                             + GAMMA(1)*RESFT(I)*ASHTF(I)*DQW )      IMPLCA4A.844    
          EPOT(I) = EPOT(I) - RHOKPM_POT(I)*( CP*GAMMA_RKE_DQ              ANG1F405.180    
     &                             + GAMMA(1)*ASHTF(I)*DQW )               ANG1F405.181    
          SURF_HT_FLUX(I) = RADNET(I) - LAT_HEAT(I)*FQW(I,1)               IMPLCA4A.845    
     &                                - CP*FTL(I,1)                        IMPLCA4A.846    
        ELSEIF (ICE_FRACT(I).GT.0.0) THEN                                  IMPLCA4A.847    
          FQW_ICE(I) = FQW(I,1) - E_SEA(I) - RHOKPM(I) *                   IMPLCA4A.848    
     &                      (CP*GAMMA_RKE_DQ + GAMMA(1)*ASHTF(I)*DQW)      IMPLCA4A.849    
          FTL_ICE(I) =  FTL(I,1) - H_SEA(I)/CP + RHOKPM(I) *               IMPLCA4A.850    
     &                  (LS*GAMMA_RKE_DQ - GAMMA(1)*ASHTF(I)*DTL)          IMPLCA4A.851    
          E_SEA(I) = E_SEA(I) - (1.0 - ICE_FRACT(I)) *                     IMPLCA4A.852    
     &                                        GAMMA_RHOKE(I)*DQW           IMPLCA4A.853    
          H_SEA(I) = H_SEA(I) - (1.0 - ICE_FRACT(I)) * CP *                IMPLCA4A.854    
     &                                        GAMMA_RHOKH_1(I)*DTL         IMPLCA4A.855    
          FTL(I,1) = FTL_ICE(I) + H_SEA(I)/CP                              IMPLCA4A.856    
          FQW(I,1) = FQW_ICE(I) + E_SEA(I)                                 IMPLCA4A.857    
          EPOT(I) = FQW_ICE(I) + E_SEA(I)                                  ANG1F405.182    
          SURF_HT_FLUX(I) = RADNET(I) - LS*FQW_ICE(I) - CP*FTL_ICE(I)      IMPLCA4A.858    
        ELSE  ! ordinary sea point                                         IMPLCA4A.859    
          FTL(I,1) = FTL(I,1) - GAMMA_RHOKH_1(I)*DTL                       IMPLCA4A.860    
          FQW(I,1) = FQW(I,1) - GAMMA_RHOKH_1(I)*DQW                       IMPLCA4A.861    
          EPOT(I) = EPOT(I) - GAMMA_RHOKH_1(I)*DQW                         ANG1F405.183    
          E_SEA(I) = FQW(I,1)                                              IMPLCA4A.862    
          H_SEA(I) = FTL(I,1)*CP                                           IMPLCA4A.863    
          FTL_ICE(I) = 0.0                                                 IMPLCA4A.864    
          FQW_ICE(I) = 0.0                                                 IMPLCA4A.865    
        ENDIF                                                              IMPLCA4A.866    
        GAMMA_RHOKH_1(I) = GAMMA_RHOKH_1(I) / GAMMA(1)                     IMPLCA4A.867    
        GAMMA_RHOKE(I) = GAMMA_RHOKE(I) / GAMMA(1)                         IMPLCA4A.868    
   61 CONTINUE                                                             IMPLCA4A.869    
C                                                                          IMPLCA4A.870    
C-----------------------------------------------------------------------   ANG1F405.184    
CL  Ensures that the potential evaporation rate equals the evaporation     ANG1F405.185    
CL  rate, when there is net condensation. Otherwise E/Ep could be          ANG1F405.186    
CL  <0 or >1 when the implicit adjustment is added.                        ANG1F405.187    
C-----------------------------------------------------------------------   ANG1F405.188    
      DO I=P1,P1+P_POINTS-1                                                ANG1F405.189    
        IF(FQW(I,1).LT.0.0)THEN                                            ANG1F405.190    
          EPOT(I)=FQW(I,1)                                                 ANG1F405.191    
        ENDIF                                                              ANG1F405.192    
      ENDDO                                                                ANG1F405.193    
C-----------------------------------------------------------------------   IMPLCA4A.871    
CL 6.2 Fluxes at layer interfaces above the surface.                       IMPLCA4A.872    
C-----------------------------------------------------------------------   IMPLCA4A.873    
      DO 62 K=2,BL_LEVELS                                                  IMPLCA4A.874    
        KM1 = K-1                                                          IMPLCA4A.875    
        DO 621 I=P1,P1+P_POINTS-1                                          IMPLCA4A.876    
C                                                                          IMPLCA4A.877    
C  Calculate and store fluxes due to local mixing.                         IMPLCA4A.878    
C  FTL(local mixing) stored in array AT,                                   IMPLCA4A.879    
C  FQW(local mixing) stored in array AQ_AM.                                IMPLCA4A.880    
C                                                                          IMPLCA4A.881    
          NRMLP1 = NRML(I) + 1                                             IMPLCA4A.882    
          IF ((NRML(I) .GE. 2) .AND. (K .EQ. NRMLP1)) THEN                 IMPLCA4A.883    
            AT_ATQ(I,K) = FTL(I,K) - GAMMA_RHOKH_RDZ(I,K)                  IMPLCA4A.884    
     &                              * ( DTL_DV(I,K) - DTL_RML(I) )         IMPLCA4A.885    
            AQ_AM(I,K) = FQW(I,K) - GAMMA_RHOKH_RDZ(I,K)                   IMPLCA4A.886    
     &                              * ( DQW_DU(I,K) - DQW_RML(I) )         IMPLCA4A.887    
          ELSE                                                             IMPLCA4A.888    
            AT_ATQ(I,K) = FTL(I,K) - GAMMA_RHOKH_RDZ(I,K)                  IMPLCA4A.889    
     &                              * ( DTL_DV(I,K) - DTL_DV(I,KM1) )      IMPLCA4A.890    
            AQ_AM(I,K) = FQW(I,K) - GAMMA_RHOKH_RDZ(I,K)                   IMPLCA4A.891    
     &                              * ( DQW_DU(I,K) - DQW_DU(I,KM1) )      IMPLCA4A.892    
          ENDIF                                                            IMPLCA4A.893    
C                                                                          IMPLCA4A.894    
C  Now calculate the implicit fluxes including both local mixing and       IMPLCA4A.895    
C  if appropriate also the fluxes due to rapid mixing through layers.      IMPLCA4A.896    
C                                                                          IMPLCA4A.897    
          IF ( K .EQ. 2 ) THEN                                             IMPLCA4A.898    
            IF ( NRML(I) .GE. 2 ) THEN                                     IMPLCA4A.899    
              FTL(I,K) = AT_ATQ(I,K)                                       IMPLCA4A.900    
     &                    + FTL(I,KM1) - DTL_RML(I) / DTRDZ(I,KM1)         IMPLCA4A.901    
              FQW(I,K) = AQ_AM(I,K)                                        IMPLCA4A.902    
     &                    + FQW(I,KM1) - DQW_RML(I) / DTRDZ(I,KM1)         IMPLCA4A.903    
            ELSE                                                           IMPLCA4A.904    
              FTL(I,K) = AT_ATQ(I,K)                                       IMPLCA4A.905    
              FQW(I,K) = AQ_AM(I,K)                                        IMPLCA4A.906    
            ENDIF                                                          IMPLCA4A.907    
          ELSEIF ( K .LE. NRML(I) ) THEN                                   IMPLCA4A.908    
            FTL(I,K) = AT_ATQ(I,K) - AT_ATQ(I,KM1)                         IMPLCA4A.909    
     &                    + FTL(I,KM1) - DTL_RML(I) / DTRDZ(I,KM1)         IMPLCA4A.910    
            FQW(I,K) = AQ_AM(I,K) - AQ_AM(I,KM1)                           IMPLCA4A.911    
     &                    + FQW(I,KM1) - DQW_RML(I) / DTRDZ(I,KM1)         IMPLCA4A.912    
          ELSE                                                             IMPLCA4A.913    
            FTL(I,K) = AT_ATQ(I,K)                                         IMPLCA4A.914    
            FQW(I,K) = AQ_AM(I,K)                                          IMPLCA4A.915    
          ENDIF                                                            IMPLCA4A.916    
  621   CONTINUE                                                           IMPLCA4A.917    
   62 CONTINUE                                                             IMPLCA4A.918    
C                                                                          IMPLCA4A.919    
CL----------------------------------------------------------------------   IMPLCA4A.920    
CL (B) Calculations on UV-grid.                                            IMPLCA4A.921    
CL----------------------------------------------------------------------   IMPLCA4A.922    
C                                                                          IMPLCA4A.923    
C-----------------------------------------------------------------------   IMPLCA4A.924    
CL 7.  Solve matrix equation P244.80 for implicit increments to U and V.   IMPLCA4A.925    
C-----------------------------------------------------------------------   IMPLCA4A.926    
C                                                                          IMPLCA4A.927    
*IF -DEF,SCMA                                                              AJC1F405.153    
C-----------------------------------------------------------------------   IMPLCA4A.929    
C  7.0 Interpolate to UV-grid the pressure changes across the model        IMPLCA4A.930    
C      layers                                                              IMPLCA4A.931    
C-----------------------------------------------------------------------   IMPLCA4A.932    
      DO 70 K=1,BL_LEVELS                                                  IMPLCA4A.933    
        CALL P_TO_UV(DELTAP(P1,K),AQ_RML(U1+ROW_LENGTH),                   IMPLCA4A.934    
     +     P_POINTS,P_POINTS-ROW_LENGTH,ROW_LENGTH,P_ROWS)                 IMPLCA4A.935    
        DO 701 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                    IMPLCA4A.936    
          DELTAP(I,K) = AQ_RML(I)                                          IMPLCA4A.937    
  701   CONTINUE                                                           IMPLCA4A.938    
   70 CONTINUE                                                             IMPLCA4A.939    
C                                                                          IMPLCA4A.940    
C-----------------------------------------------------------------------   IMPLCA4A.941    
CL 7.1 Initial calculations and "upward sweep".                            IMPLCA4A.942    
CL (a) "Surface" fluxes.                                                   IMPLCA4A.943    
C-----------------------------------------------------------------------   IMPLCA4A.944    
C                                                                          IMPLCA4A.945    
      DO 71 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                       IMPLCA4A.946    
*ELSE                                                                      IMPLCA4A.947    
C                                                                          IMPLCA4A.948    
C-----------------------------------------------------------------------   IMPLCA4A.949    
CL 7.1 Initial calculations and "upward sweep".                            IMPLCA4A.950    
C-----------------------------------------------------------------------   IMPLCA4A.951    
CL (a) "Surface" fluxes.                                                   IMPLCA4A.952    
C-----------------------------------------------------------------------   IMPLCA4A.953    
      DO 71 I=1,U_POINTS                                                   IMPLCA4A.954    
*ENDIF                                                                     IMPLCA4A.955    
        DTRDZ_UV(I,1) = -DTIMEG / DELTAP(I,1)                              IMPLCA4A.956    
        DELTAP_RML(I) = 0.0                                                IMPLCA4A.957    
C                                                                          IMPLCA4A.958    
C  "Explicit" increments to U(1) and V(1) when there is no rapidly         IMPLCA4A.959    
C  mixing layer or it does not extend beyond the bottom model layer.       IMPLCA4A.960    
C                                                                          IMPLCA4A.961    
        DQW_DU(I,1) = DTRDZ_UV(I,1) * ( TAUX(I,2) - TAUX(I,1) )            IMPLCA4A.962    
C                                                            ... P244.67   IMPLCA4A.963    
C                                                                          IMPLCA4A.964    
        DTL_DV(I,1) = DTRDZ_UV(I,1) * ( TAUY(I,2) - TAUY(I,1) )            IMPLCA4A.965    
C                                                            ... P244.67   IMPLCA4A.966    
C                                                                          IMPLCA4A.967    
        CM = -DTRDZ_UV(I,1) * GAMMA_RHOKM_1(I)               ! P244.66     IMPLCA4A.968    
        AQ_AM(I,1) = -DTRDZ_UV(I,1) * GAMMA_RHOKM_RDZUV(I,2)   ! P244.64   IMPLCA4A.969    
        RBM = 1.0 / ( 1.0 - AQ_AM(I,1) - CM )    ! Reciprocal of P244.81   IMPLCA4A.970    
        DQW_DU(I,1) = RBM * DQW_DU(I,1)                        ! P244.82   IMPLCA4A.971    
        DTL_DV(I,1) = RBM * DTL_DV(I,1)                        ! P244.83   IMPLCA4A.972    
        AQ_AM(I,1) = RBM * AQ_AM(I,1)                          ! P244.84   IMPLCA4A.973    
   71 CONTINUE                                                             IMPLCA4A.974    
C                                                                          IMPLCA4A.975    
C                                                                          IMPLCA4A.976    
C-----------------------------------------------------------------------   IMPLCA4A.977    
CL (b) Fluxes at (or rows representing) layer interfaces above the         IMPLCA4A.978    
CL     surface but below the top of the boundary layer.                    IMPLCA4A.979    
C-----------------------------------------------------------------------   IMPLCA4A.980    
      DO 72 K=2,BLM1                                                       IMPLCA4A.981    
        KP1 = K+1                                                          IMPLCA4A.982    
        KM1 = K-1                                                          IMPLCA4A.983    
*IF -DEF,SCMA                                                              AJC1F405.154    
        DO 721 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                    IMPLCA4A.985    
*ELSE                                                                      IMPLCA4A.986    
        DO 721 I=1,U_POINTS                                                IMPLCA4A.987    
*ENDIF                                                                     IMPLCA4A.988    
          DTRDZ_UV(I,K) = -DTIMEG / DELTAP(I,K)                            IMPLCA4A.989    
            DQW_DU(I,K) = DTRDZ_UV(I,K) * ( TAUX(I,KP1) - TAUX(I,K) )      IMPLCA4A.990    
C                                                            ... P244.74   IMPLCA4A.991    
            DTL_DV(I,K) = DTRDZ_UV(I,K) * ( TAUY(I,KP1) - TAUY(I,K) )      IMPLCA4A.992    
C                                                            ... P244.74   IMPLCA4A.993    
            AQ_AM(I,K) = -DTRDZ_UV(I,K) * GAMMA_RHOKM_RDZUV(I,KP1)         IMPLCA4A.994    
C                                                            ... P244.71   IMPLCA4A.995    
          CM = -DTRDZ_UV(I,K) * GAMMA_RHOKM_RDZUV(I,K)         ! P244.72   IMPLCA4A.996    
            RBM = 1.0 / ( 1.0 - AQ_AM(I,K) -CM*( 1.0 + AQ_AM(I,KM1) ) )    IMPLCA4A.997    
C                     1                      2                    2 1      IMPLCA4A.998    
C                                              ... Reciprocal of P244.85   IMPLCA4A.999    
C                                                                          IMPLCA4A.1000   
            DQW_DU(I,K) = RBM * ( DQW_DU(I,K) - CM*DQW_DU(I,KM1) )         IMPLCA4A.1001   
C                                                            ... P244.86   IMPLCA4A.1002   
C                                                                          IMPLCA4A.1003   
            DTL_DV(I,K) = RBM * ( DTL_DV(I,K) - CM*DTL_DV(I,KM1) )         IMPLCA4A.1004   
C                                                            ... P244.87   IMPLCA4A.1005   
C                                                                          IMPLCA4A.1006   
          AQ_AM(I,K) = RBM * AQ_AM(I,K)                        ! P244.88   IMPLCA4A.1007   
  721   CONTINUE                                                           IMPLCA4A.1008   
   72 CONTINUE                                                             IMPLCA4A.1009   
C-----------------------------------------------------------------------   IMPLCA4A.1010   
CL (c) Top "boundary" layer; also increment U and V here, as implicit      IMPLCA4A.1011   
CL     flux for this layer is got from "upward sweep" alone.               IMPLCA4A.1012   
C-----------------------------------------------------------------------   IMPLCA4A.1013   
*IF -DEF,SCMA                                                              AJC1F405.155    
      DO 73 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                       IMPLCA4A.1015   
*ELSE                                                                      IMPLCA4A.1016   
      DO 73 I=1,U_POINTS                                                   IMPLCA4A.1017   
*ENDIF                                                                     IMPLCA4A.1018   
        DTRDZ_UV(I,BL_LEVELS) = -DTIMEG / DELTAP(I,BL_LEVELS)              IMPLCA4A.1019   
        DQW_DU(I,BL_LEVELS) = -DTRDZ_UV(I,BL_LEVELS) * TAUX(I,BL_LEVELS)   IMPLCA4A.1020   
C                                                            ... P244.78   IMPLCA4A.1021   
C                                                                          IMPLCA4A.1022   
        DTL_DV(I,BL_LEVELS) = -DTRDZ_UV(I,BL_LEVELS) * TAUY(I,BL_LEVELS)   IMPLCA4A.1023   
C                                                            ... P244.78   IMPLCA4A.1024   
C                                                                          IMPLCA4A.1025   
        CM = -DTRDZ_UV(I,BL_LEVELS) * GAMMA_RHOKM_RDZUV(I,BL_LEVELS)       IMPLCA4A.1026   
C                                                            ... P244.76   IMPLCA4A.1027   
        RBM = 1.0 / ( 1.0 - CM*( 1.0 + AQ_AM(I,BLM1) ) )                   IMPLCA4A.1028   
C                     1          2                     2 1                 IMPLCA4A.1029   
C                                              ... Reciprocal of P244.89   IMPLCA4A.1030   
C                                                                          IMPLCA4A.1031   
        DQW_DU(I,BL_LEVELS) = RBM * ( DQW_DU(I,BL_LEVELS)    ! P244.90     IMPLCA4A.1032   
     +                                    - CM*DQW_DU(I,BLM1) )            IMPLCA4A.1033   
        DTL_DV(I,BL_LEVELS) = RBM * ( DTL_DV(I,BL_LEVELS)    ! P244.91     IMPLCA4A.1034   
     +                                    - CM*DTL_DV(I,BLM1) )            IMPLCA4A.1035   
        U(I,BL_LEVELS) = U(I,BL_LEVELS) + DQW_DU(I,BL_LEVELS)  ! P244.94   IMPLCA4A.1036   
        V(I,BL_LEVELS) = V(I,BL_LEVELS) + DTL_DV(I,BL_LEVELS)  ! P244.95   IMPLCA4A.1037   
   73 CONTINUE                                                             IMPLCA4A.1038   
                                                                           IMPLCA4A.1039   
C-----------------------------------------------------------------------   IMPLCA4A.1040   
CL 7.4 Complete solution of matrix equation by performing "downward        IMPLCA4A.1041   
CL     sweep", then update U and V.                                        IMPLCA4A.1042   
C-----------------------------------------------------------------------   IMPLCA4A.1043   
      DO 74 K=BLM1,1,-1                                                    IMPLCA4A.1044   
        KP1 = K+1                                                          IMPLCA4A.1045   
*IF -DEF,SCMA                                                              AJC1F405.156    
        DO 741 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                    IMPLCA4A.1047   
*ELSE                                                                      IMPLCA4A.1048   
        DO 741 I=1,U_POINTS                                                IMPLCA4A.1049   
*ENDIF                                                                     IMPLCA4A.1050   
          DQW_DU(I,K) = DQW_DU(I,K) - AQ_AM(I,K)*DQW_DU(I,KP1) ! P244.92   IMPLCA4A.1051   
          DTL_DV(I,K) = DTL_DV(I,K) - AQ_AM(I,K)*DTL_DV(I,KP1) ! P244.93   IMPLCA4A.1052   
          U(I,K) = U(I,K) + DQW_DU(I,K)                        ! P244.94   IMPLCA4A.1053   
          V(I,K) = V(I,K) + DTL_DV(I,K)                        ! P244.95   IMPLCA4A.1054   
  741   CONTINUE                                                           IMPLCA4A.1055   
   74 CONTINUE                                                             IMPLCA4A.1056   
C                                                                          IMPLCA4A.1057   
C-----------------------------------------------------------------------   IMPLCA4A.1058   
CL 8.  Essentially diagnostic calculations, though some values (i.e. the   IMPLCA4A.1059   
CL     surface wind stresses) are required by the coupled version of the   IMPLCA4A.1060   
CL     model.                                                              IMPLCA4A.1061   
C-----------------------------------------------------------------------   IMPLCA4A.1062   
CL 8.1 Surface wind stress components.                                     IMPLCA4A.1063   
CL     Pass out the value of RHOKM(,1) in GAMMA_RHOKM_1 to satisfy STASH   IMPLCA4A.1064   
CL     GAMMA_RHOKM_RDZ will contain precisely that on output.              IMPLCA4A.1065   
C-----------------------------------------------------------------------   IMPLCA4A.1066   
C                                                                          IMPLCA4A.1067   
*IF -DEF,SCMA                                                              AJC1F405.157    
      DO 81 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                       IMPLCA4A.1069   
*ELSE                                                                      IMPLCA4A.1070   
      DO 81 I=1,U_POINTS                                                   IMPLCA4A.1071   
*ENDIF                                                                     IMPLCA4A.1072   
        TAUX(I,1) = TAUX(I,1) + GAMMA_RHOKM_1(I)*DQW_DU(I,1)               IMPLCA4A.1073   
C                                                            ... P244.61   IMPLCA4A.1074   
C                                                                          IMPLCA4A.1075   
        TAUY(I,1) = TAUY(I,1) + GAMMA_RHOKM_1(I)*DTL_DV(I,1)               IMPLCA4A.1076   
C                                                            ... P244.61   IMPLCA4A.1077   
C                                                                          IMPLCA4A.1078   
        GAMMA_RHOKM_1(I) = GAMMA_RHOKM_1(I) / GAMMA(1)                     IMPLCA4A.1079   
   81 CONTINUE                                                             IMPLCA4A.1080   
*IF -DEF,SCMA                                                              AJC1F405.158    
C                                                                          IMPLCA4A.1082   
C  Set extreme rows to "missing data indicator".                           IMPLCA4A.1083   
C                                                                          IMPLCA4A.1084   
*IF DEF,MPP                                                                GPB1F403.166    
      IF (attop) THEN                                                      GPB1F403.167    
*ENDIF                                                                     GPB1F403.168    
        DO I=U1,U1+ROW_LENGTH-1                                            GPB1F403.169    
          TAUX(I,1)=1.E30                                                  GPB1F403.170    
          TAUY(I,1)=1.E30                                                  GPB1F403.171    
        ENDDO                                                              GPB1F403.172    
*IF DEF,MPP                                                                GPB1F403.173    
      ENDIF                                                                GPB1F403.174    
                                                                           GPB1F403.175    
      IF (atbase) THEN                                                     GPB1F403.176    
*ENDIF                                                                     GPB1F403.177    
        DO I= U1 + (U_ROWS-1)*ROW_LENGTH , U1 + U_ROWS*ROW_LENGTH - 1      GPB1F403.178    
          TAUX(I,1)=1.E30                                                  GPB1F403.179    
          TAUY(I,1)=1.E30                                                  GPB1F403.180    
        ENDDO                                                              GPB1F403.181    
*IF DEF,MPP                                                                GPB1F403.182    
      ENDIF                                                                GPB1F403.183    
*ENDIF                                                                     GPB1F403.184    
*ENDIF                                                                     IMPLCA4A.1109   
C                                                                          IMPLCA4A.1110   
C-----------------------------------------------------------------------   IMPLCA4A.1111   
CL 8.2 Wind stress components at layer interfaces above the surface.       IMPLCA4A.1112   
C-----------------------------------------------------------------------   IMPLCA4A.1113   
      DO 82 K=2,BL_LEVELS                                                  IMPLCA4A.1114   
        KM1 = K-1                                                          IMPLCA4A.1115   
*IF -DEF,SCMA                                                              AJC1F405.159    
        DO 821 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                    IMPLCA4A.1117   
*ELSE                                                                      IMPLCA4A.1118   
        DO 821 I=1,U_POINTS                                                IMPLCA4A.1119   
*ENDIF                                                                     IMPLCA4A.1120   
          AQ_AM(I,K) = TAUX(I,K) + GAMMA_RHOKM_RDZUV(I,K)    ! P244.61     IMPLCA4A.1121   
     +                        *( DQW_DU(I,K) - DQW_DU(I,KM1) )             IMPLCA4A.1122   
          AT_ATQ(I,K) = TAUY(I,K) + GAMMA_RHOKM_RDZUV(I,K)   ! P244.61     IMPLCA4A.1123   
     +                        *( DTL_DV(I,K) - DTL_DV(I,KM1) )             IMPLCA4A.1124   
          TAUX(I,K) = AQ_AM(I,K)                                           IMPLCA4A.1125   
          TAUY(I,K) = AT_ATQ(I,K)                                          IMPLCA4A.1126   
  821   CONTINUE                                                           IMPLCA4A.1127   
*IF -DEF,SCMA                                                              AJC1F405.160    
C                                                                          IMPLCA4A.1129   
C  Set extreme rows to "missing data indicator".                           IMPLCA4A.1130   
C                                                                          IMPLCA4A.1131   
*IF DEF,MPP                                                                GPB1F403.185    
      IF (attop) THEN                                                      GPB1F403.186    
*ENDIF                                                                     GPB1F403.187    
        DO I=U1,U1+ROW_LENGTH-1                                            GPB1F403.188    
          TAUX(I,K)=1.E30                                                  GPB1F403.189    
          TAUY(I,K)=1.E30                                                  GPB1F403.190    
        ENDDO                                                              GPB1F403.191    
*IF DEF,MPP                                                                GPB1F403.192    
      ENDIF                                                                GPB1F403.193    
                                                                           GPB1F403.194    
      IF (atbase) THEN                                                     GPB1F403.195    
*ENDIF                                                                     GPB1F403.196    
        DO I= U1 + (U_ROWS-1)*ROW_LENGTH , U1 + U_ROWS*ROW_LENGTH - 1      GPB1F403.197    
          TAUX(I,K)=1.E30                                                  GPB1F403.198    
          TAUY(I,K)=1.E30                                                  GPB1F403.199    
        ENDDO                                                              GPB1F403.200    
*IF DEF,MPP                                                                GPB1F403.201    
      ENDIF                                                                GPB1F403.202    
*ENDIF                                                                     GPB1F403.203    
*ENDIF                                                                     IMPLCA4A.1139   
   82 CONTINUE                                                             IMPLCA4A.1140   
C                                                                          IMPLCA4A.1141   
C-----------------------------------------------------------------------   IMPLCA4A.1142   
CL 8.3 Wind components at 10 metres above the surface.                     IMPLCA4A.1143   
C-----------------------------------------------------------------------   IMPLCA4A.1144   
      IF (SU10 .OR. SV10) THEN                                             IMPLCA4A.1145   
*IF -DEF,SCMA                                                              AJC1F405.161    
CMIC$ DO ALL VECTOR SHARED(U_POINTS, ROW_LENGTH, U1, SU10, SV10, U_FIELD   IMPLCA4A.1147   
CMIC$1   , U0, CDR10M, BL_LEVELS, U, U10M, V0, V, V10M) PRIVATE(I)         IMPLCA4A.1148   
CDIR$ IVDEP                                                                IMPLCA4A.1149   
! Fujitsu vectorization directive                                          GRB0F405.363    
!OCL NOVREC                                                                GRB0F405.364    
        DO 83 I=U1+ROW_LENGTH,U1+U_POINTS-ROW_LENGTH-1                     IMPLCA4A.1150   
*ELSE                                                                      IMPLCA4A.1151   
        DO 83 I=1,U_POINTS                                                 IMPLCA4A.1152   
*ENDIF                                                                     IMPLCA4A.1153   
          IF (SU10)                                                        IMPLCA4A.1154   
     +      U10M(I) = U0(I) + CDR10M(I)*( U(I,1) - U0(I) )     ! P244.96   IMPLCA4A.1155   
          IF (SV10)                                                        IMPLCA4A.1156   
     +      V10M(I) = V0(I) + CDR10M(I)*( V(I,1) - V0(I) )     ! P244.97   IMPLCA4A.1157   
   83   CONTINUE                                                           IMPLCA4A.1158   
*IF -DEF,SCMA                                                              AJC1F405.162    
C                                                                          IMPLCA4A.1160   
C  Set extreme rows to "missing data indicator".                           IMPLCA4A.1161   
C                                                                          IMPLCA4A.1162   
*IF DEF,MPP                                                                GPB1F403.204    
      IF (attop) THEN                                                      GPB1F403.205    
*ENDIF                                                                     GPB1F403.206    
        DO I=U1,U1+ROW_LENGTH-1                                            GPB1F403.207    
          IF (SU10) THEN                                                   GPB1F403.208    
            U10M(I)=1.E30                                                  GPB1F403.209    
          ENDIF                                                            GPB1F403.210    
          IF (SV10) THEN                                                   GPB1F403.211    
            V10M(I)=1.E30                                                  GPB1F403.212    
          ENDIF                                                            GPB1F403.213    
        ENDDO                                                              GPB1F403.214    
*IF DEF,MPP                                                                GPB1F403.215    
      ENDIF                                                                GPB1F403.216    
                                                                           GPB1F403.217    
      IF (atbase) THEN                                                     GPB1F403.218    
*ENDIF                                                                     GPB1F403.219    
        DO I= U1 + (U_ROWS-1)*ROW_LENGTH , U1 + U_ROWS*ROW_LENGTH - 1      GPB1F403.220    
          IF (SU10) THEN                                                   GPB1F403.221    
            U10M(I)=1.E30                                                  GPB1F403.222    
          ENDIF                                                            GPB1F403.223    
          IF (SV10) THEN                                                   GPB1F403.224    
            V10M(I)=1.E30                                                  GPB1F403.225    
          ENDIF                                                            GPB1F403.226    
        ENDDO                                                              GPB1F403.227    
*IF DEF,MPP                                                                GPB1F403.228    
      ENDIF                                                                GPB1F403.229    
*ENDIF                                                                     GPB1F403.230    
*ENDIF                                                                     IMPLCA4A.1195   
      ENDIF                                                                IMPLCA4A.1196   
  999 CONTINUE   ! Branch for error exit.                                  IMPLCA4A.1197   
      IF (LTIMER) THEN                                                     IMPLCA4A.1198   
      CALL TIMER('IMPLCAL ',4)                                             IMPLCA4A.1199   
      ENDIF                                                                IMPLCA4A.1200   
      RETURN                                                               IMPLCA4A.1201   
      END                                                                  IMPLCA4A.1202   
*ENDIF                                                                     IMPLCA4A.1203