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

      SUBROUTINE AREA_CLD(                                                  1,5AR_CLD2A.22     
     & AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD,T,CF_BULK,Q,QCF,      AR_CLD2A.23     
     & QCL,CF_LIQ,CF_ICE,ERROR,CF_AREA,AKH,BKH)                            AR_CLD2A.24     
!                                                                          AR_CLD2A.25     
      IMPLICIT NONE                                                        AR_CLD2A.26     
!                                                                          AR_CLD2A.27     
!                                                                          AR_CLD2A.28     
!                                                                          AR_CLD2A.29     
!     Purpose: To calculate an area as well as volume fraction of          AR_CLD2A.30     
!              cloud in a layer.                                           AR_CLD2A.31     
!                                                                          AR_CLD2A.32     
!     Method : A vertical profile of (q+qcL), qcF and Tl within a layer    AR_CLD2A.33     
!              is created, from which mean (q+qcL), qcF and Tl values      AR_CLD2A.34     
!              for 3 sub-layers can be found.  These 3 sub-layers are      AR_CLD2A.35     
!              one-third of the total layer thickness.                     AR_CLD2A.36     
!              Cloud volume calculations are performed on each sub-        AR_CLD2A.37     
!              layer, and the maximum cloud volume is the cloud area.      AR_CLD2A.38     
!                                                                          AR_CLD2A.39     
!     Comments: Compatible with versions 2A and 2B of Section 9.           AR_CLD2A.40     
!                                                                          AR_CLD2A.41     
!                                                                          AR_CLD2A.42     
! Current Owner of Code: S. Cusack                                         AR_CLD2A.43     
!                                                                          AR_CLD2A.44     
! History:                                                                 AR_CLD2A.45     
! Version   Date     Comment                                               AR_CLD2A.46     
!  4.5    14/05/98   Original Code     S. Cusack                           AR_CLD2A.47     
!                                                                          AR_CLD2A.48     
! Description of Code:                                                     AR_CLD2A.49     
!   FORTRAN 77  + common extensions also in Fortran90.                     AR_CLD2A.50     
!   This code is written to UMDP3 version 6 programming standards.         AR_CLD2A.51     
!                                                                          AR_CLD2A.52     
!   System component covered: P292                                         AR_CLD2A.53     
!                                                                          AR_CLD2A.54     
!   Documentation:                                                         AR_CLD2A.55     
!                                                                          AR_CLD2A.56     
!  Global Variables:----------------------------------------------------   AR_CLD2A.57     
!                                                                          AR_CLD2A.58     
*CALL C_LHEAT                                                              AR_CLD2A.59     
*CALL C_R_CP                                                               AR_CLD2A.60     
!                                                                          AR_CLD2A.61     
!   Subroutine arguments                                                   AR_CLD2A.62     
!----------------------------------------------------------------------    AR_CLD2A.63     
! IN variables                                                             AR_CLD2A.64     
!----------------------------------------------------------------------    AR_CLD2A.65     
      INTEGER LEVELS           ! No. of levels being processed.            AR_CLD2A.66     
!                                                                          AR_CLD2A.67     
      INTEGER POINTS           ! No. of gridpoints being processed.        AR_CLD2A.68     
!                                                                          AR_CLD2A.69     
      INTEGER PFIELD           ! No. of points in global field (at one     AR_CLD2A.70     
!                                vertical level).                          AR_CLD2A.71     
!                                                                          AR_CLD2A.72     
      REAL PSTAR(PFIELD)       ! Surface pressure (Pa).                    AR_CLD2A.73     
!                                                                          AR_CLD2A.74     
      REAL RHCRIT(LEVELS)      ! Critical relative humidity.  See the      AR_CLD2A.75     
!                                the paragraph incorporating eqs P292.11   AR_CLD2A.76     
!                                to P292.14; the values need to be tuned   AR_CLD2A.77     
!                                for the given set of levels.              AR_CLD2A.78     
      REAL QCF(PFIELD,LEVELS)  ! Cloud ice content at processed levels     AR_CLD2A.79     
!                                  (kg per kg air).                        AR_CLD2A.80     
      REAL AK(LEVELS)          ! Hybrid "A" co-ordinate.                   AR_CLD2A.81     
      REAL BK(LEVELS)          ! Hybrid "B" co-ordinate.                   AR_CLD2A.82     
      REAL AKH(LEVELS+1)          ! Hybrid "A" co-ordinate.                AR_CLD2A.83     
      REAL BKH(LEVELS+1)          ! Hybrid "B" co-ordinate.                AR_CLD2A.84     
!-----------------------------------------------------------------------   AR_CLD2A.85     
! INOUT variables                                                          AR_CLD2A.86     
!-----------------------------------------------------------------------   AR_CLD2A.87     
      REAL Q(PFIELD,LEVELS)    ! On input:  Total water content (QW)       AR_CLD2A.88     
!                                           (kg per kg air).               AR_CLD2A.89     
!                                On output: Specific humidity at process   AR_CLD2A.90     
!                                           levels (kg water per kg air)   AR_CLD2A.91     
      REAL T(PFIELD,LEVELS)    ! On input:  Liquid/frozen water            AR_CLD2A.92     
!                                           temperature (TL) (K).          AR_CLD2A.93     
!                                On output: Temperature at processed       AR_CLD2A.94     
!                                           levels (K).                    AR_CLD2A.95     
!-----------------------------------------------------------------------   AR_CLD2A.96     
! OUT variables                                                            AR_CLD2A.97     
!-----------------------------------------------------------------------   AR_CLD2A.98     
      REAL CF_BULK(PFIELD,LEVELS)! Cloud fraction at processed levels      AR_CLD2A.99     
!                                  (decimal fraction).                     AR_CLD2A.100    
      REAL QCL(PFIELD,LEVELS)    ! Cloud liquid water content at           AR_CLD2A.101    
!                                  processed levels (kg per kg air).       AR_CLD2A.102    
      REAL CF_LIQ(PFIELD,LEVELS) ! Grid-box mean cloud                     AR_CLD2A.103    
!                                            condensate at processed       AR_CLD2A.104    
!                                            levels (kg per kg air).       AR_CLD2A.105    
      REAL CF_ICE(PFIELD,LEVELS) ! Max moisture fluctuation                AR_CLD2A.106    
!                                          /6*sigma at processed levels    AR_CLD2A.107    
!                                            (kg per kg air).              AR_CLD2A.108    
      REAL CF_AREA(PFIELD,LEVELS)! Area cloud fraction                     AR_CLD2A.109    
!                                      (decimal fraction).                 AR_CLD2A.110    
      REAL RHCPT(PFIELD,LEVELS)  ! Critical relative humidity for          AR_CLD2A.111    
!                                  every grid cell.                        AR_CLD2A.112    
      INTEGER ERROR              ! 0 if OK; 1 if bad arguments.            AR_CLD2A.113    
!                                                                          AR_CLD2A.114    
!                                                                          AR_CLD2A.115    
! Local parameters                                                         AR_CLD2A.116    
!                                                                          AR_CLD2A.117    
      REAL LCRCP, ONETHIRD, DRAT_THRESH                                    AR_CLD2A.118    
!                                                                          AR_CLD2A.119    
      PARAMETER (                                                          AR_CLD2A.120    
     &            LCRCP=LC/CP                                              AR_CLD2A.121    
!      Latent heat of condensation divided by specific heat at constant    AR_CLD2A.122    
!      pressure                                                            AR_CLD2A.123    
     &          , ONETHIRD=1./3.                                           AR_CLD2A.124    
!      Threshold for change in (QT-QSAT)/QSAT between 2 layer midpoints    AR_CLD2A.125    
     &          , DRAT_THRESH=3.0E-01                                      AR_CLD2A.126    
     &           )                                                         AR_CLD2A.127    
!                                                                          AR_CLD2A.128    
!                                                                          AR_CLD2A.129    
!  Local Variables                                                         AR_CLD2A.130    
!                                                                          AR_CLD2A.131    
      REAL                                                                 AR_CLD2A.132    
     &     CF_TEMP(PFIELD,LEVELS)                                          AR_CLD2A.133    
!      Temporary storage of total cloud fraction in 3 sub-layers           AR_CLD2A.134    
     &    ,CF_LIQ_TEMP(PFIELD,LEVELS)                                      AR_CLD2A.135    
!      Temporary storage of total liquid cloud fraction in 3 sub-layers    AR_CLD2A.136    
     &    ,CF_ICE_TEMP(PFIELD,LEVELS)                                      AR_CLD2A.137    
!      Temporary storage of total ice cloud fraction in 3 sub-layers       AR_CLD2A.138    
     &    ,QCL_TEMP(PFIELD,LEVELS)                                         AR_CLD2A.139    
!      Temporary storage of total cloud frozen qc in 3 sub-layers          AR_CLD2A.140    
     &    ,P_LEV(POINTS,LEVELS)                                            AR_CLD2A.141    
!      Pressure at model levels                                            AR_CLD2A.142    
     &    ,P_HLEV(POINTS,LEVELS)                                           AR_CLD2A.143    
!      Pressure at model half-levels                                       AR_CLD2A.144    
     &    ,T_MID(PFIELD,LEVELS)                                            AR_CLD2A.145    
!      Mean temperature in middle third segment of layer                   AR_CLD2A.146    
     &    ,T_UP(PFIELD,LEVELS)                                             AR_CLD2A.147    
!      Mean temperature in upper third segment of layer                    AR_CLD2A.148    
     &    ,T_LOW(PFIELD,LEVELS)                                            AR_CLD2A.149    
!      Mean temperature in lower third segment of layer                    AR_CLD2A.150    
     &    ,QT_UP(PFIELD,LEVELS)                                            AR_CLD2A.151    
!      Mean total water in upper third segment of layer                    AR_CLD2A.152    
     &    ,QT_LOW(PFIELD,LEVELS)                                           AR_CLD2A.153    
!      Mean total water in lower third segment of layer                    AR_CLD2A.154    
     &    ,QT_MID(PFIELD,LEVELS)                                           AR_CLD2A.155    
!      Mean total water in middle third segment of layer                   AR_CLD2A.156    
     &    ,QCF_UP(PFIELD,LEVELS)                                           AR_CLD2A.157    
!      Mean total water in upper third segment of layer                    AR_CLD2A.158    
     &    ,QCF_LOW(PFIELD,LEVELS)                                          AR_CLD2A.159    
!      Mean total water in lower third segment of layer                    AR_CLD2A.160    
     &    ,QCF_MID(PFIELD,LEVELS)                                          AR_CLD2A.161    
!      Mean total water in middle third segment of layer                   AR_CLD2A.162    
     &    ,QST(POINTS)                                                     AR_CLD2A.163    
!      Saturated mixing ratio at layer temperature                         AR_CLD2A.164    
     &    ,DTDP(POINTS,LEVELS)                                             AR_CLD2A.165    
!      Gradient of temperature w.r.t. pressure                             AR_CLD2A.166    
     &    ,DQTDP(POINTS,LEVELS)                                            AR_CLD2A.167    
!      Gradient of (Q+QCL) w.r.t. pressure                                 AR_CLD2A.168    
     &    ,DQCFDP(POINTS,LEVELS)                                           AR_CLD2A.169    
!      Gradient of QCF w.r.t. pressure                                     AR_CLD2A.170    
     &    ,DRAT(POINTS,LEVELS)                                             AR_CLD2A.171    
!      Difference in (QT-QSAT)/QSAT between 2 layer midpoints              AR_CLD2A.172    
     &    ,T_LHLEV(POINTS,LEVELS)                                          AR_CLD2A.173    
!      Temperature at lower half-level in a layer                          AR_CLD2A.174    
     &    ,T_UHLEV(POINTS,LEVELS)                                          AR_CLD2A.175    
!      Temperature at upper half-level in a layer                          AR_CLD2A.176    
     &    ,QT_LHLEV(POINTS,LEVELS)                                         AR_CLD2A.177    
!      (Q+QCL) at lower half-level in a layer                              AR_CLD2A.178    
     &    ,QT_UHLEV(POINTS,LEVELS)                                         AR_CLD2A.179    
!      (Q+QCL) at upper half-level in a layer                              AR_CLD2A.180    
     &    ,QCF_LHLEV(POINTS,LEVELS)                                        AR_CLD2A.181    
!      QCF at lower half-level in a layer                                  AR_CLD2A.182    
     &    ,QCF_UHLEV(POINTS,LEVELS)                                        AR_CLD2A.183    
!      QCF at upper half-level in a layer                                  AR_CLD2A.184    
     &    ,DPLH                                                            AR_CLD2A.185    
!      Difference in pressure between layer upper half-level and layer     AR_CLD2A.186    
!      mean.                                                               AR_CLD2A.187    
     &    ,NUM1                                                            AR_CLD2A.188    
!      Temporary variable                                                  AR_CLD2A.189    
     &    ,T_LEV                                                           AR_CLD2A.190    
!      Temperature at mid-layer calculated so that vertical profile of     AR_CLD2A.191    
!      T in a layer is conservative.                                       AR_CLD2A.192    
     &    ,QT_LEV                                                          AR_CLD2A.193    
!      (Q+QCL) at mid-layer calculated so that vertical profile of         AR_CLD2A.194    
!      (Q+QCL) in a layer is conservative.                                 AR_CLD2A.195    
     &    ,QCF_LEV                                                         AR_CLD2A.196    
!      QCF at mid-layer calculated so that vertical profile of QCF in      AR_CLD2A.197    
!      a layer is conservative.                                            AR_CLD2A.198    
!                                                                          AR_CLD2A.199    
      INTEGER                                                              AR_CLD2A.200    
     &     I, LEVEL   ! HORIZ AND VERT LOOP VARIABLES RESPECTIVELY         AR_CLD2A.201    
!                                                                          AR_CLD2A.202    
!  External subroutine calls: ------------------------------------------   AR_CLD2A.203    
      EXTERNAL GLUE_CLD, QSAT                                              AR_CLD2A.204    
!- End of Header                                                           AR_CLD2A.205    
!                                                                          AR_CLD2A.206    
!                                                                          AR_CLD2A.207    
!  Calculate pressures at model levels and half-levels.                    AR_CLD2A.208    
      DO LEVEL=1,LEVELS                                                    AR_CLD2A.209    
        DO I=1,POINTS                                                      AR_CLD2A.210    
          P_LEV(I,LEVEL)=AK(LEVEL)+PSTAR(I)*BK(LEVEL)                      AR_CLD2A.211    
          P_HLEV(I,LEVEL)=AKH(LEVEL)+PSTAR(I)*BKH(LEVEL)                   AR_CLD2A.212    
        ENDDO                                                              AR_CLD2A.213    
      ENDDO                                                                AR_CLD2A.214    
!                                                                          AR_CLD2A.215    
!   Calculate gradients of T, QCF and (Q+QCL) w.r.t. pressure              AR_CLD2A.216    
      DO LEVEL=2,LEVELS                                                    AR_CLD2A.217    
        DO I=1,POINTS                                                      AR_CLD2A.218    
          num1=1./(P_LEV(I,LEVEL-1)-P_LEV(I,LEVEL))                        AR_CLD2A.219    
          DTDP(I,LEVEL)=(T(I,LEVEL-1)-T(I,LEVEL))*num1                     AR_CLD2A.220    
          DQTDP(I,LEVEL)=(Q(I,LEVEL-1)-Q(I,LEVEL))*num1                    AR_CLD2A.221    
          DQCFDP(I,LEVEL)=(QCF(I,LEVEL-1)-QCF(I,LEVEL))*num1               AR_CLD2A.222    
        ENDDO                                                              AR_CLD2A.223    
      ENDDO                                                                AR_CLD2A.224    
      DO I=1,POINTS                                                        AR_CLD2A.225    
        DTDP(I,1)=DTDP(I,2)                                                AR_CLD2A.226    
        DQTDP(I,1)=DQTDP(I,2)                                              AR_CLD2A.227    
        DQCFDP(I,1)=DQCFDP(I,2)                                            AR_CLD2A.228    
      ENDDO                                                                AR_CLD2A.229    
!  Calculate the gradient w.r.t. levels of (QT-QSAT)/QSAT.                 AR_CLD2A.230    
      LEVEL=1                                                              AR_CLD2A.231    
      CALL QSAT(QST,T(1,LEVEL),P_LEV(1,LEVEL),POINTS)                      AR_CLD2A.232    
      DO LEVEL=2,(LEVELS-1)                                                AR_CLD2A.233    
        DO I=1,POINTS                                                      AR_CLD2A.234    
          DRAT(I,LEVEL)=(Q(I,LEVEL-1)+QCF(I,LEVEL-1)-QST(I))/QST(I)        AR_CLD2A.235    
        ENDDO                                                              AR_CLD2A.236    
        CALL QSAT(QST,T(1,LEVEL),P_LEV(1,LEVEL),POINTS)                    AR_CLD2A.237    
        DO I=1,POINTS                                                      AR_CLD2A.238    
          DRAT(I,LEVEL)=ABS(DRAT(I,LEVEL)-(Q(I,LEVEL)+QCF(I,LEVEL)-        AR_CLD2A.239    
     &                                                 QST(I))/QST(I))     AR_CLD2A.240    
        ENDDO                                                              AR_CLD2A.241    
      ENDDO                                                                AR_CLD2A.242    
!                                                                          AR_CLD2A.243    
!  From values at model levels and gradients, calculate values at half-    AR_CLD2A.244    
!  levels.                                                                 AR_CLD2A.245    
      DO LEVEL=2,LEVELS                                                    AR_CLD2A.246    
        DO I=1,POINTS                                                      AR_CLD2A.247    
          DPLH=P_HLEV(I,LEVEL)-P_LEV(I,LEVEL)                              AR_CLD2A.248    
          T_LHLEV(I,LEVEL)=T(I,LEVEL)+DTDP(I,LEVEL)*DPLH                   AR_CLD2A.249    
          QT_LHLEV(I,LEVEL)=Q(I,LEVEL)+DQTDP(I,LEVEL)*DPLH                 AR_CLD2A.250    
          QCF_LHLEV(I,LEVEL)=QCF(I,LEVEL)+DQCFDP(I,LEVEL)*DPLH             AR_CLD2A.251    
          T_UHLEV(I,LEVEL-1)=T_LHLEV(I,LEVEL)                              AR_CLD2A.252    
          QT_UHLEV(I,LEVEL-1)=QT_LHLEV(I,LEVEL)                            AR_CLD2A.253    
          QCF_UHLEV(I,LEVEL-1)=QCF_LHLEV(I,LEVEL)                          AR_CLD2A.254    
        ENDDO                                                              AR_CLD2A.255    
      ENDDO                                                                AR_CLD2A.256    
!                                                                          AR_CLD2A.257    
!  Now determine whether gradients in (QT-QSAT)/QSAT exceed a threshold,   AR_CLD2A.258    
!  in which case switch to the other vertical interpolation method.        AR_CLD2A.259    
      DO LEVEL=2,(LEVELS-1)                                                AR_CLD2A.260    
        DO I=1,POINTS                                                      AR_CLD2A.261    
          IF ((DRAT(I,LEVEL).GT.DRAT_THRESH)) THEN                         AR_CLD2A.262    
            num1=P_HLEV(I,LEVEL)-P_LEV(I,LEVEL)                            AR_CLD2A.263    
            T_LHLEV(I,LEVEL)=T(I,LEVEL)+DTDP(I,LEVEL+1)*num1               AR_CLD2A.264    
            QT_LHLEV(I,LEVEL)=Q(I,LEVEL)+DQTDP(I,LEVEL+1)*num1             AR_CLD2A.265    
            QCF_LHLEV(I,LEVEL)=QCF(I,LEVEL)+DQCFDP(I,LEVEL+1)*num1         AR_CLD2A.266    
            num1=P_LEV(I,LEVEL-1)-P_HLEV(I,LEVEL)                          AR_CLD2A.267    
            T_UHLEV(I,LEVEL-1)=T(I,LEVEL-1)-DTDP(I,LEVEL-1)*num1           AR_CLD2A.268    
            QT_UHLEV(I,LEVEL-1)=Q(I,LEVEL-1)-DQTDP(I,LEVEL-1)*num1         AR_CLD2A.269    
            QCF_UHLEV(I,LEVEL-1)=QCF(I,LEVEL-1)-DQCFDP(I,LEVEL-1)*num1     AR_CLD2A.270    
          ENDIF                                                            AR_CLD2A.271    
        ENDDO                                                              AR_CLD2A.272    
      ENDDO                                                                AR_CLD2A.273    
!                                                                          AR_CLD2A.274    
!  If switch is activated above and below a layer, do no interpolation     AR_CLD2A.275    
!  at all. Values at upper and lower half levels equal layer mean value.   AR_CLD2A.276    
      DO LEVEL=2,(LEVELS-2)                                                AR_CLD2A.277    
        DO I=1,POINTS                                                      AR_CLD2A.278    
          IF ((DRAT(I,LEVEL).GT.DRAT_THRESH).AND.                          AR_CLD2A.279    
     &              (DRAT(I,LEVEL+1).GT.DRAT_THRESH)) THEN                 AR_CLD2A.280    
            T_LHLEV(I,LEVEL)=T(I,LEVEL)                                    AR_CLD2A.281    
            T_UHLEV(I,LEVEL)=T(I,LEVEL)                                    AR_CLD2A.282    
            QT_LHLEV(I,LEVEL)=Q(I,LEVEL)                                   AR_CLD2A.283    
            QT_UHLEV(I,LEVEL)=Q(I,LEVEL)                                   AR_CLD2A.284    
            QCF_LHLEV(I,LEVEL)=QCF(I,LEVEL)                                AR_CLD2A.285    
            QCF_UHLEV(I,LEVEL)=QCF(I,LEVEL)                                AR_CLD2A.286    
          ENDIF                                                            AR_CLD2A.287    
        ENDDO                                                              AR_CLD2A.288    
      ENDDO                                                                AR_CLD2A.289    
!                                                                          AR_CLD2A.290    
      DO LEVEL=2,(LEVELS-1)                                                AR_CLD2A.291    
        DO I=1,POINTS                                                      AR_CLD2A.292    
! Re-calculate quantities at midpoint of layer, so as to ensure            AR_CLD2A.293    
! conservation.                                                            AR_CLD2A.294    
          T_LEV=T(I,LEVEL)+T(I,LEVEL)-                                     AR_CLD2A.295    
     &        0.5*(T_LHLEV(I,LEVEL)+T_UHLEV(I,LEVEL))                      AR_CLD2A.296    
          QT_LEV=Q(I,LEVEL)+Q(I,LEVEL)-                                    AR_CLD2A.297    
     &        0.5*(QT_LHLEV(I,LEVEL)+QT_UHLEV(I,LEVEL))                    AR_CLD2A.298    
          QCF_LEV=QCF(I,LEVEL)+QCF(I,LEVEL)-                               AR_CLD2A.299    
     &        0.5*(QCF_LHLEV(I,LEVEL)+QCF_UHLEV(I,LEVEL))                  AR_CLD2A.300    
! Calculate the mean value of each quantity in the 3 sub-layers            AR_CLD2A.301    
          T_LOW(I,LEVEL)=ONETHIRD*(T_LEV-T_LHLEV(I,LEVEL))+                AR_CLD2A.302    
     &                                           T_LHLEV(I,LEVEL)          AR_CLD2A.303    
          T_UP(I,LEVEL)=0.666*(T_UHLEV(I,LEVEL)-T_LEV)+T_LEV               AR_CLD2A.304    
          T_MID(I,LEVEL)=3.*T(I,LEVEL)-T_LOW(I,LEVEL)-                     AR_CLD2A.305    
     &                                           T_UP(I,LEVEL)             AR_CLD2A.306    
          QT_LOW(I,LEVEL)=ONETHIRD*(QT_LEV-QT_LHLEV(I,LEVEL))+             AR_CLD2A.307    
     &                                           QT_LHLEV(I,LEVEL)         AR_CLD2A.308    
          QT_UP(I,LEVEL)=0.666*(QT_UHLEV(I,LEVEL)-QT_LEV)+QT_LEV           AR_CLD2A.309    
          QT_MID(I,LEVEL)=3.*Q(I,LEVEL)-QT_LOW(I,LEVEL)-                   AR_CLD2A.310    
     &                                           QT_UP(I,LEVEL)            AR_CLD2A.311    
          QCF_LOW(I,LEVEL)=ONETHIRD*(QCF_LEV-QCF_LHLEV(I,LEVEL))+          AR_CLD2A.312    
     &                                           QCF_LHLEV(I,LEVEL)        AR_CLD2A.313    
          QCF_UP(I,LEVEL)=0.666*(QCF_UHLEV(I,LEVEL)-QCF_LEV)+QCF_LEV       AR_CLD2A.314    
          QCF_MID(I,LEVEL)=3.*QCF(I,LEVEL)-QCF_LOW(I,LEVEL)-               AR_CLD2A.315    
     &                                           QCF_UP(I,LEVEL)           AR_CLD2A.316    
        ENDDO                                                              AR_CLD2A.317    
      ENDDO                                                                AR_CLD2A.318    
!                                                                          AR_CLD2A.319    
!  Check for negative values of QT and QCF: set to layer mean value if     AR_CLD2A.320    
!  negative values found.                                                  AR_CLD2A.321    
      DO LEVEL=2,(LEVELS-1)                                                AR_CLD2A.322    
        DO I=1,POINTS                                                      AR_CLD2A.323    
         IF ((QCF_MID(I,LEVEL).LT.1E-11).OR.(QCF_LOW(I,LEVEL).LT.1E-11)    AR_CLD2A.324    
     &                   .OR.(QCF_UP(I,LEVEL).LT.1E-11)) THEN              AR_CLD2A.325    
           QCF_MID(I,LEVEL)=QCF(I,LEVEL)                                   AR_CLD2A.326    
           QCF_LOW(I,LEVEL)=QCF(I,LEVEL)                                   AR_CLD2A.327    
           QCF_UP(I,LEVEL)=QCF(I,LEVEL)                                    AR_CLD2A.328    
         ENDIF                                                             AR_CLD2A.329    
         IF ((QT_MID(I,LEVEL).LT.1E-11).OR.(QT_LOW(I,LEVEL).LT.1E-11)      AR_CLD2A.330    
     &                       .OR.(QT_UP(I,LEVEL).LT.1E-11)) THEN           AR_CLD2A.331    
           QT_MID(I,LEVEL)=Q(I,LEVEL)                                      AR_CLD2A.332    
           QT_LOW(I,LEVEL)=Q(I,LEVEL)                                      AR_CLD2A.333    
           QT_UP(I,LEVEL)=Q(I,LEVEL)                                       AR_CLD2A.334    
         ENDIF                                                             AR_CLD2A.335    
        ENDDO                                                              AR_CLD2A.336    
      ENDDO                                                                AR_CLD2A.337    
!                                                                          AR_CLD2A.338    
!  Set values at top and bottom layer: note gradients are not used here,   AR_CLD2A.339    
!  they are simply set to the adjacent layer's values.                     AR_CLD2A.340    
      DO I=1,POINTS                                                        AR_CLD2A.341    
        T_MID(I,LEVELS)=T(I,LEVELS)                                        AR_CLD2A.342    
        T_UP(I,LEVELS)=T(I,LEVELS)                                         AR_CLD2A.343    
        T_LOW(I,LEVELS)=T(I,LEVELS)                                        AR_CLD2A.344    
        QT_MID(I,LEVELS)=Q(I,LEVELS)                                       AR_CLD2A.345    
        QT_UP(I,LEVELS)=Q(I,LEVELS)                                        AR_CLD2A.346    
        QT_LOW(I,LEVELS)=Q(I,LEVELS)                                       AR_CLD2A.347    
        QCF_MID(I,LEVELS)=QCF(I,LEVELS)                                    AR_CLD2A.348    
        QCF_UP(I,LEVELS)=QCF(I,LEVELS)                                     AR_CLD2A.349    
        QCF_LOW(I,LEVELS)=QCF(I,LEVELS)                                    AR_CLD2A.350    
        T_MID(I,1)=T(I,1)                                                  AR_CLD2A.351    
        T_UP(I,1)=T(I,1)                                                   AR_CLD2A.352    
        T_LOW(I,1)=T(I,1)                                                  AR_CLD2A.353    
        QT_MID(I,1)=Q(I,1)                                                 AR_CLD2A.354    
        QT_UP(I,1)=Q(I,1)                                                  AR_CLD2A.355    
        QT_LOW(I,1)=Q(I,1)                                                 AR_CLD2A.356    
        QCF_MID(I,1)=QCF(I,1)                                              AR_CLD2A.357    
        QCF_UP(I,1)=QCF(I,1)                                               AR_CLD2A.358    
        QCF_LOW(I,1)=QCF(I,1)                                              AR_CLD2A.359    
      ENDDO                                                                AR_CLD2A.360    
!                                                                          AR_CLD2A.361    
!                                                                          AR_CLD2A.362    
      CALL GLUE_CLD(AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD,         AR_CLD2A.363    
     &        T_LOW,CF_BULK,QT_LOW,QCF_LOW,QCL,CF_LIQ,CF_ICE,ERROR)        AR_CLD2A.364    
!                                                                          AR_CLD2A.365    
      CALL GLUE_CLD(AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD,         AR_CLD2A.366    
     &        T_MID,CF_TEMP,QT_MID,QCF_MID,QCL_TEMP,CF_LIQ_TEMP,           AR_CLD2A.367    
     &                                CF_ICE_TEMP,ERROR)                   AR_CLD2A.368    
!                                                                          AR_CLD2A.369    
!  The outputs of the cloud scheme combined with previous output           AR_CLD2A.370    
      DO LEVEL=1,LEVELS                                                    AR_CLD2A.371    
        DO I=1,POINTS                                                      AR_CLD2A.372    
          CF_AREA(I, LEVEL) = MAX(CF_BULK(I, LEVEL), CF_TEMP(I, LEVEL))    AR_CLD2A.373    
          CF_BULK(I, LEVEL) = CF_BULK(I, LEVEL) + CF_TEMP(I, LEVEL)        AR_CLD2A.374    
          CF_LIQ(I, LEVEL) = CF_LIQ(I, LEVEL) + CF_LIQ_TEMP(I, LEVEL)      AR_CLD2A.375    
          CF_ICE(I, LEVEL) = CF_ICE(I, LEVEL) + CF_ICE_TEMP(I, LEVEL)      AR_CLD2A.376    
          QCL(I, LEVEL) = QCL(I, LEVEL) + QCL_TEMP(I, LEVEL)               AR_CLD2A.377    
        ENDDO                                                              AR_CLD2A.378    
      ENDDO                                                                AR_CLD2A.379    
!                                                                          AR_CLD2A.380    
      CALL GLUE_CLD(AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD,         AR_CLD2A.381    
     &          T_UP,CF_TEMP,QT_UP,QCF_UP,QCL_TEMP,CF_LIQ_TEMP,            AR_CLD2A.382    
     &                                CF_ICE_TEMP,ERROR)                   AR_CLD2A.383    
!                                                                          AR_CLD2A.384    
!  The outputs of the cloud scheme combined with previous output           AR_CLD2A.385    
      DO LEVEL=1,LEVELS                                                    AR_CLD2A.386    
        DO I=1,POINTS                                                      AR_CLD2A.387    
          CF_AREA(I, LEVEL) = MAX(CF_AREA(I, LEVEL), CF_TEMP(I, LEVEL))    AR_CLD2A.388    
          CF_BULK(I, LEVEL) = ONETHIRD * (CF_BULK(I, LEVEL) +              AR_CLD2A.389    
     &                                               CF_TEMP(I, LEVEL))    AR_CLD2A.390    
          CF_LIQ(I, LEVEL) = ONETHIRD * (CF_LIQ(I, LEVEL) +                AR_CLD2A.391    
     &                                           CF_LIQ_TEMP(I, LEVEL))    AR_CLD2A.392    
          CF_ICE(I, LEVEL) = ONETHIRD * (CF_ICE(I, LEVEL) +                AR_CLD2A.393    
     &                                           CF_ICE_TEMP(I, LEVEL))    AR_CLD2A.394    
          QCL(I, LEVEL) = ONETHIRD * (QCL(I, LEVEL)+QCL_TEMP(I, LEVEL))    AR_CLD2A.395    
!                                                                          AR_CLD2A.396    
!  Grid-box mean temperature and water vapour must now be recalculated,    AR_CLD2A.397    
!  from the grid-box mean QCL calculated above.                            AR_CLD2A.398    
          Q(I, LEVEL) = Q(I, LEVEL) - QCL(I, LEVEL)                        AR_CLD2A.399    
          T(I, LEVEL) = T(I, LEVEL) + QCL(I, LEVEL) * LCRCP                AR_CLD2A.400    
        ENDDO                                                              AR_CLD2A.401    
      ENDDO                                                                AR_CLD2A.402    
!                                                                          AR_CLD2A.403    
      RETURN                                                               AR_CLD2A.404    
      END                                                                  AR_CLD2A.405    
*ENDIF                                                                     AR_CLD2A.406