*IF DEF,A09_1A,OR,DEF,A09_2A,OR,DEF,A09_2B                                 ASK1F405.395    
C ******************************COPYRIGHT******************************    GTS2F400.919    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.920    
C                                                                          GTS2F400.921    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.922    
C restrictions as set forth in the contract.                               GTS2F400.923    
C                                                                          GTS2F400.924    
C                Meteorological Office                                     GTS2F400.925    
C                London Road                                               GTS2F400.926    
C                BRACKNELL                                                 GTS2F400.927    
C                Berkshire UK                                              GTS2F400.928    
C                RG12 2SZ                                                  GTS2F400.929    
C                                                                          GTS2F400.930    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.931    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.932    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.933    
C Modelling at the above address.                                          GTS2F400.934    
C ******************************COPYRIGHT******************************    GTS2F400.935    
C                                                                          GTS2F400.936    
CLL  SUBROUTINE CLOUD_COVER_BASE -------------------------------------     CLDBAS1A.3      
CLL                                                                        CLDBAS1A.4      
CLL     PURPOSE:                                                           CLDBAS1A.5      
CLL Return an array holding the lowest cloud base height (Kft) for each    CLDBAS1A.6      
CLL cloud amount (in octas) requested, from model level cloud cover and    CLDBAS1A.7      
CLL convective cloud base level and cover. (Cloud cover is input as a      CLDBAS1A.8      
CLL fraction and cloud base is the height of the half level at the base    CLDBAS1A.9      
CLL of the layer with cloud)                                               CLDBAS1A.10     
CLL Modification: Also return fraction of air below 1000 ft asl            PC120793.23     
CLL containing cloud and height of base and top of lowest cloud            PC120793.24     
CLL layer asl. Lowest cloud layer is defined as lowest set of              PC120793.25     
CLL contiguous levels with cloud amount greater than threshold.            PC120793.26     
CLL Fraction set to zero if orography > 1000ft.                            PC120793.27     
CLL     COMMENT:                                                           CLDBAS1A.11     
CLL Since only have Q_LEVELS of CLOUD_FRACTION, do we need P_LEVELS?       CLDBAS1A.12     
CLL                                                                        CLDBAS1A.13     
CLL  Model            Modification history:                                CLDBAS1A.14     
CLL version  Date                                                          CLDBAS1A.15     
CLL  3.1  05/11/92  New deck author P.Smith                                CLDBAS1A.16     
CLL  3.1  20/01/93  New deck - used as mods at 2.7 & 2.8/3.0.              CLDBAS1A.17     
CLL                 Interfacing done by R.T.H.Barnes.                      CLDBAS1A.18     
CLL  3.2  02/07/93  Modification to add cloud fraction below 1000 ft       PC120793.28     
CLL                 and low cloud base and top.                            PC120793.29     
CLL                 Author Pete Clark.                                     PC120793.30     
CLL  3.4  24/05/94  Modification to add Wet bulb freezing level height     ASW1F304.47     
CLL                 and wet bulb temperature.                              ASW1F304.48     
CLL                 Author Steve Woltering.                                ASW1F304.49     
CLL  3.4  06/07/94  Modification to calculate model level heights (not     ASW1F304.50     
CLL                 output) and total cloud top height.                    ASW1F304.51     
CLL                 Author Steve Woltering.                                ASW1F304.52     
!LL  4.3 26/02/97  Add first & last points to arg.list. RTHBarnes.         ARB2F403.133    
CLL                                                                        CLDBAS1A.19     
CLL  Programming standard: U M Doc. Paper No. 4                            CLDBAS1A.20     
CLL                                                                        CLDBAS1A.21     
CLL  Logical components covered :                                          CLDBAS1A.22     
CLL                                                                        CLDBAS1A.23     
CLL  Project task:                                                         CLDBAS1A.24     
CLL                                                                        CLDBAS1A.25     
CLL  External documentation  UMDP                                          CLDBAS1A.26     
CLL                                                                        CLDBAS1A.27     
CLLEND-------------------------------------------------------------        CLDBAS1A.28     
C                                                                          CLDBAS1A.29     
C*L  Arguments:-------------------------------------------------------     CLDBAS1A.30     

      SUBROUTINE CLOUD_COVER_BASE                                           1,2CLDBAS1A.31     
     +        (TEMP,Q,P_STAR,P_EXNER_HALF,OROG             !INPUT          CLDBAS1A.32     
     +        ,CONV_CLD_COVER,CONV_BASE_LEV,CLOUD_COVER    !INPUT          CLDBAS1A.33     
     +        ,CONV_TOP_LEV                                !INPUT          ASW1F304.53     
     +        ,P_FIELD,P_LEVELS,Q_LEVELS                   !INPUT          CLDBAS1A.34     
     +        ,AK,BK,AKH,BKH,OCTAS,N_OCTAS                 !INPUT          ASW1F304.54     
     +        ,CLD_COVER_RQD,LOW_CLD_RQD                   !INPUT          PC120793.31     
     +        ,WBFL_RQD,WBTEMP_RQD                         !INPUT          ASW1F304.55     
     +        ,CLD_TOP_RQD                                 !INPUT          ASW1F304.56     
     +        ,CLOUD_BASE                                  !OUTPUT         PC120793.32     
     +        ,LOW_C_FRAC                                  !OUTPUT         PC120793.33     
     +        ,LOW_C_BASE                                  !OUTPUT         PC120793.34     
     +        ,LOW_C_TOP                                   !OUTPUT         ASW1F304.57     
     +        ,WBFLH                                       !OUTPUT         ASW1F304.58     
     +        ,TW                                          !OUTPUT         ASW1F304.59     
     +        ,CLOUD_TOP                                   !OUTPUT         ASW1F304.60     
     +        ,FIRST_POINT,LAST_POINT)                                     ARB2F403.134    
      IMPLICIT NONE                                                        CLDBAS1A.37     
*CALL C_G                                                                  CLDBAS1A.38     
*CALL C_0_DG_C                                                             ASW1F304.62     
*CALL C_EPSLON                                                             ASW1F304.63     
*CALL C_R_CP                                                               CLDBAS1A.39     
*CALL C_MDI                                                                CLDBAS1A.40     
*CALL C_KT_FT                                                              CLDBAS1A.41     
*CALL C_LOWCLD                                                             PC120793.36     
C*--------------------------------------------------------------------     CLDBAS1A.42     
C input variables-----------------------------------------------------     CLDBAS1A.43     
C---------------------------------------------------------------------     CLDBAS1A.44     
      INTEGER                                                              CLDBAS1A.45     
     *        P_FIELD                   ! IN NO. points in field.          CLDBAS1A.46     
     *       ,P_LEVELS                  ! IN NO. of model levels.          CLDBAS1A.47     
     *       ,Q_LEVELS                  ! IN NO. of model wet levels.      CLDBAS1A.48     
     *       ,N_OCTAS                   ! IN NO. of cloud cover limits     CLDBAS1A.49     
     *       ,CONV_BASE_LEV(P_FIELD)    ! IN level number conv base        CLDBAS1A.50     
     *       ,CONV_TOP_LEV(P_FIELD)     ! IN level number conv top         ASW1F304.64     
     *       ,FIRST_POINT,LAST_POINT    ! IN 1st & last pts for calc       ARB2F403.135    
      REAL                                                                 CLDBAS1A.51     
     *        TEMP(P_FIELD,P_LEVELS)         ! IN temp on model levels     CLDBAS1A.52     
     *       ,Q(P_FIELD,Q_LEVELS)            ! IN spec humidity array      CLDBAS1A.53     
     *       ,P_STAR(P_FIELD)                ! IN surface press. array     CLDBAS1A.54     
     *       ,P_EXNER_HALF(P_FIELD,P_LEVELS+1)! IN 1/2 lev exner press     CLDBAS1A.55     
     *       ,OROG(P_FIELD)                  ! IN model orography array    CLDBAS1A.56     
     *       ,CONV_CLD_COVER(P_FIELD)        ! IN conv cloud cover arr     CLDBAS1A.57     
     *       ,CLOUD_COVER(P_FIELD,Q_LEVELS)  ! IN cloud cover -mod levs    CLDBAS1A.58     
     *       ,AKH(P_LEVELS+1)                ! IN A 1/2 lev hybrid coord   ASW1F304.65     
     *       ,BKH(P_LEVELS+1)                ! IN B 1/2 lev hybrid coord   ASW1F304.66     
     *       ,AK(P_LEVELS)                   ! IN A lev hybrid coord       ASW1F304.67     
     *       ,BK(P_LEVELS)                   ! IN B lev hybrid coord       ASW1F304.68     
     *       ,OCTAS(N_OCTAS)                 ! IN cloud cover limits       CLDBAS1A.61     
      LOGICAL                                                              PC120793.37     
     *        CLD_COVER_RQD      ! IN TRUE if cloud cover data required    PC120793.38     
     *       ,LOW_CLD_RQD        ! IN TRUE if low cloud data required      PC120793.39     
     *       ,WBFL_RQD           ! IN TRUE if wet bulb freezing lev rqd    ASW1F304.69     
     *       ,WBTEMP_RQD         ! IN TRUE if wet bulb temp required       ASW1F304.70     
     *       ,CLD_TOP_RQD        ! IN TRUE if cloud top height required    ASW1F304.71     
C*--------------------------------------------------------------------     CLDBAS1A.62     
C Output variables----------------------------------------------------     CLDBAS1A.63     
C---------------------------------------------------------------------     CLDBAS1A.64     
      REAL                                                                 CLDBAS1A.65     
     *        CLOUD_BASE(P_FIELD,N_OCTAS) ! OUT cloud bases for amnts.     CLDBAS1A.66     
     *       ,LOW_C_FRAC(P_FIELD)         ! OUT cloud amt below 1000 ft.   PC120793.40     
     *       ,LOW_C_BASE(P_FIELD)         ! OUT base of lowest cloud.      PC120793.41     
     *       ,LOW_C_TOP(P_FIELD)          ! OUT top of lowest cloud.       PC120793.42     
     *       ,TW(P_FIELD,Q_LEVELS)        ! OUT Wet bulb temp.             ASW1F304.72     
     *       ,WBFLH(P_FIELD)              ! OUT Wet bulb freezing lev ht   ASW1F304.73     
     *       ,CLOUD_TOP(P_FIELD)          ! Cloud top height.              ASW1F304.74     
C*--------------------------------------------------------------------     CLDBAS1A.67     
C External subroutines called-----------------------------------------     CLDBAS1A.68     
C---------------------------------------------------------------------     CLDBAS1A.69     
      EXTERNAL V_INT_ZH, TWBULB                                            ASW1F304.75     
C*--------------------------------------------------------------------     CLDBAS1A.71     
C Local varables:-----------------------------------------------------     CLDBAS1A.72     
C---------------------------------------------------------------------     CLDBAS1A.73     
      INTEGER                                                              CLDBAS1A.74     
     ;       I                               ! LOOP p_fields               CLDBAS1A.75     
     ;      ,J                               ! LOOP p_levels - q_levels    CLDBAS1A.76     
     ;      ,L                               ! LOOP p_levels - q_levels    ASW1F304.76     
     ;      ,K                               ! LOOP n_octas                CLDBAS1A.77     
     ;      ,CLOUD_BASE_LEV(P_FIELD,N_OCTAS) ! level num of cloud base     CLDBAS1A.78     
     ;      ,CLOUD_TOP_LEV(P_FIELD)          ! Level of total cld top      ASW1F304.77     
      REAL                                                                 CLDBAS1A.79     
     ;       PHI_STAR(P_FIELD)               ! geopotential                CLDBAS1A.80     
     ;      ,CONV_AMNT(P_FIELD)              ! conv cloud amnt octas       CLDBAS1A.81     
     ;      ,CLOUD_AMNT(P_FIELD,Q_LEVELS)    ! cloud amnt octas            CLDBAS1A.82     
     ;      ,THETA(P_FIELD,P_LEVELS)         ! pot. temp model levels      ASW1F304.78     
     ;      ,MODEL_HALF_HT(P_FIELD,P_LEVELS+1) ! hts of model half levs    ASW1F304.79     
     ;      ,P_EXNER(P_FIELD,P_LEVELS)       ! Level exner press.          ASW1F304.80     
     ;      ,HEIGHT(P_FIELD,P_LEVELS)        ! Level heights ASL.          ASW1F304.81     
     ;      ,Z                               ! Level heights.              ASW1F304.82     
     ;      ,PU,PL                      ! Upper & lower 1/2 lev pressure   CLDBAS1A.85     
     ;      ,M_TO_KFT                        ! convert metres to kiloft    CLDBAS1A.86     
     ;      ,PT                              ! p thickness accumulator     PC120793.43     
     ;      ,FT                              ! cloud fract accumulator     PC120793.44     
     ;      ,DP                              ! Layer pressure thickness    PC120793.45     
     ;      ,H_ASL                           ! Layer base height asl       PC120793.46     
     ;      ,H_ASLN                          ! Layer top height asl        PC120793.47     
     ;      ,FR                              ! Layer fraction below ceil   PC120793.48     
     ;      ,CP_OVER_G                       ! Used in level hghts calc.   ASW1F304.83     
     ;      ,THRESH                          ! Threshold val for cld top   ASW1F304.84     
     ;      ,CLD                             ! Intermediate cloud variab   ASW1F304.85     
     ;      ,FRAC                            ! Interpolation fraction      ASW1F304.86     
     ;      ,STR_CEILM                       ! STR_CEIL in M               PC120793.49     
      PARAMETER ( CP_OVER_G = CP / G)                                      ASW1F304.87     
      PARAMETER ( THRESH = 0.0627)                                         ASW1F304.88     
*CALL P_EXNERC                                                             CLDBAS1A.87     
C----------------------------------------------------------------------C   CLDBAS1A.88     
C     Set metres to KiloFT conversion                                  C   CLDBAS1A.89     
C----------------------------------------------------------------------C   CLDBAS1A.90     
      M_TO_KFT = (1./FT2M)*0.001                                           CLDBAS1A.91     
      STR_CEILM=STR_CEIL * FT2M                                            PC120793.50     
C----------------------------------------------------------------------C   CLDBAS1A.101    
C            FIND HEIGHTS of MODEL HALF LEVELS                         C   CLDBAS1A.102    
C----------------------------------------------------------------------C   CLDBAS1A.103    
C     GEOPOTENTIAL                                                         CLDBAS1A.104    
      DO I=1,P_FIELD                                                       CLDBAS1A.105    
C       PHI_STAR(I) = OROG(I) * G ! for ht above sea level                 CLDBAS1A.106    
        PHI_STAR(I) = 0.0         ! for ht above model orography           CLDBAS1A.107    
      ENDDO                                                                CLDBAS1A.108    
C     TEMP to THETA                                                        CLDBAS1A.109    
      DO J=1,P_LEVELS                                                      ASW1F304.89     
        DO I=1,P_FIELD                                                     CLDBAS1A.111    
          PU = AKH(J+1)+BKH(J+1)*P_STAR(I)                                 CLDBAS1A.112    
          PL = AKH(J)+BKH(J)*P_STAR(I)                                     CLDBAS1A.113    
          P_EXNER(I,J) = P_EXNER_C( P_EXNER_HALF(I,J+1),                   ASW1F304.90     
     &                 P_EXNER_HALF(I,J),PU,PL,KAPPA )                     CLDBAS1A.115    
          THETA(I,J) = TEMP(I,J)/P_EXNER(I,J)                              ASW1F304.91     
        ENDDO                                                              CLDBAS1A.116    
      ENDDO                                                                CLDBAS1A.117    
      CALL V_INT_ZH(P_EXNER_HALF,THETA,Q,PHI_STAR,MODEL_HALF_HT,           CLDBAS1A.118    
     *  P_FIELD,P_LEVELS,Q_LEVELS)                                         ASW1F304.92     
C----------------------------------------------------------------------C   ASW1F304.93     
C            FIND HEIGHTS OF MODEL LEVELS                              C   ASW1F304.94     
C----------------------------------------------------------------------C   ASW1F304.95     
      IF (WBFL_RQD .OR. CLD_TOP_RQD) THEN                                  ASW1F304.96     
        DO J=1,Q_LEVELS                                                    ASW1F304.97     
          DO I=1,P_FIELD                                                   ASW1F304.98     
            Z = MODEL_HALF_HT(I,J) + CP_OVER_G*                            ASW1F304.99     
     &     (1.0+C_VIRTUAL*Q(I,J))*THETA(I,J)                               ASW1F304.100    
     &    *(P_EXNER_HALF(I,J) - P_EXNER(I,J))                              ASW1F304.101    
            HEIGHT(I,J) = Z + OROG(I)                                      ASW1F304.102    
          ENDDO                                                            ASW1F304.103    
        ENDDO                                                              ASW1F304.104    
        IF(P_LEVELS .GT. Q_LEVELS) THEN                                    ASW1F304.105    
          IF(P_LEVELS .GT. Q_LEVELS) THEN                                  ASW1F304.106    
            DO J=Q_LEVELS+1,P_LEVELS                                       ASW1F304.107    
              DO I=1,P_FIELD                                               ASW1F304.108    
                Z = MODEL_HALF_HT(I,J) + CP_OVER_G*                        ASW1F304.109    
     &            THETA(I,J)                                               ASW1F304.110    
     &         *(P_EXNER_HALF(I,J) - P_EXNER(I,J))                         ASW1F304.111    
               HEIGHT(I,J) = Z + OROG(I)                                   ASW1F304.112    
              ENDDO                                                        ASW1F304.113    
            ENDDO                                                          ASW1F304.114    
          END IF                                                           ASW1F304.115    
        ENDIF                                                              ASW1F304.116    
      ENDIF                                                                ASW1F304.117    
C----------------------------------------------------------------------C   ASW1F304.118    
C  CALCULATE THE WET BULB TEMP AND/OR WET BULB FREEZING LEVEL          C   ASW1F304.119    
C----------------------------------------------------------------------C   ASW1F304.120    
      IF (WBTEMP_RQD .OR. WBFL_RQD) THEN                                   ASW1F304.121    
        CALL TWBULB(Q,P_STAR,TEMP,AK,BK,P_FIELD,P_LEVELS,Q_LEVELS,         ASW1F304.122    
     *   TW,FIRST_POINT,LAST_POINT)                                        ARB2F403.136    
        IF (WBFL_RQD) THEN                                                 ASW1F304.124    
          DO I = 1,P_FIELD                                                 ASW1F304.125    
            DO L = 1,Q_LEVELS                                              ASW1F304.126    
              IF (TW(I,L) .NE. RMDI) THEN                                  ASW1F304.127    
                IF (TW(I,L) .LE. ZERODEGC) THEN                            ASW1F304.128    
                  IF(L .EQ. 1) THEN                                        ASW1F304.129    
                    WBFLH(I) = HEIGHT(I,L)                                 ASW1F304.130    
                  ELSE                                                     ASW1F304.131    
                    FRAC = (ZERODEGC - TW(I,L-1))/(TW(I,L) - TW(I,L-1))    ASW1F304.132    
                    WBFLH(I) = HEIGHT(I,L)*FRAC + HEIGHT(I,L-1)            ASW1F304.133    
     &              *(1.0-FRAC)                                            ASW1F304.134    
                  ENDIF                                                    ASW1F304.135    
                  GOTO 100                                                 ASW1F304.136    
                ENDIF                                                      ASW1F304.137    
              ELSE                                                         ASW1F304.138    
                WBFLH(I) = RMDI                                            ASW1F304.139    
              ENDIF                                                        ASW1F304.140    
            ENDDO                                                          ASW1F304.141    
 100      CONTINUE                                                         ASW1F304.142    
          ENDDO                                                            ASW1F304.143    
        ENDIF                                                              ASW1F304.144    
      ENDIF                                                                ASW1F304.145    
      IF (CLD_TOP_RQD) THEN                                                ASW1F304.146    
C----------------------------------------------------------------------C   ASW1F304.147    
C                  INITIALISE OUTPUT ARRAYS                            C   ASW1F304.148    
C----------------------------------------------------------------------C   ASW1F304.149    
        DO I=1,P_FIELD                                                     ASW1F304.150    
          CLOUD_TOP(I)=RMDI                                                ASW1F304.151    
          CLOUD_TOP_LEV(I)=IMDI                                            ASW1F304.152    
        ENDDO                                                              ASW1F304.153    
C----------------------------------------------------------------------C   ASW1F304.154    
C    CALCULATE TOTAL CLOUD TOP LEVELS                                  C   ASW1F304.155    
C----------------------------------------------------------------------C   ASW1F304.156    
        DO I=1,P_FIELD                                                     ASW1F304.157    
          DO J=Q_LEVELS,1,-1                                               ASW1F304.158    
            IF (J .GT. CONV_TOP_LEV(I) .OR. J .LT. CONV_BASE_LEV(I))       ASW1F304.159    
     *      THEN                                                           ASW1F304.160    
              IF (CLOUD_COVER(I,J) .GE. THRESH) THEN                       ASW1F304.161    
                CLOUD_TOP_LEV(I) = J                                       ASW1F304.162    
              ENDIF                                                        ASW1F304.163    
            ELSE                                                           ASW1F304.164    
              CLD = CONV_CLD_COVER(I) +                                    ASW1F304.165    
     *        (1 - CONV_CLD_COVER(I))*CLOUD_COVER(I,J)                     ASW1F304.166    
              IF (CLD .GE. THRESH) THEN                                    ASW1F304.167    
                CLOUD_TOP_LEV(I) = J                                       ASW1F304.168    
              ENDIF                                                        ASW1F304.169    
            ENDIF                                                          ASW1F304.170    
            IF (CLOUD_TOP_LEV(I) .GT. 0) GOTO 1000                         ASW1F304.171    
          ENDDO                                                            ASW1F304.172    
 1000     CONTINUE                                                         ASW1F304.173    
        ENDDO                                                              ASW1F304.174    
C----------------------------------------------------------------------C   ASW1F304.175    
C    CALCULATE TOTAL CLOUD TOP HEIGHTS                                 C   ASW1F304.176    
C----------------------------------------------------------------------C   ASW1F304.177    
        DO I=1,P_FIELD                                                     ASW1F304.178    
          IF (CLOUD_TOP_LEV(I) .GT. 0) THEN                                ASW1F304.179    
            CLOUD_TOP(I) = HEIGHT(I,CLOUD_TOP_LEV(I)) * M_TO_KFT           ASW1F304.180    
          ENDIF                                                            ASW1F304.181    
        ENDDO                                                              ASW1F304.182    
      ENDIF                                                                ASW1F304.183    
      IF(CLD_COVER_RQD) THEN                                               PC120793.51     
C----------------------------------------------------------------------C   CLDBAS1A.120    
C            INITIALISE OUTPUT ARRAY                                   C   PC120793.52     
C----------------------------------------------------------------------C   PC120793.53     
      DO J=1,N_OCTAS                                                       PC120793.54     
        DO I=1,P_FIELD                                                     PC120793.55     
          CLOUD_BASE(I,J) = RMDI                                           PC120793.56     
          CLOUD_BASE_LEV(I,J) = IMDI                                       PC120793.57     
        ENDDO                                                              PC120793.58     
      ENDDO                                                                PC120793.59     
C----------------------------------------------------------------------C   PC120793.60     
C            CONVERT CONV.CLOUD COVER TO OKTAS                         C   CLDBAS1A.121    
C----------------------------------------------------------------------C   CLDBAS1A.122    
      DO I=1,P_FIELD                                                       CLDBAS1A.123    
        CONV_AMNT(I) = CONV_CLD_COVER(I) * 8.0                             CLDBAS1A.124    
      ENDDO                                                                CLDBAS1A.125    
C----------------------------------------------------------------------C   CLDBAS1A.126    
C            CONVERT CLOUD COVER TO OKTAS                              C   CLDBAS1A.127    
C----------------------------------------------------------------------C   CLDBAS1A.128    
      DO J=1,Q_LEVELS                                                      CLDBAS1A.129    
        DO I=1,P_FIELD                                                     CLDBAS1A.130    
          CLOUD_AMNT(I,J) = CLOUD_COVER(I,J) * 8.0                         CLDBAS1A.131    
        ENDDO                                                              CLDBAS1A.132    
      ENDDO                                                                CLDBAS1A.133    
C----------------------------------------------------------------------C   CLDBAS1A.134    
C            SET CLOUD BASE TO MODEL LEVELS FOR CLOUD BANDS            C   CLDBAS1A.135    
C----------------------------------------------------------------------C   CLDBAS1A.136    
      DO K=1,N_OCTAS                                                       CLDBAS1A.137    
        DO J=1,Q_LEVELS                                                    CLDBAS1A.138    
          DO I=1,P_FIELD                                                   CLDBAS1A.139    
            IF(CLOUD_AMNT(I,J).GT.OCTAS(K)) THEN                           CLDBAS1A.140    
              IF(CLOUD_BASE_LEV(I,K).LT.0) THEN                            CLDBAS1A.141    
                CLOUD_BASE_LEV(I,K) = J                                    CLDBAS1A.142    
              ENDIF                                                        CLDBAS1A.143    
            ENDIF                                                          CLDBAS1A.144    
          ENDDO                                                            CLDBAS1A.145    
        ENDDO                                                              CLDBAS1A.146    
      ENDDO                                                                CLDBAS1A.147    
C----------------------------------------------------------------------C   CLDBAS1A.148    
C            COMPARE WITH CONVECTIVE CLOUD AND MODIFY IF NEEDED        C   CLDBAS1A.149    
C----------------------------------------------------------------------C   CLDBAS1A.150    
      DO K=1,N_OCTAS                                                       CLDBAS1A.151    
        DO I=1,P_FIELD                                                     CLDBAS1A.152    
          IF(CONV_AMNT(I).GT.OCTAS(K)) THEN                                CLDBAS1A.153    
            IF(CLOUD_BASE_LEV(I,K).LT.0 .OR.                               CLDBAS1A.154    
     *         CLOUD_BASE_LEV(I,K).GT.CONV_BASE_LEV(I)) THEN               CLDBAS1A.155    
              CLOUD_BASE_LEV(I,K) = CONV_BASE_LEV(I)                       CLDBAS1A.156    
            ENDIF                                                          CLDBAS1A.157    
          ENDIF                                                            CLDBAS1A.158    
        ENDDO                                                              CLDBAS1A.159    
      ENDDO                                                                CLDBAS1A.160    
C----------------------------------------------------------------------C   CLDBAS1A.161    
C            CONVERT LEVEL NUMBERS TO HEIGHTS (M converted to Kft)     C   CLDBAS1A.162    
C----------------------------------------------------------------------C   CLDBAS1A.163    
      DO K=1,N_OCTAS                                                       CLDBAS1A.164    
        DO I=1,P_FIELD                                                     CLDBAS1A.165    
          IF(CLOUD_BASE_LEV(I,K).GT.0) THEN                                CLDBAS1A.166    
            CLOUD_BASE(I,K) = MODEL_HALF_HT(I,CLOUD_BASE_LEV(I,K))         CLDBAS1A.167    
            CLOUD_BASE(I,K) = CLOUD_BASE(I,K) * M_TO_KFT                   CLDBAS1A.168    
          ENDIF                                                            CLDBAS1A.169    
        ENDDO                                                              CLDBAS1A.170    
      ENDDO                                                                CLDBAS1A.171    
      ENDIF                                                                PC120793.61     
      IF(LOW_CLD_RQD) THEN                                                 PC120793.62     
C----------------------------------------------------------------------C   PC120793.63     
C            FIND CLOUD FRACTION IN AIR < STR_CEIL, LOW_C_BASE         C   PC120793.64     
C            AND LOW_C_TOP                                             C   PC120793.65     
C----------------------------------------------------------------------C   PC120793.66     
        DO I=1,P_FIELD                                                     PC120793.67     
          PT=0.0                                                           PC120793.68     
          FT=0.0                                                           PC120793.69     
          LOW_C_BASE(I)=RMDI ! Initialise output variables                 PC120793.70     
          LOW_C_TOP(I)=RMDI                                                PC120793.71     
          LOW_C_FRAC(I)=RMDI                                               PC120793.72     
          H_ASLN=OROG(I)                                                   PC120793.73     
          DO J=1,Q_LEVELS                                                  PC120793.74     
            H_ASL=H_ASLN                                                   PC120793.75     
            H_ASLN=MODEL_HALF_HT(I,J+1)+OROG(I)                            PC120793.76     
C                                                                          PC120793.77     
C     Check if have not already found low cloud base.                      PC120793.78     
            IF(LOW_C_BASE(I).EQ.RMDI) THEN                                 PC120793.79     
C     If not, and cloud cover in this layer > threshold                    PC120793.80     
              IF(CLOUD_COVER(I,J).GE.CLOUD_THRESHOLD) THEN                 PC120793.81     
C     Then call the bottom of this layer the base of low cloud.            PC120793.82     
                LOW_C_BASE(I) = H_ASL / FT2M                               PC120793.83     
              ENDIF                                                        PC120793.84     
            ENDIF                                                          PC120793.85     
C                                                                          PC120793.86     
C     Check if already found low cloud base but not top.                   PC120793.87     
            IF(LOW_C_BASE(I).NE.RMDI.AND.LOW_C_TOP(I).EQ.RMDI)             PC120793.88     
     +      THEN                                                           PC120793.89     
C     If not, and cloud cover in this layer < threshold                    PC120793.90     
              IF(CLOUD_COVER(I,J).LT.CLOUD_THRESHOLD) THEN                 PC120793.91     
C     Then call the bottom of this layer the top of low cloud.             PC120793.92     
                LOW_C_TOP(I) = H_ASL / FT2M                                PC120793.93     
              ENDIF                                                        PC120793.94     
            ENDIF                                                          PC120793.95     
C                                                                          PC120793.96     
C     If bottom of layer is below low cloud ceiling (1000ft)               PC120793.97     
            IF(H_ASL.LT.STR_CEILM) THEN                                    PC120793.98     
C     Calculate top and bottom layer pressures                             PC120793.99     
              PU = AKH(J+1)+BKH(J+1)*P_STAR(I)                             PC120793.100    
              PL = AKH(J)+BKH(J)*P_STAR(I)                                 PC120793.101    
C     And accumulate pressure thickness and pressure weighted cloud amt    PC120793.102    
              DP = PU - PL                                                 PC120793.103    
C     If whole layer below ceiling, simply accumulate whole layer.         PC120793.104    
              IF(H_ASLN.LT.STR_CEILM) THEN                                 PC120793.105    
                PT = PT + DP                                               PC120793.106    
                FT = FT + DP * CLOUD_COVER(I,J)                            PC120793.107    
              ELSE                                                         PC120793.108    
C     Otherwise height interpolate.                                        PC120793.109    
                FR = (STR_CEILM - H_ASL) / (H_ASLN - H_ASL)                PC120793.110    
                PT = PT + DP * FR                                          PC120793.111    
                FT = FT + DP * CLOUD_COVER(I,J) * FR                       PC120793.112    
C     And set result                                                       PC120793.113    
                LOW_C_FRAC(I) = FT / PT                                    PC120793.114    
              ENDIF                                                        PC120793.115    
            ENDIF                                                          PC120793.116    
          ENDDO ! J over Q_LEVELS                                          PC120793.117    
        ENDDO ! I over P_FIELD                                             PC120793.118    
      ENDIF                                                                PC120793.119    
C----------------------------------------------------------------------C   CLDBAS1A.172    
C                                                                      C   CLDBAS1A.173    
C----------------------------------------------------------------------C   CLDBAS1A.174    
      RETURN                                                               CLDBAS1A.175    
      END                                                                  CLDBAS1A.176    
*ENDIF                                                                     CLDBAS1A.177