*IF DEF,A09_1A,OR,DEF,RECON                                                UIE3F404.34     
C ******************************COPYRIGHT******************************    GTS2F400.5329   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.5330   
C                                                                          GTS2F400.5331   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.5332   
C restrictions as set forth in the contract.                               GTS2F400.5333   
C                                                                          GTS2F400.5334   
C                Meteorological Office                                     GTS2F400.5335   
C                London Road                                               GTS2F400.5336   
C                BRACKNELL                                                 GTS2F400.5337   
C                Berkshire UK                                              GTS2F400.5338   
C                RG12 2SZ                                                  GTS2F400.5339   
C                                                                          GTS2F400.5340   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.5341   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.5342   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.5343   
C Modelling at the above address.                                          GTS2F400.5344   
C ******************************COPYRIGHT******************************    GTS2F400.5345   
C                                                                          GTS2F400.5346   
C*LL  SUBROUTINE LS_CLD and other---------------------------------------   LSCLD1A.3      
CLL                                                                        LSCLD1A.4      
CLL  Purpose: Calculates cloud amount, cloud water amounts (ice and        LSCLD1A.5      
CLL           liquid), and temperature and specific humidity increments    LSCLD1A.6      
CLL           due to cloud formation, from cloud-conserved and other       LSCLD1A.7      
CLL           model variables.  This is done for levels 1 to LEVELS        LSCLD1A.8      
CLL           (specified in the argument list).                            LSCLD1A.9      
CLL  NB: Throughout, levels are counted from the bottom up, i.e. the       LSCLD1A.10     
CLL      lowest level under consideration is level 1, the next lowest      LSCLD1A.11     
CLL      level 2, and so on.                                               LSCLD1A.12     
CLL                                                                        LSCLD1A.13     
CLL  Suitable for single-column use.                                       LSCLD1A.14     
CLL                                                                        LSCLD1A.15     
CLL C.Wilson    <- programmer of some or all of previous code or changes   LSCLD1A.16     
CLL                                                                        LSCLD1A.17     
CLL  Model            Modification history from model version 3.0:         LSCLD1A.18     
CLL version  Date                                                          LSCLD1A.19     
CLL   3.4   5/08/94 Remove calls to TIMER (under *DEF TIMER). R.Rawlins    ARR1F304.1      
CLL                                                                        LSCLD1A.20     
!LL   4.0   9/05/95 Changed argument list to export mean cloud water       AYY2F400.115    
!LL                 content, QC, and bs for precipitation. A.C.Bushell     AYY2F400.116    
!LL                                                                        AYY2F400.117    
!LL   4.1   9/02/96 Set default QC and bs to RMDI in LS_CLD and removed    AYY1F401.1      
!LL                 zero cloud initialization in LS_CLD_C. A.C.Bushell     AYY1F401.2      
!LL   4.2    Oct. 96  T3E migration: *DEF CRAY removed; was used to        GSS1F402.109    
!LL                   switch on dynamic allocation & WHENIMD.              GSS1F402.110    
!LL                                    S.J.Swarbrick                       GSS1F402.111    
!LL                                                                        AYY1F401.3      
!LL   4.4   13/8/97 Several gathers and scatters removed from LSCLD_C      AAD2F404.207    
!LL                 in order to reduce run time.                           AAD2F404.208    
!LL                 D. Salmond                                             AAD2F404.209    
!LL  4.5  27/04/98  Add Fujitsu vectorization directives - needed          GRB0F405.124    
!LL                 because of vn4.4 optimization. RBarnes@ecmwf.int       GRB0F405.125    
!LL                                                                        AAD2F404.210    
CLL  Programming standard: Unified Model Documentation Paper No 4,         LSCLD1A.21     
CLL                        Version 2, dated 18/1/90.                       LSCLD1A.22     
CLL                                                                        LSCLD1A.23     
CLL  System component covered: P292                                        LSCLD1A.24     
CLL                                                                        LSCLD1A.25     
CLL  Documentation: UMDP No.29                                             LSCLD1A.26     
CLL                                                                        LSCLD1A.27     
C*L  Arguments:---------------------------------------------------------   LSCLD1A.28     

      SUBROUTINE LS_CLD(                                                    2,8LSCLD1A.29     
     + AK,BK,PSTAR,RHCRIT,LEVELS,POINTS,PFIELD,                            LSCLD1A.30     
     & T,CF,Q,QCF,QCL,                                                     AYY2F400.118    
     & GRID_QC,BS,ERROR                                                    AYY2F400.119    
     +)                                                                    LSCLD1A.32     
      IMPLICIT NONE                                                        LSCLD1A.33     
      INTEGER                                                              LSCLD1A.34     
     + LEVELS              ! IN No. of levels being processed.             LSCLD1A.35     
     +,POINTS              ! IN No. of gridpoints being processed.         LSCLD1A.36     
     +,PFIELD              ! IN No. of points in global field (at one      LSCLD1A.37     
C                          !    vertical level).                           LSCLD1A.38     
      REAL                                                                 LSCLD1A.39     
     + PSTAR(PFIELD)       ! IN Surface pressure (Pa).                     LSCLD1A.40     
     +,RHCRIT(LEVELS)      ! IN Critical relative humidity.  See the       LSCLD1A.41     
C                          !    the paragraph incorporating eqs P292.11    LSCLD1A.42     
C                          !    to P292.14; the values need to be tuned    LSCLD1A.43     
C                          !    for the given set of levels.               LSCLD1A.44     
     +,AK(LEVELS)          ! IN Hybrid "A" co-ordinate.                    LSCLD1A.45     
     +,BK(LEVELS)          ! IN Hybrid "B" co-ordinate.                    LSCLD1A.46     
      REAL                                                                 LSCLD1A.47     
     + Q(PFIELD,LEVELS)    ! INOUT On input: Total water content (QW)      LSCLD1A.48     
C                          !       (kg per kg air).                        LSCLD1A.49     
C                          !       On output: Specific humidity at         LSCLD1A.50     
C                          !       processed levels (kg water per kg       LSCLD1A.51     
C                          !       air).                                   LSCLD1A.52     
     +,T(PFIELD,LEVELS)    ! INOUT On input: Liquid/frozen water           LSCLD1A.53     
C                          !       temperature (TL) (K).                   LSCLD1A.54     
C                          !       On output: Temperature at processed     LSCLD1A.55     
C                          !       levels (K).                             LSCLD1A.56     
      REAL                                                                 LSCLD1A.57     
     + CF(PFIELD,LEVELS)   ! OUT Cloud fraction at processed levels        LSCLD1A.58     
C                          !     (decimal fraction).                       LSCLD1A.59     
     +,QCF(PFIELD,LEVELS)  ! OUT Cloud ice content at processed levels     LSCLD1A.60     
C                          !     (kg per kg air).                          LSCLD1A.61     
     +,QCL(PFIELD,LEVELS)  ! OUT Cloud liquid water content at             LSCLD1A.62     
C                          !     processed levels (kg per kg air).         LSCLD1A.63     
     &,GRID_QC(PFIELD,LEVELS)  ! OUT Gridbox mean cloud condensate at      AYY2F400.120    
!                                    processed levels (kg per kg air).     AYY2F400.121    
!                                    Set to RMDI when cloud is absent.     AYY1F401.4      
     &,BS(PFIELD,LEVELS)   ! OUT Maximum moisture fluctuation /6*sigma     AYY2F400.122    
!                                at processed levels (kg per kg air).      AYY2F400.123    
!                                Set to RMDI when cloud is absent.         AYY1F401.5      
      INTEGER ERROR        ! OUT 0 if OK; 1 if bad arguments.              LSCLD1A.64     
C                                                                          LSCLD1A.65     
C*L  Workspace usage----------------------------------------------------   LSCLD1A.66     
C    5 blocks of real workspace are required.                              LSCLD1A.67     
      REAL                 ! "Automatic" arrays on Cray.                   LSCLD1A.69     
     & P(POINTS)           ! WORK Pressure at successive levels (Pa).      LSCLD1A.70     
     &,QSL(POINTS)         ! WORK Saturated spec humidity for temp TL.     LSCLD1A.71     
     &,QN(POINTS)          ! WORK Cloud water normalised with BS.          LSCLD1A.72     
      LOGICAL                                                              LSCLD1A.73     
     & LQC(POINTS)         ! WORK True for points with non-zero cloud      LSCLD1A.74     
      INTEGER                                                              LSCLD1A.75     
     & INDEX(POINTS)       ! WORK Index for points with non-zero cloud     LSCLD1A.76     
C*  Local and other physical constants----------------------------------   AYY1F401.6      
*CALL C_MDI                                                                AYY1F401.7      
C*L  External subroutine called ----------------------------------------   LSCLD1A.89     
      EXTERNAL QSAT,LS_CLD_C                                               LSCLD1A.90     
C* Local, including SAVE'd, storage------------------------------------    LSCLD1A.97     
C                                                                          LSCLD1A.98     
C  (a) Scalars effectively expanded to workspace by the Cray (using        LSCLD1A.99     
C      vector registers).                                                  LSCLD1A.100    
C     REAL - None                                                          LSCLD1A.101    
C                                                                          LSCLD1A.102    
C  (b) Others.                                                             LSCLD1A.103    
      INTEGER K,I       ! Loop counters: K - vertical level index.         LSCLD1A.104    
C                       !                I - horizontal field index.       LSCLD1A.105    
      INTEGER QC_POINTS ! No. points with non-zero cloud                   LSCLD1A.106    
                                                                           LSCLD1A.107    
C-----------------------------------------------------------------------   LSCLD1A.111    
C  Check input arguments for potential over-writing problems.              LSCLD1A.112    
C-----------------------------------------------------------------------   LSCLD1A.113    
      ERROR=0                                                              LSCLD1A.114    
      IF(POINTS.GT.PFIELD)THEN                                             LSCLD1A.115    
        ERROR=1                                                            LSCLD1A.116    
        GOTO1000                                                           LSCLD1A.117    
      ENDIF                                                                LSCLD1A.118    
C                                                                          LSCLD1A.119    
C-----------------------------------------------------------------------   LSCLD1A.120    
CL Subroutine structure :                                                  LSCLD1A.121    
CL Loop round levels to be processed.                                      LSCLD1A.122    
C-----------------------------------------------------------------------   LSCLD1A.123    
C                                                                          LSCLD1A.124    
      DO K=1,LEVELS                                                        LSCLD1A.125    
C                                                                          LSCLD1A.126    
C-----------------------------------------------------------------------   LSCLD1A.127    
CL 1. Calculate QSAT at liquid/ice water temperature, TL,                  LSCLD1A.128    
CL    and initialise cloud ice, water and fraction arrays.                 LSCLD1A.129    
C     This requires a preliminary calculation of the pressure.             LSCLD1A.130    
C     NB: On entry to the subroutine 'T' is TL and 'Q' is QW.              LSCLD1A.131    
C-----------------------------------------------------------------------   LSCLD1A.132    
C                                                                          LSCLD1A.133    
        DO I=1,POINTS                                                      LSCLD1A.134    
          P(I)=AK(K)+PSTAR(I)*BK(K)                                        LSCLD1A.135    
          QCF(I,K)=0.0                                                     LSCLD1A.136    
          QCL(I,K)=0.0                                                     LSCLD1A.137    
          CF(I,K) =0.0                                                     LSCLD1A.138    
          GRID_QC(I,K) = RMDI                                              AYY1F401.8      
          BS(I,K) =RMDI                                                    AYY1F401.9      
        ENDDO ! Loop over points                                           LSCLD1A.139    
C                                                                          LSCLD1A.140    
        CALL QSAT(QSL,T(1,K),P,POINTS)                                     LSCLD1A.141    
C                                                                          LSCLD1A.142    
        DO I=1,POINTS                                                      LSCLD1A.143    
          IF (RHCRIT(K) .LT. 1.) THEN                                      LSCLD1A.144    
C                                                                          LSCLD1A.145    
C-----------------------------------------------------------------------   LSCLD1A.146    
CL 2. Calculate the quantity QN = QC/BS = (QW/QSL-1)/(1-RHcrit)            LSCLD1A.147    
CL    if RHcrit is less than 1                                             LSCLD1A.148    
C-----------------------------------------------------------------------   LSCLD1A.149    
C                                                                          LSCLD1A.150    
            QN(I) = (Q(I,K)/QSL(I)-1.)/(1.-RHCRIT(K))                      LSCLD1A.151    
C                                                                          LSCLD1A.152    
C-----------------------------------------------------------------------   LSCLD1A.153    
CL 3. Set logical variable for cloud, LQC, for the case RHcrit < 1;        LSCLD1A.154    
C     where QN > -1, i.e. qW/qSAT(TL,P) > RHcrit, there is cloud           LSCLD1A.155    
C-----------------------------------------------------------------------   LSCLD1A.156    
C                                                                          LSCLD1A.157    
            LQC(I) = (QN(I) .GT. -1.)                                      LSCLD1A.158    
          ELSE                                                             LSCLD1A.159    
C                                                                          LSCLD1A.160    
C-----------------------------------------------------------------------   LSCLD1A.161    
CL 2.a Calculate QN = QW - QSL if RHcrit equals 1                          LSCLD1A.162    
C-----------------------------------------------------------------------   LSCLD1A.163    
C                                                                          LSCLD1A.164    
            QN(I) = Q(I,K) - QSL(I)                                        LSCLD1A.165    
C                                                                          LSCLD1A.166    
C-----------------------------------------------------------------------   LSCLD1A.167    
CL 3.a Set logical variable for cloud, LQC, for the case RHcrit = 1;       LSCLD1A.168    
CL     where QN > 0, i.e. qW > qSAT(TL,P), there is cloud                  LSCLD1A.169    
C-----------------------------------------------------------------------   LSCLD1A.170    
C                                                                          LSCLD1A.171    
            LQC(I) = (QN(I) .GT. 0.)                                       LSCLD1A.172    
          ENDIF ! Test on RHCRIT                                           LSCLD1A.173    
        ENDDO ! Loop over points                                           LSCLD1A.174    
C                                                                          LSCLD1A.175    
C-----------------------------------------------------------------------   LSCLD1A.176    
CL 4. Form index of points where non-zero cloud fraction                   LSCLD1A.177    
C-----------------------------------------------------------------------   LSCLD1A.178    
C                                                                          LSCLD1A.179    
        QC_POINTS=0                                                        LSCLD1A.183    
        DO I=1,POINTS                                                      LSCLD1A.184    
          IF(LQC(I)) THEN                                                  LSCLD1A.185    
            QC_POINTS=QC_POINTS+1                                          LSCLD1A.186    
            INDEX(QC_POINTS)=I                                             LSCLD1A.187    
          ENDIF                                                            LSCLD1A.188    
        ENDDO ! Loop over points                                           LSCLD1A.189    
C                                                                          LSCLD1A.191    
C-----------------------------------------------------------------------   LSCLD1A.192    
CL 5. Call LS_CLD_C to calculate cloud ice and water contents, cloud       LSCLD1A.193    
CL                  fractions, spec. humidity and determine temperature    LSCLD1A.194    
C-----------------------------------------------------------------------   LSCLD1A.195    
C                                                                          LSCLD1A.196    
        IF(QC_POINTS.GT.0) THEN                                            AYY2F400.124    
          CALL LS_CLD_C(P,RHCRIT(K),QSL,QN,Q(1,K),T(1,K),QCF(1,K),         AYY2F400.125    
     &                  QCL(1,K),CF(1,K),GRID_QC(1,K),BS(1,K),             AYY2F400.126    
     &                  INDEX,QC_POINTS,POINTS)                            AYY2F400.127    
        ENDIF ! qc_points > 0                                              AYY2F400.128    
C                                                                          LSCLD1A.201    
      ENDDO ! Loop over levels                                             LSCLD1A.202    
C                                                                          LSCLD1A.203    
 1000 CONTINUE ! Error exit                                                LSCLD1A.204    
      RETURN                                                               LSCLD1A.208    
      END                                                                  LSCLD1A.209    
                                                                           LSCLD1A.210    
C*LL  SUBROUTINE LS_CLD_C-----------------------------------------------   LSCLD1A.211    
CLL                                                                        LSCLD1A.212    
CLL  Language: FORTRAN 77;  runs under at least IBM and Cray compilers,    LSCLD1A.213    
CLL            after going through a Cray update-like preprocessor.        LSCLD1A.214    
CLL                                                                        LSCLD1A.215    
CLL  Suitable for single-column use.                                       LSCLD1A.216    
CLL                                                                        LSCLD1A.217    
CLL  Model            Modification history from model version 3.0:         LSCLD1A.218    
CLL version  Date                                                          LSCLD1A.219    
CLL                                                                        LSCLD1A.220    
CLL  Programming standard: Unified Model Documentation Paper No 4,         LSCLD1A.221    
CLL                        Version 1, dated 07/2/91.                       LSCLD1A.222    
CLL                                                                        LSCLD1A.223    
CLL  System component covered: P292                                        LSCLD1A.224    
CLL                                                                        LSCLD1A.225    
CLL  Purpose: Calculates cloud water amounts (ice and liquid), cloud       LSCLD1A.226    
CLL           amounts and temperature and specific humidity                LSCLD1A.227    
CLL           from cloud-conserved and other model variables.              LSCLD1A.228    
CLL           This is done for one level.                                  LSCLD1A.229    
CLL           Iteration is used to improve the determination of            LSCLD1A.230    
CLL           ALPHAL, hence AL and so QCF, QCL, Q and T.                   LSCLD1A.231    
CLL                                                                        LSCLD1A.232    
CLL  Documentation: UMDP No.29                                             LSCLD1A.233    
CLL                                                                        LSCLD1A.234    
CLL                                                                        LSCLD1A.235    
C*L  Arguments:---------------------------------------------------------   LSCLD1A.236    

      SUBROUTINE LS_CLD_C(                                                  3,3LSCLD1A.237    
     & P_F,RHCRIT,QSL_F,QN_F,Q_F,T_F                                       AYY2F400.129    
     &,QCF_F,QCL_F,CF_F,GRID_QC_F,BS_F                                     AYY2F400.130    
     &,INDEX,POINTS,POINTS_F)                                              AYY2F400.131    
      IMPLICIT NONE                                                        LSCLD1A.240    
      INTEGER                                                              LSCLD1A.241    
     + POINTS_F            ! IN No. of gridpoints being processed.         LSCLD1A.242    
     +,POINTS              ! IN No. of gridpoints with non-zero cloud      LSCLD1A.243    
     +,INDEX(POINTS)       ! IN INDEX for  points with non-zero cloud      LSCLD1A.244    
C                          !    from lowest model level.                   LSCLD1A.245    
      REAL                                                                 LSCLD1A.246    
     + P_F(POINTS_F)       ! IN pressure (Pa).                             LSCLD1A.247    
     +,QSL_F(POINTS_F)     ! IN saturated humidity at temperature TL,      LSCLD1A.248    
C                          !    and pressure P_F                           LSCLD1A.249    
     +,QN_F(POINTS_F)      ! IN Normalised super/subsaturation (=QC/BS).   LSCLD1A.250    
     +,RHCRIT              ! IN Critical relative humidity.  See the       LSCLD1A.251    
C                          !    the paragraph incorporating eqs P292.11    LSCLD1A.252    
C                          !    to P292.14;                                LSCLD1A.253    
      REAL                                                                 LSCLD1A.254    
     + Q_F(POINTS_F)       ! INOUT On input: Total water content (QW)      LSCLD1A.255    
C                          !       (kg per kg air).                        LSCLD1A.256    
C                          !       On output: Specific humidity at         LSCLD1A.257    
C                          !       processed levels (kg water per kg       LSCLD1A.258    
C                          !       air).                                   LSCLD1A.259    
     +,T_F(POINTS_F)       ! INOUT On input: Liquid/frozen water           LSCLD1A.260    
C                          !       temperature (TL) (K).                   LSCLD1A.261    
C                          !       On output: Temperature at processed     LSCLD1A.262    
C                          !       levels (K).                             LSCLD1A.263    
      REAL                                                                 LSCLD1A.264    
     + QCF_F(POINTS_F)     ! OUT Cloud ice content at processed levels     LSCLD1A.265    
C                          !     (kg per kg air).                          LSCLD1A.266    
     +,QCL_F(POINTS_F)     ! OUT Cloud liquid water content at             LSCLD1A.267    
C                          !     processed levels (kg per kg air).         LSCLD1A.268    
     +,CF_F(POINTS_F)      ! OUT Cloud fraction at processed levels.       LSCLD1A.269    
C                                                                          LSCLD1A.270    
     &,GRID_QC_F(POINTS_F) ! OUT Super/subsaturation on processed levels   AYY2F400.132    
!                                Input initialized to RMDI.                AYY1F401.10     
     &,BS_F(POINTS_F)      ! OUT Value of bs at processed levels.          AYY2F400.134    
!                                Input initialized to RMDI.                AYY1F401.11     
C*L  Workspace usage----------------------------------------------------   LSCLD1A.271    
!    14 blocks of real workspace are required.                             AYY2F400.136    
      REAL                 ! "Automatic" arrays on Cray.                   LSCLD1A.274    
     & P(POINTS)           ! WORK Pressure  (Pa).                          LSCLD1A.275    
     &,QS(POINTS)          ! WORK Saturated spec humidity for temp T.      LSCLD1A.279    
     &,QCN(POINTS)         ! WORK Cloud water normalised with BS.          LSCLD1A.280    
     &,T(POINTS)           ! WORK temperature.                             LSCLD1A.281    
     &,Q(POINTS)           ! WORK specific humidity.                       LSCLD1A.282    
     &,BS(POINTS)          ! WORK Sigmas*sqrt(6): sigmas the parametric    AYY2F400.137    
!                                 standard deviation of local cloud        AYY2F400.138    
!                                 water content fluctuations.              AYY2F400.139    
     &,ALPHAL_NM1(POINTS)  ! WORK ALPHAL at previous iteration.            LSCLD1A.286    
C*  Local and other physical constants----------------------------------   LSCLD1A.304    
*CALL C_R_CP                                                               LSCLD1A.305    
*CALL C_EPSLON                                                             LSCLD1A.306    
*CALL C_LHEAT                                                              LSCLD1A.307    
*CALL C_0_DG_C                                                             LSCLD1A.308    
      REAL ALPHF,ALPHL,LSRCP,LCRCP      ! Derived parameters.              LSCLD1A.309    
     +,LFRCP,CPRLF                      !                                  LSCLD1A.310    
      PARAMETER (                                                          LSCLD1A.311    
     + ALPHF=EPSILON*(LF+LC)/R          ! For frozen AlphaL calculation.   LSCLD1A.312    
     +,ALPHL=EPSILON*LC/R               ! For liquid AlphaL calculation.   LSCLD1A.313    
     +,LSRCP=(LF+LC)/CP                 ! Lat ht of sublimation/Cp.        LSCLD1A.314    
     +,LCRCP=LC/CP                      ! Lat ht of condensation/Cp.       LSCLD1A.315    
     +,LFRCP=LF/CP                      ! Lat ht of fusion/Cp.             LSCLD1A.316    
     +,CPRLF=CP/LF                      ! Cp/lat ht of fusion.             LSCLD1A.317    
     +)                                                                    LSCLD1A.318    
      REAL WTN                                                             LSCLD1A.319    
      INTEGER                                                              LSCLD1A.320    
     & ITS                              ! Total number of iterations       LSCLD1A.321    
     &,N                                ! Iteration counter                LSCLD1A.322    
      PARAMETER (ITS=5,WTN=0.75)                                           LSCLD1A.323    
C*L  External subroutine called ----------------------------------------   LSCLD1A.324    
      EXTERNAL QSAT                                                        LSCLD1A.325    
C* Local, including SAVE'd, storage------------------------------------    LSCLD1A.326    
C                                                                          LSCLD1A.327    
C  (a) Scalars effectively expanded to workspace by the Cray (using        LSCLD1A.328    
C      vector registers).                                                  LSCLD1A.329    
      REAL                                                                 LSCLD1A.330    
     + AL                  ! LOCAL AL (see equation P292.6).               LSCLD1A.331    
     +,ALPHAL              ! LOCAL ALPHAL (see equation P292.5).           LSCLD1A.332    
     +,TESTT               ! LOCAL temporary temperature for partition     LSCLD1A.337    
C                          !       of cloud water into ice and liquid      LSCLD1A.338    
     +,FRACF               ! Fraction of cloud water which is frozen.      LSCLD1A.339    
C                                                                          LSCLD1A.340    
C  (b) Others.                                                             LSCLD1A.341    
      INTEGER   I       ! Loop counters: I - horizontal field index.       LSCLD1A.342    
      INTEGER II                                                           AAD2F404.211    
!                                                                          AYY2F400.166    
!-----------------------------------------------------------------------   AYY2F400.167    
!L Gather points with non-zero cloud fraction.                             AYY1F401.12     
C-----------------------------------------------------------------------   LSCLD1A.346    
C                                                                          LSCLD1A.347    
        DO I=1,POINTS                                                      LSCLD1A.348    
          P(I)=P_F(INDEX(I))                                               LSCLD1A.349    
          QCN(I)=QN_F(INDEX(I))                                            LSCLD1A.353    
        END DO ! Loop over points                                          AYY2F400.171    
C                                                                          LSCLD1A.355    
C-----------------------------------------------------------------------   LSCLD1A.356    
CL Loop over points with cloud.                                            LSCLD1A.357    
C-----------------------------------------------------------------------   LSCLD1A.358    
!                                                                          AYY1F401.13     
! Fujitsu vectorization directive                                          GRB0F405.126    
! Needed because of indirect addressing introduced at vn4.4                GRB0F405.127    
!OCL NOVREC                                                                GRB0F405.128    
        DO I=1,POINTS                                                      LSCLD1A.360    
        II=INDEX(I)                                                        AAD2F404.212    
!-----------------------------------------------------------------------   AYY1F401.14     
!L 1. Calculate ALPHAL (eq P292.5) and AL (P292.6).                        AYY1F401.15     
!-----------------------------------------------------------------------   AYY1F401.16     
!                                                                          AYY1F401.17     
          IF (T_F(II) .GT. TM) THEN                                        AAD2F404.213    
            ALPHAL = ALPHL * QSL_F(II) / (T_F(II) * T_F(II))   ! P292.5    AAD2F404.214    
            AL = 1.0 / (1.0 + (LCRCP * ALPHAL))         ! P292.6           AYY1F401.20     
          ELSE                                                             AYY1F401.21     
            ALPHAL = ALPHF * QSL_F(II) / (T_F(II) * T_F(II))   ! P292.5    AAD2F404.215    
            AL = 1.0 / (1.0 + (LSRCP * ALPHAL))         ! P292.6           AYY1F401.23     
          ENDIF                                                            AYY1F401.24     
          ALPHAL_NM1(I) = ALPHAL                                           AYY1F401.25     
!                                                                          AYY1F401.26     
          IF (RHCRIT .LT. 1.) THEN                                         LSCLD1A.361    
!-----------------------------------------------------------------------   AYY1F401.27     
!L 2. Calculate cloud fraction C, BS (ie. sigma*sqrt(6), where sigma is    AYY1F401.28     
!L    as in P292.14) and normalised cloud water QCN=qc/BS, using eqs       AYY1F401.29     
!L    P292.15 & 16 if RHcrit < 1.                                          AYY1F401.30     
!  N.B. QN (input) is initially in QCN                                     AYY1F401.31     
!  N.B. QN does not depend on AL and so CF and QCN can be calculated       AYY1F401.32     
!       outside the iteration (which is performed in LS_CLD_C).            AYY1F401.33     
!       QN is > -1 for all points processed so CF > 0.                     AYY1F401.34     
!-----------------------------------------------------------------------   AYY1F401.35     
!                                                                          AYY1F401.36     
            BS(I) = (1.0 - RHCRIT) * AL * QSL_F(II)    ! P292.14           AAD2F404.216    
            IF (QCN(I) .LE. 0.) THEN                                       LSCLD1A.370    
              CF_F(II)=0.5*(1.+QCN(I))*(1.+QCN(I))                         AAD2F404.217    
              QCN(I)=(1.+QCN(I))*(1.+QCN(I))*(1.+QCN(I))/6.                LSCLD1A.372    
            ELSEIF (QCN(I) .LT. 1.) THEN                                   LSCLD1A.373    
              CF_F(II)=1.-0.5*(1.-QCN(I))*(1.-QCN(I))                      AAD2F404.218    
              QCN(I)=QCN(I) + (1.-QCN(I))*(1.-QCN(I))*(1.-QCN(I))/6.       LSCLD1A.375    
            ELSE ! QN .GE. 1                                               LSCLD1A.376    
              CF_F(II)=1.                                                  AAD2F404.219    
            ENDIF ! Tests on QN                                            LSCLD1A.378    
          ELSE ! i.e. if RHcrit =1                                         LSCLD1A.379    
C-----------------------------------------------------------------------   LSCLD1A.380    
!L 3.a Set the cloud fraction to 1 if RHcrit = 1.                          AYY2F400.172    
C      For the case RHcrit =1, QN is > 0 for all points processed          LSCLD1A.382    
C      so CF =1.                                                           LSCLD1A.383    
C-----------------------------------------------------------------------   LSCLD1A.384    
            BS(I) = AL                                                     AYY1F401.38     
            CF_F(II) = 1.                                                  AAD2F404.220    
          ENDIF ! Test on RHCRIT                                           LSCLD1A.386    
C                                                                          LSCLD1A.387    
C-----------------------------------------------------------------------   LSCLD1A.388    
CL 3.1 Calculate 1st approx. to qc (store in QCL)                          LSCLD1A.408    
C-----------------------------------------------------------------------   LSCLD1A.409    
C                                                                          LSCLD1A.410    
          QCL_F(II)=QCN(I)*BS(I)                                           AAD2F404.221    
C                                                                          LSCLD1A.412    
C-----------------------------------------------------------------------   LSCLD1A.413    
CL 3.2 Calculate 1st approx. specific humidity (total minus cloud water)   LSCLD1A.414    
C-----------------------------------------------------------------------   LSCLD1A.415    
C                                                                          LSCLD1A.416    
          Q(I)=Q_F(II)-QCL_F(II)                                           AAD2F404.222    
C                                                                          LSCLD1A.418    
C-----------------------------------------------------------------------   LSCLD1A.419    
CL 3.3 Perform  partition of cloud water into liquid and ice               LSCLD1A.420    
CL     components, and calculate 1st approx. to temperature,               LSCLD1A.421    
CL     accounting for latent heating.                                      LSCLD1A.422    
CL     First assume cloud water is all liquid.                             LSCLD1A.423    
C-----------------------------------------------------------------------   LSCLD1A.424    
C                                                                          LSCLD1A.425    
          T(I)=T_F(II)+LCRCP*QCL_F(II)                                     AAD2F404.223    
          IF(T(I) .GT. TM) THEN          ! Liquid case                     LSCLD1A.427    
            QCF_F(II)=0.0                                                  AAD2F404.224    
          ELSE                           ! Frozen or mixed phase           LSCLD1A.429    
C                                                                          LSCLD1A.430    
C-----------------------------------------------------------------------   LSCLD1A.431    
CL 3.4 Cloud ice present; either all cloud water is cloud ice and T<TM     LSCLD1A.432    
CL     or a mixture of ice and liquid and T=TM                             LSCLD1A.433    
C                                                                          LSCLD1A.434    
C      Form test temperature assuming all ice                              LSCLD1A.435    
C      N.B. total cloud water stored in QCL at this stage                  LSCLD1A.436    
C-----------------------------------------------------------------------   LSCLD1A.437    
C                                                                          LSCLD1A.438    
            TESTT =T(I)+LFRCP*QCL_F(II)                                    AAD2F404.225    
            IF(TESTT .LT. TM) THEN       ! Frozen case                     LSCLD1A.440    
              QCF_F(II)=QCL_F(II)                                          AAD2F404.226    
              T(I)=TESTT                                                   LSCLD1A.442    
            ELSE                         ! Mixed phase case                LSCLD1A.443    
              QCF_F(II)= CPRLF*(TM-T(I))                                   AAD2F404.227    
              T(I)=TM                                                      LSCLD1A.445    
            ENDIF                        ! End frozen                      LSCLD1A.446    
          ENDIF                          ! End liquid                      LSCLD1A.447    
C                                                                          LSCLD1A.448    
C-----------------------------------------------------------------------   LSCLD1A.449    
CL 3.5 Calculate 1st approx. to cloud liquid water content.                LSCLD1A.450    
C-----------------------------------------------------------------------   LSCLD1A.451    
C                                                                          LSCLD1A.452    
          QCL_F(II) = QCL_F(II) - QCF_F(II)                                AAD2F404.228    
        ENDDO ! Loop over points                                           LSCLD1A.454    
C                                                                          LSCLD1A.455    
C-----------------------------------------------------------------------   LSCLD1A.456    
CL 4. Iteration to find better cloud water values.                         LSCLD1A.457    
C-----------------------------------------------------------------------   LSCLD1A.458    
C                                                                          LSCLD1A.459    
        IF(ITS.GE.2) THEN                                                  LSCLD1A.460    
         DO N=2,ITS                                                        LSCLD1A.461    
C                                                                          LSCLD1A.462    
          CALL QSAT(QS,T,P,POINTS)                                         LSCLD1A.463    
C                                                                          LSCLD1A.464    
! Fujitsu vectorization directive                                          GRB0F405.129    
! Needed because of indirect addressing introduced at vn4.4                GRB0F405.130    
!OCL NOVREC                                                                GRB0F405.131    
          DO I=1,POINTS                                                    LSCLD1A.465    
           II=INDEX(I)                                                     AAD2F404.229    
           IF(T(I).GT.T_F(II)) THEN                                        AAD2F404.230    
C           ! N.B. Cloud water > 0 implies T > TL and so the               LSCLD1A.467    
C           !        denominator in the following statement is non-zero.   LSCLD1A.468    
            ALPHAL=(QS(I)-QSL_F(II))/(T(I)-T_F(II))                        AAD2F404.231    
            ALPHAL=WTN*ALPHAL+(1.0-WTN)*ALPHAL_NM1(I)                      LSCLD1A.470    
            ALPHAL_NM1(I)=ALPHAL                                           LSCLD1A.471    
            FRACF=QCF_F(II)/(QCL_F(II)+QCF_F(II))                          AAD2F404.232    
            AL=1.0/(1.0 + (LCRCP+FRACF*LFRCP)*ALPHAL)                      LSCLD1A.473    
            IF (RHCRIT .LT. 1.) THEN                                       LSCLD1A.474    
              BS(I) = (1.0 - RHCRIT) * AL * QSL_F(II)         ! P292.14    AAD2F404.233    
            ELSE                                                           LSCLD1A.476    
              BS(I) = AL                                                   AYY1F401.40     
            ENDIF                                                          LSCLD1A.478    
C                                                                          LSCLD1A.479    
C-----------------------------------------------------------------------   LSCLD1A.480    
CL 4.1 Calculate Nth approx. to qc (store in QCL).                         LSCLD1A.481    
C-----------------------------------------------------------------------   LSCLD1A.482    
C                                                                          LSCLD1A.483    
            QCL_F(II)=QCN(I)*BS(I)                                         AAD2F404.234    
C                                                                          LSCLD1A.485    
C-----------------------------------------------------------------------   LSCLD1A.486    
CL 4.2 Calculate Nth approx. spec. humidity (total minus cloud water).     LSCLD1A.487    
C-----------------------------------------------------------------------   LSCLD1A.488    
C                                                                          LSCLD1A.489    
            Q(I)=Q_F(II)-QCL_F(II)                                         AAD2F404.235    
C                                                                          LSCLD1A.491    
C-----------------------------------------------------------------------   LSCLD1A.492    
CL 4.3 Perform  partition of cloud water into liquid and ice               LSCLD1A.493    
CL     components, and calculate Nth approx. to temperature,               LSCLD1A.494    
CL     accounting for latent heating.                                      LSCLD1A.495    
CL     First assume cloud water is all liquid.                             LSCLD1A.496    
C-----------------------------------------------------------------------   LSCLD1A.497    
C                                                                          LSCLD1A.498    
            T(I)=T_F(II)+LCRCP*QCL_F(II)                                   AAD2F404.236    
            IF(T(I) .GT. TM) THEN        ! Liquid case                     LSCLD1A.500    
              QCF_F(II)=0.0                                                AAD2F404.237    
            ELSE                         ! Frozen or mixed phase           LSCLD1A.502    
C                                                                          LSCLD1A.503    
C-----------------------------------------------------------------------   LSCLD1A.504    
CL 4.4 Cloud ice present; either all cloud water is cloud ice and T<TM     LSCLD1A.505    
CL     or a mixture of ice and liquid and T=TM                             LSCLD1A.506    
C                                                                          LSCLD1A.507    
C      Form test temperature assuming all ice                              LSCLD1A.508    
C      N.B. total cloud water stored in QCL at this stage                  LSCLD1A.509    
C-----------------------------------------------------------------------   LSCLD1A.510    
C                                                                          LSCLD1A.511    
              TESTT =T(I)+LFRCP*QCL_F(II)                                  AAD2F404.238    
              IF(TESTT .LT. TM) THEN     ! Frozen case                     LSCLD1A.513    
                QCF_F(II)=QCL_F(II)                                        AAD2F404.239    
                T(I)=TESTT                                                 LSCLD1A.515    
              ELSE                       ! Mixed phase case                LSCLD1A.516    
                QCF_F(II)= CPRLF*(TM-T(I))                                 AAD2F404.240    
                T(I)=TM                                                    LSCLD1A.518    
              ENDIF                      ! End frozen                      LSCLD1A.519    
            ENDIF                        ! End liquid                      LSCLD1A.520    
C                                                                          LSCLD1A.521    
C-----------------------------------------------------------------------   LSCLD1A.522    
CL 4.5 Calculate Nth approx. to cloud liquid water content.                LSCLD1A.523    
C-----------------------------------------------------------------------   LSCLD1A.524    
C                                                                          LSCLD1A.525    
            QCL_F(II) = QCL_F(II) - QCF_F(II)                              AAD2F404.241    
           ENDIF ! T > TL                                                  LSCLD1A.527    
          ENDDO ! Loop over points                                         LSCLD1A.528    
         ENDDO ! Loop over iterations                                      LSCLD1A.529    
        ENDIF ! ITS ge 2                                                   LSCLD1A.530    
C                                                                          LSCLD1A.531    
C-----------------------------------------------------------------------   LSCLD1A.532    
CL 5. Finally scatter back results                                         LSCLD1A.533    
C-----------------------------------------------------------------------   LSCLD1A.534    
C                                                                          LSCLD1A.535    
CDIR$ IVDEP                                                                LSCLD1A.536    
! Fujitsu vectorization directive                                          GRB0F405.132    
!OCL NOVREC                                                                GRB0F405.133    
      DO I=1,POINTS                                                        LSCLD1A.537    
        Q_F(INDEX(I)) = Q(I)                                               LSCLD1A.538    
        T_F(INDEX(I)) = T(I)                                               LSCLD1A.539    
        GRID_QC_F(INDEX(I)) = BS(I) * QN_F(INDEX(I))                       AYY2F400.177    
        BS_F(INDEX(I)) = BS(I)                                             AYY2F400.178    
      END DO ! Loop over points                                            AYY2F400.179    
C                                                                          LSCLD1A.544    
      RETURN                                                               LSCLD1A.545    
      END                                                                  LSCLD1A.546    
*ENDIF                                                                     LSCLD1A.547