*IF DEF,A09_2B                                                             LSCLD2B.2      
! ******************************COPYRIGHT******************************    LSCLD2B.3      
! (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    LSCLD2B.4      
!                                                                          LSCLD2B.5      
! Use, duplication or disclosure of this code is subject to the            LSCLD2B.6      
! restrictions as set forth in the contract.                               LSCLD2B.7      
!                                                                          LSCLD2B.8      
!                Meteorological Office                                     LSCLD2B.9      
!                London Road                                               LSCLD2B.10     
!                BRACKNELL                                                 LSCLD2B.11     
!                Berkshire UK                                              LSCLD2B.12     
!                RG12 2SZ                                                  LSCLD2B.13     
!                                                                          LSCLD2B.14     
! If no contract has been raised with this copy of the code, the use,      LSCLD2B.15     
! duplication or disclosure of it is strictly prohibited.  Permission      LSCLD2B.16     
! to do so must first be obtained in writing from the Head of Numerical    LSCLD2B.17     
! Modelling at the above address.                                          LSCLD2B.18     
! ******************************COPYRIGHT******************************    LSCLD2B.19     
!                                                                          LSCLD2B.20     
!+ Large-scale Cloud Scheme.                                               LSCLD2B.21     
! Subroutine Interface:                                                    LSCLD2B.22     

      SUBROUTINE LS_CLD(                                                    2,8LSCLD2B.23     
!      Pressure related fields                                             LSCLD2B.24     
     & AK, BK, PSTAR                                                       LSCLD2B.25     
!      Array dimensions                                                    LSCLD2B.26     
     &,LEVELS, RHCPT, POINTS, PFIELD                                       LSCLD2B.27     
!      Prognostic Fields                                                   LSCLD2B.28     
     &,T, CF, Q, QCF, QCL                                                  LSCLD2B.29     
!      Liquid and frozen ice cloud fractions                               LSCLD2B.30     
     &,CFL, CFF                                                            LSCLD2B.31     
     &,ERROR)                                                              LSCLD2B.32     
!                                                                          LSCLD2B.33     
      IMPLICIT NONE                                                        LSCLD2B.34     
!                                                                          LSCLD2B.35     
! Purpose:                                                                 LSCLD2B.36     
!   This subroutine calculates liquid and ice cloud fractional cover       LSCLD2B.37     
!   for use with the enhanced precipitation microphysics scheme.           LSCLD2B.38     
!                                                                          LSCLD2B.39     
! Method:                                                                  LSCLD2B.40     
!   Statistical cloud scheme separates input moisture into specific        LSCLD2B.41     
!   humidity and cloud liquid water. Temperature calculated from liquid    LSCLD2B.42     
!   water temperature. Cloud fractions calculated from statistical         LSCLD2B.43     
!   relation between cloud fraction and cloud liquid/ice water content.    LSCLD2B.44     
!   Critical relative humidity now specified for all grid cells.           LSCLD2B.45     
!                                                                          LSCLD2B.46     
! Current Owner of Code: S. Cusack                                         LSCLD2B.47     
!                                                                          LSCLD2B.48     
! History:                                                                 LSCLD2B.49     
! Version   Date     Comment                                               LSCLD2B.50     
!  4.5    14-05-98   Original Code     S. Cusack                           LSCLD2B.51     
!                                                                          LSCLD2B.52     
! Description of Code:                                                     LSCLD2B.53     
!   FORTRAN 77  + common extensions also in Fortran90.                     LSCLD2B.54     
!   This code is written to UMDP3 version 6 programming standards.         LSCLD2B.55     
!                                                                          LSCLD2B.56     
!   System component covered: P292                                         LSCLD2B.57     
!                                                                          LSCLD2B.58     
!   Documentation: UMDP No.29                                              LSCLD2B.59     
!                                                                          LSCLD2B.60     
!  Global Variables:----------------------------------------------------   LSCLD2B.61     
*CALL C_MDI                                                                LSCLD2B.62     
*CALL C_PI                                                                 LSCLD2B.63     
!                                                                          LSCLD2B.64     
!  Subroutine Arguments:------------------------------------------------   LSCLD2B.65     
      INTEGER           !, INTENT(IN)                                      LSCLD2B.66     
     & LEVELS                                                              LSCLD2B.67     
!       No. of levels being processed.                                     LSCLD2B.68     
     &,POINTS                                                              LSCLD2B.69     
!       No. of gridpoints being processed.                                 LSCLD2B.70     
     &,PFIELD                                                              LSCLD2B.71     
!       No. of points in global field (at one vertical level).             LSCLD2B.72     
!                                                                          LSCLD2B.73     
      REAL              !, INTENT(IN)                                      LSCLD2B.74     
     & QCF(PFIELD,LEVELS)                                                  LSCLD2B.75     
!       Cloud ice content at processed levels (kg water per kg air).       LSCLD2B.76     
     &,PSTAR(PFIELD)                                                       LSCLD2B.77     
!       Surface pressure (Pa).                                             LSCLD2B.78     
     &,AK(LEVELS)                                                          LSCLD2B.79     
!       Hybrid "A" co-ordinate.                                            LSCLD2B.80     
     &,BK(LEVELS)                                                          LSCLD2B.81     
!       Hybrid "B" co-ordinate.                                            LSCLD2B.82     
     &,RHCPT(PFIELD,LEVELS)                                                LSCLD2B.83     
!       Critical relative humidity for all points                          LSCLD2B.84     
!                                                                          LSCLD2B.85     
      REAL              !, INTENT(INOUT)                                   LSCLD2B.86     
     & Q(PFIELD,LEVELS)                                                    LSCLD2B.87     
!       On input : Total water content (QW) (kg per kg air).               LSCLD2B.88     
!       On output: Specific humidity at processed levels                   LSCLD2B.89     
!                   (kg water per kg air).                                 LSCLD2B.90     
     &,T(PFIELD,LEVELS)                                                    LSCLD2B.91     
!       On input : Liquid/frozen water temperature (TL) (K).               LSCLD2B.92     
!       On output: Temperature at processed levels (K).                    LSCLD2B.93     
!                                                                          LSCLD2B.94     
      REAL              !, INTENT(OUT)                                     LSCLD2B.95     
     & CF(PFIELD,LEVELS)                                                   LSCLD2B.96     
!       Cloud fraction at processed levels (decimal fraction).             LSCLD2B.97     
     &,QCL(PFIELD,LEVELS)                                                  LSCLD2B.98     
!       Cloud liquid water content at processed levels (kg per kg air).    LSCLD2B.99     
     &,CFL(PFIELD,LEVELS)                                                  LSCLD2B.100    
!       Liquid cloud fraction at processed levels (decimal fraction).      LSCLD2B.101    
     &,CFF(PFIELD,LEVELS)                                                  LSCLD2B.102    
!       Frozen cloud fraction at processed levels (decimal fraction).      LSCLD2B.103    
!                                                                          LSCLD2B.104    
!     Error Status:                                                        LSCLD2B.105    
      INTEGER ERROR     !, INTENT(OUT)  0 if OK; 1 if bad arguments.       LSCLD2B.106    
!                                                                          LSCLD2B.107    
!  Local parameters and other physical constants------------------------   LSCLD2B.108    
      REAL ROOTWO       ! Sqrt(2.)                                         LSCLD2B.109    
!                                                                          LSCLD2B.110    
!  Local scalars--------------------------------------------------------   LSCLD2B.111    
!                                                                          LSCLD2B.112    
!  (a) Scalars effectively expanded to workspace by the Cray (using        LSCLD2B.113    
!      vector registers).                                                  LSCLD2B.114    
      REAL                                                                 LSCLD2B.115    
     & QCFRBS           ! qCF / bs                                         LSCLD2B.116    
     &,PHIQCF           ! Arc-cosine term in Cloud ice fraction calc.      LSCLD2B.117    
     &,COSQCF           ! Cosine term in Cloud ice fraction calc.          LSCLD2B.118    
!                                                                          LSCLD2B.119    
!  (b) Others.                                                             LSCLD2B.120    
      INTEGER K,I       ! Loop counters: K - vertical level index.         LSCLD2B.121    
!                       !                I - horizontal field index.       LSCLD2B.122    
      INTEGER QC_POINTS ! No. points with non-zero cloud                   LSCLD2B.123    
!                                                                          LSCLD2B.124    
!  Local dynamic arrays-------------------------------------------------   LSCLD2B.125    
!    7 blocks of real workspace are required.                              LSCLD2B.126    
      REAL                                                                 LSCLD2B.127    
     & P(POINTS)                                                           LSCLD2B.128    
!       Pressure at successive levels (Pa).                                LSCLD2B.129    
     &,QSL(POINTS)                                                         LSCLD2B.130    
!       Saturated specific humidity for temp TL or T.                      LSCLD2B.131    
     &,QN(POINTS)                                                          LSCLD2B.132    
!       Cloud water normalised with BS.                                    LSCLD2B.133    
     &,GRID_QC(POINTS,LEVELS)                                              LSCLD2B.134    
!       Gridbox mean saturation excess at processed levels                 LSCLD2B.135    
!        (kg per kg air). Set to RMDI when cloud is absent.                LSCLD2B.136    
     &,BS(POINTS,LEVELS)                                                   LSCLD2B.137    
!       Maximum moisture fluctuation /6*sigma at processed levels          LSCLD2B.138    
!        (kg per kg air). Set to RMDI when cloud is absent.                LSCLD2B.139    
      LOGICAL                                                              LSCLD2B.140    
     & LQC(POINTS)         ! True for points with non-zero cloud           LSCLD2B.141    
      INTEGER                                                              LSCLD2B.142    
     & INDEX(POINTS)       ! Index for points with non-zero cloud          LSCLD2B.143    
!                                                                          LSCLD2B.144    
!  External subroutine calls: ------------------------------------------   LSCLD2B.145    
      EXTERNAL QSAT,QSAT_WAT,LS_CLD_C                                      LSCLD2B.146    
!- End of Header                                                           LSCLD2B.147    
! ----------------------------------------------------------------------   LSCLD2B.148    
!  Check input arguments for potential over-writing problems.              LSCLD2B.149    
! ----------------------------------------------------------------------   LSCLD2B.150    
      ERROR=0                                                              LSCLD2B.151    
      IF (POINTS.GT.PFIELD) THEN                                           LSCLD2B.152    
        ERROR=1                                                            LSCLD2B.153    
        GO TO 9999                                                         LSCLD2B.154    
      END IF                                                               LSCLD2B.155    
!                                                                          LSCLD2B.156    
! ==Main Block==--------------------------------------------------------   LSCLD2B.157    
! Subroutine structure :                                                   LSCLD2B.158    
! Loop round levels to be processed.                                       LSCLD2B.159    
! ----------------------------------------------------------------------   LSCLD2B.160    
! Levels_do1:                                                              LSCLD2B.161    
      DO K=1,LEVELS                                                        LSCLD2B.162    
!                                                                          LSCLD2B.163    
! ----------------------------------------------------------------------   LSCLD2B.164    
! 1. Calculate QSAT at liquid/ice water temperature, TL, and initialize    LSCLD2B.165    
!    cloud water, sub-grid distribution and fraction arrays.               LSCLD2B.166    
!    This requires a preliminary calculation of the pressure.              LSCLD2B.167    
!    NB: On entry to the subroutine 'T' is TL and 'Q' is QW.               LSCLD2B.168    
! ----------------------------------------------------------------------   LSCLD2B.169    
! Points_do1:                                                              LSCLD2B.170    
        DO I=1, POINTS                                                     LSCLD2B.171    
          P(I) = AK(K) + PSTAR(I)*BK(K)                                    LSCLD2B.172    
          QCL(I,K) = 0.0                                                   LSCLD2B.173    
          CFL(I,K) = 0.0                                                   LSCLD2B.174    
          GRID_QC(I,K) = RMDI                                              LSCLD2B.175    
          BS(I,K) = RMDI                                                   LSCLD2B.176    
        END DO ! Points_do1                                                LSCLD2B.177    
!                                                                          LSCLD2B.178    
        CALL QSAT_WAT(QSL,T(1,K),P,POINTS)                                 LSCLD2B.179    
!                                                                          LSCLD2B.180    
! Points_do2:                                                              LSCLD2B.181    
        DO I=1, POINTS                                                     LSCLD2B.182    
! Rhcrit_if:                                                               LSCLD2B.183    
          IF (RHCPT(I,K) .LT. 1.) THEN                                     LSCLD2B.184    
! ----------------------------------------------------------------------   LSCLD2B.185    
! 2. Calculate the quantity QN = QC/BS = (QW/QSL-1)/(1-RHcrit)             LSCLD2B.186    
!    if RHcrit is less than 1                                              LSCLD2B.187    
! ----------------------------------------------------------------------   LSCLD2B.188    
!                                                                          LSCLD2B.189    
            QN(I) = (Q(I,K) / QSL(I) - 1.) / (1. - RHCPT(I,K))             LSCLD2B.190    
!                                                                          LSCLD2B.191    
! ----------------------------------------------------------------------   LSCLD2B.192    
! 3. Set logical variable for cloud, LQC, for the case RHcrit < 1;         LSCLD2B.193    
!    where QN > -1, i.e. qW/qSAT(TL,P) > RHcrit, there is cloud            LSCLD2B.194    
! ----------------------------------------------------------------------   LSCLD2B.195    
!                                                                          LSCLD2B.196    
            LQC(I) = (QN(I) .GT. -1.)                                      LSCLD2B.197    
          ELSE                                                             LSCLD2B.198    
! ----------------------------------------------------------------------   LSCLD2B.199    
! 2.a Calculate QN = QW - QSL if RHcrit equals 1                           LSCLD2B.200    
! ----------------------------------------------------------------------   LSCLD2B.201    
!                                                                          LSCLD2B.202    
            QN(I) = Q(I,K) - QSL(I)                                        LSCLD2B.203    
!                                                                          LSCLD2B.204    
! ----------------------------------------------------------------------   LSCLD2B.205    
! 3.a Set logical variable for cloud, LQC, for the case RHcrit = 1;        LSCLD2B.206    
!     where QN > 0, i.e. qW > qSAT(TL,P), there is cloud                   LSCLD2B.207    
! ----------------------------------------------------------------------   LSCLD2B.208    
!                                                                          LSCLD2B.209    
            LQC(I) = (QN(I) .GT. 0.)                                       LSCLD2B.210    
          END IF ! Rhcrit_if                                               LSCLD2B.211    
        END DO ! Points_do2                                                LSCLD2B.212    
!                                                                          LSCLD2B.213    
! ----------------------------------------------------------------------   LSCLD2B.214    
! 4. Form index of points where non-zero liquid cloud fraction             LSCLD2B.215    
! ----------------------------------------------------------------------   LSCLD2B.216    
!                                                                          LSCLD2B.217    
! Points_do3:                                                              LSCLD2B.218    
        QC_POINTS=0                                                        LSCLD2B.219    
        DO I=1,POINTS                                                      LSCLD2B.220    
          IF (LQC(I)) THEN                                                 LSCLD2B.221    
            QC_POINTS = QC_POINTS + 1                                      LSCLD2B.222    
            INDEX(QC_POINTS) = I                                           LSCLD2B.223    
          END IF                                                           LSCLD2B.224    
        END DO ! Points_do3                                                LSCLD2B.225    
!                                                                          LSCLD2B.226    
! ----------------------------------------------------------------------   LSCLD2B.227    
! 5. Call LS_CLD_C to calculate cloud water content, specific humidity,    LSCLD2B.228    
!                  water cloud fraction and determine temperature.         LSCLD2B.229    
! ----------------------------------------------------------------------   LSCLD2B.230    
! Qc_points_if:                                                            LSCLD2B.231    
        IF (QC_POINTS .GT. 0) THEN                                         LSCLD2B.232    
          CALL LS_CLD_C(P,QSL,QN,Q(1,K),T(1,K)                             LSCLD2B.233    
     &                 ,QCL(1,K),CFL(1,K),GRID_QC(1,K),BS(1,K)             LSCLD2B.234    
     &                 ,INDEX,QC_POINTS,POINTS,RHCPT(1,K))                 LSCLD2B.235    
        END IF ! Qc_points_if                                              LSCLD2B.236    
!                                                                          LSCLD2B.237    
! ----------------------------------------------------------------------   LSCLD2B.238    
! 6. Calculate cloud fractions for ice clouds.                             LSCLD2B.239    
!    THIS IS STILL HIGHLY EXPERIMENTAL.                                    LSCLD2B.240    
!    Begin by calculating Qsat(T,P), at Temperature, for estimate of bs.   LSCLD2B.241    
! ----------------------------------------------------------------------   LSCLD2B.242    
        CALL QSAT_WAT(QSL,T(1,K),P,POINTS)                                 LSCLD2B.243    
        ROOTWO = SQRT(2.)                                                  LSCLD2B.244    
!                                                                          LSCLD2B.245    
! Points_do4:                                                              LSCLD2B.246    
        DO I=1, POINTS                                                     LSCLD2B.247    
! ----------------------------------------------------------------------   LSCLD2B.248    
! 6a Calculate qCF/bs.                                                     LSCLD2B.249    
! ----------------------------------------------------------------------   LSCLD2B.250    
          QCFRBS =  QCF(I,K) / ((1. - RHCPT(I,K)) * QSL(I))                LSCLD2B.251    
!                                                                          LSCLD2B.252    
! ----------------------------------------------------------------------   LSCLD2B.253    
! 6b Calculate frozen cloud fraction from frozen cloud water content.      LSCLD2B.254    
! ----------------------------------------------------------------------   LSCLD2B.255    
          IF (QCFRBS .LE. 0.) THEN                                         LSCLD2B.256    
            CFF(I,K) = 0.0                                                 LSCLD2B.257    
          ELSEIF (0. .LT. QCFRBS  .AND. (6. * QCFRBS) .LE. 1.) THEN        LSCLD2B.258    
            CFF(I,K) = 0.5 * ((6. * QCFRBS)**(2./3.))                      LSCLD2B.259    
          ELSEIF (1. .LT. (6.*QCFRBS) .AND. QCFRBS .LT. 1.) THEN           LSCLD2B.260    
            PHIQCF = ACOS(ROOTWO * 0.75 * (1. - QCFRBS))                   LSCLD2B.261    
            COSQCF = COS((PHIQCF + (4. * PI)) / 3.)                        LSCLD2B.262    
            CFF(I,K) = 1. - (4. * COSQCF * COSQCF)                         LSCLD2B.263    
          ELSEIF (QCFRBS .GE. 1.) THEN                                     LSCLD2B.264    
            CFF(I,K) = 1.                                                  LSCLD2B.265    
          END IF                                                           LSCLD2B.266    
! ----------------------------------------------------------------------   LSCLD2B.267    
! 6c Calculate combined cloud fraction.                                    LSCLD2B.268    
! ----------------------------------------------------------------------   LSCLD2B.269    
!         Use maximum overlap condition                                    LSCLD2B.270    
!         CF(I,K) = MAX(CFL(I,K), CFF(I,K))                                LSCLD2B.271    
!                                                                          LSCLD2B.272    
!         Use minimum overlap condition                                    LSCLD2B.273    
          CF(I,K) = MIN(CFL(I,K)+CFF(I,K), 1.0)                            LSCLD2B.274    
!                                                                          LSCLD2B.275    
        END DO ! Points_do4                                                LSCLD2B.276    
!                                                                          LSCLD2B.277    
      END DO ! Levels_do                                                   LSCLD2B.278    
!                                                                          LSCLD2B.279    
 9999 CONTINUE ! Error exit                                                LSCLD2B.280    
      RETURN                                                               LSCLD2B.281    
      END                                                                  LSCLD2B.282    
! ======================================================================   LSCLD2B.283    
!                                                                          LSCLD2B.284    
!+ Large-scale Cloud Scheme Compression routine (Cloud points only).       LSCLD2B.285    
! Subroutine Interface:                                                    LSCLD2B.286    

      SUBROUTINE LS_CLD_C(                                                  3,3LSCLD2B.287    
     & P_F,QSL_F,QN_F,Q_F,T_F                                              LSCLD2B.288    
     &,QCL_F,CF_F,GRID_QC_F,BS_F                                           LSCLD2B.289    
     &,INDEX,POINTS,POINTS_F,RHCPT_F)                                      LSCLD2B.290    
      IMPLICIT NONE                                                        LSCLD2B.291    
!                                                                          LSCLD2B.292    
! Purpose: Calculates liquid cloud water amounts and cloud amounts,        LSCLD2B.293    
!          temperature and specific humidity from cloud-conserved and      LSCLD2B.294    
!          other model variables. This is done for one model level.        LSCLD2B.295    
!                                                                          LSCLD2B.296    
! Current Owner of Code: S. Cusack                                         LSCLD2B.297    
!                                                                          LSCLD2B.298    
! History:                                                                 LSCLD2B.299    
! Version   Date     Comment                                               LSCLD2B.300    
!  4.5    12-05-98   Original Code                                         LSCLD2B.301    
!                                                                          LSCLD2B.302    
! Description of Code:                                                     LSCLD2B.303    
!   FORTRAN 77  + common extensions also in Fortran90.                     LSCLD2B.304    
!   This code is written to UMDP3 version 6 programming standards.         LSCLD2B.305    
!                                                                          LSCLD2B.306    
!   System component covered: P292                                         LSCLD2B.307    
!                                                                          LSCLD2B.308    
!   Documentation: UMDP No.29                                              LSCLD2B.309    
!                                                                          LSCLD2B.310    
!  Global Variables:----------------------------------------------------   LSCLD2B.311    
*CALL C_R_CP                                                               LSCLD2B.312    
*CALL C_EPSLON                                                             LSCLD2B.313    
*CALL C_LHEAT                                                              LSCLD2B.314    
!                                                                          LSCLD2B.315    
!  Subroutine Arguments:------------------------------------------------   LSCLD2B.316    
      INTEGER           !, INTENT(IN)                                      LSCLD2B.317    
     & POINTS_F                                                            LSCLD2B.318    
!       No. of gridpoints being processed.                                 LSCLD2B.319    
     &,POINTS                                                              LSCLD2B.320    
!       No. of gridpoints with non-zero cloud                              LSCLD2B.321    
     &,INDEX(POINTS)                                                       LSCLD2B.322    
!       INDEX for  points with non-zero cloud from lowest model level.     LSCLD2B.323    
!                                                                          LSCLD2B.324    
      REAL              !, INTENT(IN)                                      LSCLD2B.325    
     & P_F(POINTS_F)                                                       LSCLD2B.326    
!       pressure (Pa).                                                     LSCLD2B.327    
     &,QSL_F(POINTS_F)                                                     LSCLD2B.328    
!       saturated humidity at temperature TL, and pressure P_F             LSCLD2B.329    
     &,QN_F(POINTS_F)                                                      LSCLD2B.330    
!       Normalised super/subsaturation ( = QC/BS).                         LSCLD2B.331    
     &,RHCPT_F(POINTS_F)                                                   LSCLD2B.332    
!       Critical relative humidity in all grid-cells.                      LSCLD2B.333    
!                                                                          LSCLD2B.334    
      REAL              !, INTENT(INOUT)                                   LSCLD2B.335    
     & Q_F(POINTS_F)                                                       LSCLD2B.336    
!       On input : Vapour + liquid water content (QW) (kg per kg air).     LSCLD2B.337    
!       On output: Specific humidity at processed levels                   LSCLD2B.338    
!                   (kg water per kg air).                                 LSCLD2B.339    
     &,T_F(POINTS_F)                                                       LSCLD2B.340    
!       On input : Liquid water temperature (TL) (K).                      LSCLD2B.341    
!       On output: Temperature at processed levels (K).                    LSCLD2B.342    
!                                                                          LSCLD2B.343    
      REAL              !, INTENT(OUT)                                     LSCLD2B.344    
     & QCL_F(POINTS_F)                                                     LSCLD2B.345    
!       Cloud liquid water content at processed levels (kg per kg air).    LSCLD2B.346    
     &,CF_F(POINTS_F)                                                      LSCLD2B.347    
!       Liquid cloud fraction at processed levels.                         LSCLD2B.348    
     &,GRID_QC_F(POINTS_F)                                                 LSCLD2B.349    
!       Super/subsaturation on processed levels. Input initially RMDI.     LSCLD2B.350    
     &,BS_F(POINTS_F)                                                      LSCLD2B.351    
!       Value of bs at processed levels. Input initialized to RMDI.        LSCLD2B.352    
!                                                                          LSCLD2B.353    
!  Local parameters and other physical constants------------------------   LSCLD2B.354    
      REAL ALPHL,LCRCP                  ! Derived parameters.              LSCLD2B.355    
      PARAMETER (                                                          LSCLD2B.356    
     & ALPHL=EPSILON*LC/R               ! For liquid AlphaL calculation.   LSCLD2B.357    
     &,LCRCP=LC/CP                      ! Lat ht of condensation/Cp.       LSCLD2B.358    
     &)                                                                    LSCLD2B.359    
      REAL WTN                          ! Weighting for ALPHAL iteration   LSCLD2B.360    
      INTEGER                                                              LSCLD2B.361    
     & ITS                              ! Total number of iterations       LSCLD2B.362    
      PARAMETER (ITS=5,WTN=0.75)                                           LSCLD2B.363    
!                                                                          LSCLD2B.364    
!  Local scalars--------------------------------------------------------   LSCLD2B.365    
!                                                                          LSCLD2B.366    
!  (a) Scalars effectively expanded to workspace by the Cray (using        LSCLD2B.367    
!      vector registers).                                                  LSCLD2B.368    
      REAL                                                                 LSCLD2B.369    
     & AL                ! LOCAL AL (see equation P292.6).                 LSCLD2B.370    
     &,ALPHAL            ! LOCAL ALPHAL (see equation P292.5).             LSCLD2B.371    
!                                                                          LSCLD2B.372    
!  (b) Others.                                                             LSCLD2B.373    
      INTEGER   I,II,N   ! Loop counters: I,II - horizontal field index.   LSCLD2B.374    
!                                       : N - iteration counter.           LSCLD2B.375    
!                                                                          LSCLD2B.376    
!  Local dynamic arrays-------------------------------------------------   LSCLD2B.377    
!    8 blocks of real workspace are required.                              LSCLD2B.378    
      REAL                                                                 LSCLD2B.379    
     & P(POINTS)                                                           LSCLD2B.380    
!       Pressure  (Pa).                                                    LSCLD2B.381    
     &,QS(POINTS)                                                          LSCLD2B.382    
!       Saturated spec humidity for temp T.                                LSCLD2B.383    
     &,QCN(POINTS)                                                         LSCLD2B.384    
!       Cloud water normalised with BS.                                    LSCLD2B.385    
     &,T(POINTS)                                                           LSCLD2B.386    
!       temperature.                                                       LSCLD2B.387    
     &,Q(POINTS)                                                           LSCLD2B.388    
!       specific humidity.                                                 LSCLD2B.389    
     &,BS(POINTS)                                                          LSCLD2B.390    
!       Sigmas*sqrt(6): sigmas the parametric standard deviation of        LSCLD2B.391    
!       local cloud water content fluctuations.                            LSCLD2B.392    
     &,ALPHAL_NM1(POINTS)                                                  LSCLD2B.393    
!       ALPHAL at previous iteration.                                      LSCLD2B.394    
!                                                                          LSCLD2B.395    
!  External subroutine calls: ------------------------------------------   LSCLD2B.396    
      EXTERNAL QSAT_WAT                                                    LSCLD2B.397    
!                                                                          LSCLD2B.398    
!- End of Header                                                           LSCLD2B.399    
!                                                                          LSCLD2B.400    
! ==Main Block==--------------------------------------------------------   LSCLD2B.401    
! Operate on INDEXed points with non-zero cloud fraction.                  LSCLD2B.402    
! ----------------------------------------------------------------------   LSCLD2B.403    
! Points_do1:                                                              LSCLD2B.404    
      DO I=1, POINTS                                                       LSCLD2B.405    
        II = INDEX(I)                                                      LSCLD2B.406    
        P(I)  = P_F(II)                                                    LSCLD2B.407    
        QCN(I)= QN_F(II)                                                   LSCLD2B.408    
! ----------------------------------------------------------------------   LSCLD2B.409    
! 1. Calculate ALPHAL (eq P292.5) and AL (P292.6).                         LSCLD2B.410    
!    CAUTION: T_F acts as TL (input value) until update in final section   LSCLD2B.411    
!    CAUTION: Q_F acts as QW (input value) until update in final section   LSCLD2B.412    
! ----------------------------------------------------------------------   LSCLD2B.413    
!                                                                          LSCLD2B.414    
        ALPHAL = ALPHL * QSL_F(II) / (T_F(II) * T_F(II))       ! P292.5    LSCLD2B.415    
        AL = 1.0 / (1.0 + (LCRCP * ALPHAL))                    ! P292.6    LSCLD2B.416    
        ALPHAL_NM1(I) = ALPHAL                                             LSCLD2B.417    
!                                                                          LSCLD2B.418    
! Rhcrit_if1:                                                              LSCLD2B.419    
        IF (RHCPT_F(II) .LT. 1.) THEN                                      LSCLD2B.420    
! ----------------------------------------------------------------------   LSCLD2B.421    
! 2. Calculate cloud fraction CF, BS (ie. sigma*sqrt(6), where sigma is    LSCLD2B.422    
!    as in P292.14) and normalised cloud water QCN=qc/BS, using eqs        LSCLD2B.423    
!    P292.15 & 16 if RHcrit < 1.                                           LSCLD2B.424    
! N.B. QN (input) is initially in QCN                                      LSCLD2B.425    
! N.B. QN does not depend on AL and so CF and QCN can be calculated        LSCLD2B.426    
!      outside the iteration (which is performed in LS_CLD_C).             LSCLD2B.427    
!      QN is > -1 for all points processed so CF > 0.                      LSCLD2B.428    
! ----------------------------------------------------------------------   LSCLD2B.429    
!                                                                          LSCLD2B.430    
          BS(I) = (1.0 - RHCPT_F(II)) * AL * QSL_F(II)         ! P292.14   LSCLD2B.431    
          IF (QCN(I) .LE. 0.) THEN                                         LSCLD2B.432    
            CF_F(II) = 0.5 * (1. + QCN(I)) * (1. + QCN(I))                 LSCLD2B.433    
            QCN(I)= (1. + QCN(I)) * (1. + QCN(I)) * (1. + QCN(I)) / 6.     LSCLD2B.434    
          ELSEIF (QCN(I) .LT. 1.) THEN                                     LSCLD2B.435    
            CF_F(II) = 1. - 0.5 * (1. - QCN(I)) * (1. - QCN(I))            LSCLD2B.436    
            QCN(I)=QCN(I) + (1.-QCN(I)) * (1.-QCN(I)) * (1.-QCN(I))/6.     LSCLD2B.437    
          ELSE ! QN .GE. 1                                                 LSCLD2B.438    
            CF_F(II) = 1.                                                  LSCLD2B.439    
          END IF ! QCN_if                                                  LSCLD2B.440    
        ELSE ! i.e. if RHcrit = 1                                          LSCLD2B.441    
! ----------------------------------------------------------------------   LSCLD2B.442    
! 3.a If RHcrit = 1., all points processed have QN > 0 and CF = 1.         LSCLD2B.443    
! ----------------------------------------------------------------------   LSCLD2B.444    
          BS(I) = AL                                                       LSCLD2B.445    
          CF_F(II) = 1.                                                    LSCLD2B.446    
        END IF ! Rhcrit_if1                                                LSCLD2B.447    
!                                                                          LSCLD2B.448    
! ----------------------------------------------------------------------   LSCLD2B.449    
! 3.1 Calculate 1st approx. to qc (store in QCL)                           LSCLD2B.450    
! ----------------------------------------------------------------------   LSCLD2B.451    
!                                                                          LSCLD2B.452    
        QCL_F(II) = QCN(I) * BS(I)                                         LSCLD2B.453    
!                                                                          LSCLD2B.454    
! ----------------------------------------------------------------------   LSCLD2B.455    
! 3.2 Calculate 1st approx. specific humidity (total minus cloud water)    LSCLD2B.456    
! ----------------------------------------------------------------------   LSCLD2B.457    
!                                                                          LSCLD2B.458    
        Q(I) = Q_F(II) - QCL_F(II)                                         LSCLD2B.459    
!                                                                          LSCLD2B.460    
! ----------------------------------------------------------------------   LSCLD2B.461    
! 3.3 Calculate 1st approx. to temperature, adjusting for latent heating   LSCLD2B.462    
! ----------------------------------------------------------------------   LSCLD2B.463    
!                                                                          LSCLD2B.464    
        T(I) = T_F(II) + LCRCP*QCL_F(II)                                   LSCLD2B.465    
      END DO ! Points_do1                                                  LSCLD2B.466    
!                                                                          LSCLD2B.467    
! ----------------------------------------------------------------------   LSCLD2B.468    
! 4. Iteration to find better cloud water values.                          LSCLD2B.469    
! ----------------------------------------------------------------------   LSCLD2B.470    
! Its_if:                                                                  LSCLD2B.471    
      IF (ITS .GE. 2) THEN                                                 LSCLD2B.472    
! Its_do:                                                                  LSCLD2B.473    
        DO N=2, ITS                                                        LSCLD2B.474    
!                                                                          LSCLD2B.475    
          CALL QSAT_WAT(QS,T,P,POINTS)                                     LSCLD2B.476    
! Points_do2:                                                              LSCLD2B.477    
          DO I=1, POINTS                                                   LSCLD2B.478    
            II = INDEX(I)                                                  LSCLD2B.479    
! T_if:                                                                    LSCLD2B.480    
            IF (T(I) .GT. T_F(II)) THEN                                    LSCLD2B.481    
!           NB. T > TL implies cloud fraction > 0.                         LSCLD2B.482    
              ALPHAL = (QS(I) - QSL_F(II)) / (T(I) - T_F(II))              LSCLD2B.483    
              ALPHAL = WTN * ALPHAL + (1.0 - WTN) * ALPHAL_NM1(I)          LSCLD2B.484    
              ALPHAL_NM1(I) = ALPHAL                                       LSCLD2B.485    
              AL = 1.0 / (1.0 + (LCRCP * ALPHAL))                          LSCLD2B.486    
! Rhcrit_if2:                                                              LSCLD2B.487    
              IF (RHCPT_F(II) .LT. 1.) THEN                                LSCLD2B.488    
                BS(I) = (1.0 - RHCPT_F(II)) * AL * QSL_F(II)   ! P292.1    LSCLD2B.489    
              ELSE                                                         LSCLD2B.490    
                BS(I) = AL                                                 LSCLD2B.491    
              END IF  ! Rhcrit_if2                                         LSCLD2B.492    
!                                                                          LSCLD2B.493    
! ----------------------------------------------------------------------   LSCLD2B.494    
! 4.1 Calculate Nth approx. to qc (store in QCL).                          LSCLD2B.495    
! ----------------------------------------------------------------------   LSCLD2B.496    
!                                                                          LSCLD2B.497    
              QCL_F(II) = QCN(I) * BS(I)                                   LSCLD2B.498    
!                                                                          LSCLD2B.499    
! ----------------------------------------------------------------------   LSCLD2B.500    
! 4.2 Calculate Nth approx. spec. humidity (total minus cloud water).      LSCLD2B.501    
! ----------------------------------------------------------------------   LSCLD2B.502    
!                                                                          LSCLD2B.503    
              Q(I) = Q_F(II) - QCL_F(II)                                   LSCLD2B.504    
!                                                                          LSCLD2B.505    
! ----------------------------------------------------------------------   LSCLD2B.506    
! 4.3 Calculate Nth approx. to temperature, adjusting for latent heating   LSCLD2B.507    
! ----------------------------------------------------------------------   LSCLD2B.508    
!                                                                          LSCLD2B.509    
              T(I) = T_F(II) + LCRCP * QCL_F(II)                           LSCLD2B.510    
!                                                                          LSCLD2B.511    
            END IF ! T_if                                                  LSCLD2B.512    
          END DO ! Points_do2                                              LSCLD2B.513    
        END DO ! Its_do                                                    LSCLD2B.514    
      END IF ! Its_if                                                      LSCLD2B.515    
!                                                                          LSCLD2B.516    
! ----------------------------------------------------------------------   LSCLD2B.517    
! 5. Finally scatter back cloud point results to full field arrays.        LSCLD2B.518    
!    CAUTION: T_F updated from TL (input) to T (output)                    LSCLD2B.519    
!    CAUTION: Q_F updated from QW (input) to Q (output)                    LSCLD2B.520    
! ----------------------------------------------------------------------   LSCLD2B.521    
!                                                                          LSCLD2B.522    
CDIR$ IVDEP                                                                LSCLD2B.523    
! Points_do3:                                                              LSCLD2B.524    
      DO I=1,POINTS                                                        LSCLD2B.525    
        Q_F(INDEX(I)) = Q(I)                                               LSCLD2B.526    
        T_F(INDEX(I)) = T(I)                                               LSCLD2B.527    
        GRID_QC_F(INDEX(I)) = BS(I) * QN_F(INDEX(I))                       LSCLD2B.528    
        BS_F(INDEX(I)) = BS(I)                                             LSCLD2B.529    
      END DO ! Points_do3                                                  LSCLD2B.530    
!                                                                          LSCLD2B.531    
      RETURN                                                               LSCLD2B.532    
      END                                                                  LSCLD2B.533    
! ======================================================================   LSCLD2B.534    
*ENDIF                                                                     LSCLD2B.535