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

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

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