*IF DEF,A05_3B,OR,DEF,A05_3C,OR,DEF,RECON                                  AJX1F405.161    
C *****************************COPYRIGHT******************************     CAL3DCCA.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    CAL3DCCA.4      
C                                                                          CAL3DCCA.5      
C Use, duplication or disclosure of this code is subject to the            CAL3DCCA.6      
C restrictions as set forth in the contract.                               CAL3DCCA.7      
C                                                                          CAL3DCCA.8      
C                Meteorological Office                                     CAL3DCCA.9      
C                London Road                                               CAL3DCCA.10     
C                BRACKNELL                                                 CAL3DCCA.11     
C                Berkshire UK                                              CAL3DCCA.12     
C                RG12 2SZ                                                  CAL3DCCA.13     
C                                                                          CAL3DCCA.14     
C If no contract has been raised with this copy of the code, the use,      CAL3DCCA.15     
C duplication or disclosure of it is strictly prohibited.  Permission      CAL3DCCA.16     
C to do so must first be obtained in writing from the Head of Numerical    CAL3DCCA.17     
C Modelling at the above address.                                          CAL3DCCA.18     
C ******************************COPYRIGHT******************************    CAL3DCCA.19     
!  Subroutine CALC_3D_CCA: Calculates a conv. cld amt on model levels.     CAL3DCCA.20     
!                                                                          CAL3DCCA.21     
!  Subroutine Interface:                                                   CAL3DCCA.22     

      SUBROUTINE CALC_3D_CCA(NP_FIELD,NPNTS,NLEV,NBL                        3CAL3DCCA.23     
     &                      ,ANVIL_FACTOR,TOWER_FACTOR                     CAL3DCCA.24     
     &                      ,AKM12,BKM12,CLOUD_BASE,CLOUD_TOP              CAL3DCCA.25     
     &                     ,FREEZE_LEV,PSTAR,CCA_2D,CCA_3D,L_CLOUD_DEEP)   AJX3F405.153    
!                                                                          CAL3DCCA.27     
      IMPLICIT NONE                                                        CAL3DCCA.28     
!                                                                          CAL3DCCA.29     
! Description: Calculates a 3D convective cloud amount (i.e. on model      CAL3DCCA.30     
!             levels) from the 2D convective cloud amount array            CAL3DCCA.31     
!             according to parameters specified in the umui and the        CAL3DCCA.32     
!             position of cloud base, cloud top and freezing level.        CAL3DCCA.33     
!                                                                          CAL3DCCA.34     
! Method: The 2D convective cloud amount is expanded into the vertical     CAL3DCCA.35     
!         by applying it between the cloud base and top with the           CAL3DCCA.36     
!         additional constraints that                                      CAL3DCCA.37     
!         (i)   If the cloud base is in the boundary layer,                CAL3DCCA.38     
!         (ii)  cloud top is above the freezing level and                  CAL3DCCA.39     
!         (iii) the cloud is more than 500mb deep                          CAL3DCCA.40     
!         then the cloud below the freezing level will be multiplied       CAL3DCCA.41     
!         by TOWER_FACTOR, and the cloud above the freezing level          CAL3DCCA.42     
!         will be linearly (with model level) increased to cloud top       CAL3DCCA.43     
!         where it will be equal to the 2D fraction * ANVIL_FACTOR.        CAL3DCCA.44     
!                                                                          CAL3DCCA.45     
! Current Code Owner: Julie M. Gregory                                     CAL3DCCA.46     
!                                                                          CAL3DCCA.47     
! History:                                                                 CAL3DCCA.48     
! Version   Date     Comment                                               CAL3DCCA.49     
! -------   ----     -------                                               CAL3DCCA.50     
!  4.4     18/9/97   Original code. J.Gregory.                             CAL3DCCA.51     
!                                                                          CAL3DCCA.52     
! Code Description:                                                        CAL3DCCA.53     
!   Language: FORTRAN 77 + common extensions.                              CAL3DCCA.54     
!   This code is written to UMDP3 v6 programming standards.                CAL3DCCA.55     
!                                                                          CAL3DCCA.56     
! System component covered: <appropriate code>                             CAL3DCCA.57     
! System Task:              <appropriate code>                             CAL3DCCA.58     
!                                                                          CAL3DCCA.59     
! Global variables (*CALLed COMDECKs etc...):                              CAL3DCCA.60     
!------------------------------------------------------------------        CAL3DCCA.61     
!   Scalar arguments with intent(in):                                      CAL3DCCA.62     
!------------------------------------------------------------------        CAL3DCCA.63     
      INTEGER NPNTS               ! IN Number of points                    CAL3DCCA.64     
     &       ,NP_FIELD            ! IN Full size of data                   CAL3DCCA.65     
     &       ,NLEV                ! IN Number of levels                    CAL3DCCA.66     
     &       ,NBL                 ! IN Number of Boundary layer levels     CAL3DCCA.67     
      REAL ANVIL_FACTOR           ! IN Needed in calculation of vertical   CAL3DCCA.68     
     &    ,TOWER_FACTOR           ! IN cloud amount distribution           CAL3DCCA.69     
      LOGICAL L_CLOUD_DEEP        ! IN Apply depth criterion if true       AJX3F405.154    
!------------------------------------------------------------------        CAL3DCCA.70     
!   Array  arguments with intent(in):                                      CAL3DCCA.71     
!------------------------------------------------------------------        CAL3DCCA.72     
      INTEGER CLOUD_TOP(NP_FIELD) ! IN Convective cloud top level          CAL3DCCA.73     
     &       ,CLOUD_BASE(NP_FIELD)! IN Convective cloud base level         CAL3DCCA.74     
     &       ,FREEZE_LEV(NPNTS)   ! IN Freezing level                      CAL3DCCA.75     
!                                                                          CAL3DCCA.76     
      REAL PSTAR(NP_FIELD)        ! IN Surface pressure                    CAL3DCCA.77     
     &    ,AKM12(NLEV+1)          ! IN Hybrid co-ord coeffs to define      CAL3DCCA.78     
     &    ,BKM12(NLEV+1)          !    pressure at level k-1/2             CAL3DCCA.79     
     &    ,CCA_2D(NPNTS)          ! IN 2D convective cloud amount          CAL3DCCA.80     
!------------------------------------------------------------------        CAL3DCCA.81     
!   Array  arguments with intent(out):                                     CAL3DCCA.82     
!------------------------------------------------------------------        CAL3DCCA.83     
      REAL CCA_3D(NP_FIELD,NLEV)  ! OUT Convective cloud amount on         CAL3DCCA.84     
!                                 !     model levels                       CAL3DCCA.85     
!------------------------------------------------------------------        CAL3DCCA.86     
! Local parameters:                                                        CAL3DCCA.87     
!------------------------------------------------------------------        CAL3DCCA.88     
      REAL DEEP_DP                ! Depth cloud must reach to be 'deep'    CAL3DCCA.89     
!                                                                          CAL3DCCA.90     
      PARAMETER (DEEP_DP = 50000) ! Critical depth of clouds = 500hPa      CAL3DCCA.91     
!------------------------------------------------------------------        CAL3DCCA.92     
! Local scalars:                                                           CAL3DCCA.93     
!------------------------------------------------------------------        CAL3DCCA.94     
      INTEGER ANVIL_LEV           ! Base level of 'anvil' if it is to      CAL3DCCA.95     
!                                 ! be applied.                            CAL3DCCA.96     
      INTEGER I,K                 ! Loop counters                          CAL3DCCA.97     
!                                                                          CAL3DCCA.98     
      REAL ANVIL_DEPTH                                                     CAL3DCCA.99     
     &    ,P_CLOUD_BASE                                                    CAL3DCCA.100    
     &    ,P_CLOUD_TOP                                                     CAL3DCCA.101    
!                                                                          CAL3DCCA.102    
      LOGICAL DEEP                                                         CAL3DCCA.103    
!                                                                          CAL3DCCA.104    
!======================================================================    CAL3DCCA.105    
!  ANVIL CLOUD CALCULATION:                                                CAL3DCCA.106    
!  If cloud base is in the PBL, and cloud top is above (or at)             CAL3DCCA.107    
!  the freezing level, then add an anvil cloud by increasing the           CAL3DCCA.108    
!  cloud fraction linearly from freezing lev to cloud top. Also            CAL3DCCA.109    
!  decrease the cloud fraction below this level to represent the           CAL3DCCA.110    
!  'tower'.                                                                CAL3DCCA.111    
!======================================================================    CAL3DCCA.112    
!                                                                          CAL3DCCA.113    
      IF (L_CLOUD_DEEP) THEN                                               AJX3F405.155    
      DO I = 1,NPNTS                                                       CAL3DCCA.114    
        ANVIL_DEPTH = 0                                                    CAL3DCCA.115    
        ANVIL_LEV = 0                                                      CAL3DCCA.116    
        DEEP = .FALSE.                                                     CAL3DCCA.117    
C----------------------------------------------------------------------    CAL3DCCA.118    
C Calculate cloud depth:                                                   CAL3DCCA.119    
C----------------------------------------------------------------------    CAL3DCCA.120    
        IF (CCA_2D(I).GT.0.0) THEN                                         CAL3DCCA.121    
          P_CLOUD_BASE = AKM12(CLOUD_BASE(I)) +                            CAL3DCCA.122    
     &                   BKM12(CLOUD_BASE(I))*PSTAR(I)                     CAL3DCCA.123    
          P_CLOUD_TOP  = AKM12(CLOUD_TOP(I)+1) +                           CAL3DCCA.124    
     &                   BKM12(CLOUD_TOP(I)+1)*PSTAR(I)                    CAL3DCCA.125    
          DEEP   = (P_CLOUD_BASE - P_CLOUD_TOP) .GE. DEEP_DP               CAL3DCCA.126    
C----------------------------------------------------------------------    CAL3DCCA.127    
C Check to see if cloud is deep and above freezing level:                  CAL3DCCA.128    
C----------------------------------------------------------------------    CAL3DCCA.129    
          IF ( ( CLOUD_BASE(I) .LT. NBL )  .AND.                           CAL3DCCA.130    
     &         ( CLOUD_TOP(I) .GT. FREEZE_LEV(I) ) .AND.                   CAL3DCCA.131    
     &         ( DEEP ) ) THEN                                             CAL3DCCA.132    
C----------------------------------------------------------------------    CAL3DCCA.133    
C Define anvil base level as freezing level or cloud base if above FL:     CAL3DCCA.134    
C----------------------------------------------------------------------    CAL3DCCA.135    
            ANVIL_DEPTH = ( CLOUD_TOP(I) - FREEZE_LEV(I) )                 CAL3DCCA.136    
            ANVIL_LEV   = FREEZE_LEV(I)                                    CAL3DCCA.137    
            IF ( ANVIL_DEPTH .GT. (CLOUD_TOP(I)-CLOUD_BASE(I)) ) THEN      CAL3DCCA.138    
              ANVIL_DEPTH = CLOUD_TOP(I)-CLOUD_BASE(I)                     CAL3DCCA.139    
              ANVIL_LEV   = CLOUD_BASE(I)                                  CAL3DCCA.140    
            ENDIF                                                          CAL3DCCA.141    
C----------------------------------------------------------------------    CAL3DCCA.142    
C Apply wedge-shaped anvil from anvil base to cloud top:                   CAL3DCCA.143    
C----------------------------------------------------------------------    CAL3DCCA.144    
            DO K = ANVIL_LEV,(CLOUD_TOP(I) - 1)                            CAL3DCCA.145    
              CCA_3D(I,K) = (ANVIL_FACTOR - TOWER_FACTOR)                  CAL3DCCA.146    
     &                    * CCA_2D(I)                                      CAL3DCCA.147    
     &                    * (K - ANVIL_LEV + 1)/ANVIL_DEPTH                CAL3DCCA.148    
     &                    + (CCA_2D(I) * TOWER_FACTOR)                     CAL3DCCA.149    
              IF (CCA_3D(I,K) .GE. 1.0) THEN                               CAL3DCCA.150    
                CCA_3D(I,K) = 0.99                                         CAL3DCCA.151    
              ENDIF                                                        CAL3DCCA.152    
            ENDDO                                                          CAL3DCCA.153    
C----------------------------------------------------------------------    CAL3DCCA.154    
C ...and tower below (i.e. from cloud base to anvil base):                 CAL3DCCA.155    
C----------------------------------------------------------------------    CAL3DCCA.156    
            DO K = CLOUD_BASE(I),ANVIL_LEV-1                               CAL3DCCA.157    
              CCA_3D(I,K) = TOWER_FACTOR * CCA_2D(I)                       CAL3DCCA.158    
            ENDDO                                                          CAL3DCCA.159    
          ELSE                                                             CAL3DCCA.160    
C----------------------------------------------------------------------    CAL3DCCA.161    
C If cloud is not 'deep' keep old fraction, but put on model levels:       CAL3DCCA.162    
C----------------------------------------------------------------------    CAL3DCCA.163    
            DO K = CLOUD_BASE(I),(CLOUD_TOP(I) - 1)                        CAL3DCCA.164    
              CCA_3D(I,K) = CCA_2D(I)                                      CAL3DCCA.165    
            ENDDO                                                          CAL3DCCA.166    
          ENDIF                                                            CAL3DCCA.167    
C----------------------------------------------------------------------    CAL3DCCA.168    
C Finally check there is no cloud below cloud base or above cloud top!     CAL3DCCA.169    
C----------------------------------------------------------------------    CAL3DCCA.170    
          DO K = 1,(CLOUD_BASE(I)-1)                                       CAL3DCCA.171    
            CCA_3D(I,K) = 0.0                                              CAL3DCCA.172    
          END DO                                                           CAL3DCCA.173    
          DO K = CLOUD_TOP(I),NLEV                                         CAL3DCCA.174    
            CCA_3D(I,K) = 0.0                                              CAL3DCCA.175    
          END DO                                                           CAL3DCCA.176    
        ENDIF                                                              CAL3DCCA.177    
      ENDDO                                                                CAL3DCCA.178    
      ELSE                                                                 AJX3F405.156    
        DO I = 1,NPNTS                                                     AJX3F405.157    
          ANVIL_DEPTH = 0                                                  AJX3F405.158    
          ANVIL_LEV = 0                                                    AJX3F405.159    
!----------------------------------------------------------------------    AJX3F405.160    
! Calculate cloud depth:                                                   AJX3F405.161    
!----------------------------------------------------------------------    AJX3F405.162    
          IF (CCA_2D(I).GT.0.0) THEN                                       AJX3F405.163    
!----------------------------------------------------------------------    AJX3F405.164    
! Check to see if cloud is deep and above freezing level:                  AJX3F405.165    
!----------------------------------------------------------------------    AJX3F405.166    
            IF ( ( CLOUD_BASE(I) .LT. NBL )  .AND.                         AJX3F405.167    
     &           ( CLOUD_TOP(I) .GT. FREEZE_LEV(I) ) ) THEN                AJX3F405.168    
!----------------------------------------------------------------------    AJX3F405.169    
! Define anvil base level as freezing level or cloud base if above FL:     AJX3F405.170    
!----------------------------------------------------------------------    AJX3F405.171    
              ANVIL_DEPTH = ( CLOUD_TOP(I) - FREEZE_LEV(I) )               AJX3F405.172    
              ANVIL_LEV   = FREEZE_LEV(I)                                  AJX3F405.173    
              IF ( ANVIL_DEPTH .GT. (CLOUD_TOP(I)-CLOUD_BASE(I)) ) THEN    AJX3F405.174    
                ANVIL_DEPTH = CLOUD_TOP(I)-CLOUD_BASE(I)                   AJX3F405.175    
                ANVIL_LEV   = CLOUD_BASE(I)                                AJX3F405.176    
              ENDIF                                                        AJX3F405.177    
!----------------------------------------------------------------------    AJX3F405.178    
! Apply wedge-shaped anvil from anvil base to cloud top:                   AJX3F405.179    
!----------------------------------------------------------------------    AJX3F405.180    
              DO K = ANVIL_LEV,(CLOUD_TOP(I) - 1)                          AJX3F405.181    
                CCA_3D(I,K) = (ANVIL_FACTOR - TOWER_FACTOR)                AJX3F405.182    
     &                      * CCA_2D(I)                                    AJX3F405.183    
     &                      * (K - ANVIL_LEV + 1)/ANVIL_DEPTH              AJX3F405.184    
     &                      + (CCA_2D(I) * TOWER_FACTOR)                   AJX3F405.185    
                IF (CCA_3D(I,K) .GE. 1.0) THEN                             AJX3F405.186    
                  CCA_3D(I,K) = 0.99                                       AJX3F405.187    
                ENDIF                                                      AJX3F405.188    
              ENDDO                                                        AJX3F405.189    
!----------------------------------------------------------------------    AJX3F405.190    
! ...and tower below (i.e. from cloud base to anvil base):                 AJX3F405.191    
!----------------------------------------------------------------------    AJX3F405.192    
              DO K = CLOUD_BASE(I),ANVIL_LEV-1                             AJX3F405.193    
                CCA_3D(I,K) = TOWER_FACTOR * CCA_2D(I)                     AJX3F405.194    
              ENDDO                                                        AJX3F405.195    
            ELSE                                                           AJX3F405.196    
!----------------------------------------------------------------------    AJX3F405.197    
! If cloud does not satisfy anvil criteria, keep old fraction, but put     AJX3F405.198    
! on model levels:                                                         AJX3F405.199    
!----------------------------------------------------------------------    AJX3F405.200    
              DO K = CLOUD_BASE(I),(CLOUD_TOP(I) - 1)                      AJX3F405.201    
                CCA_3D(I,K) = CCA_2D(I)                                    AJX3F405.202    
              ENDDO                                                        AJX3F405.203    
            ENDIF                                                          AJX3F405.204    
!----------------------------------------------------------------------    AJX3F405.205    
! Finally check there is no cloud below cloud base or above cloud top!     AJX3F405.206    
!----------------------------------------------------------------------    AJX3F405.207    
            DO K = 1,(CLOUD_BASE(I)-1)                                     AJX3F405.208    
              CCA_3D(I,K) = 0.0                                            AJX3F405.209    
            END DO                                                         AJX3F405.210    
            DO K = CLOUD_TOP(I),NLEV                                       AJX3F405.211    
              CCA_3D(I,K) = 0.0                                            AJX3F405.212    
            END DO                                                         AJX3F405.213    
          ENDIF                                                            AJX3F405.214    
        ENDDO                                                              AJX3F405.215    
      ENDIF                                                                AJX3F405.216    
C                                                                          CAL3DCCA.179    
C                                                                          CAL3DCCA.180    
C======================================================================    CAL3DCCA.181    
C  END OF ANVIL CALCULATION                                                CAL3DCCA.182    
C======================================================================    CAL3DCCA.183    
C                                                                          CAL3DCCA.184    
      RETURN                                                               CAL3DCCA.185    
      END                                                                  CAL3DCCA.186    
*ENDIF                                                                     CAL3DCCA.187