*IF DEF,A03_6A                                                             BOUYTQ6A.2      
C *****************************COPYRIGHT******************************     BOUYTQ6A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    BOUYTQ6A.4      
C                                                                          BOUYTQ6A.5      
C Use, duplication or disclosure of this code is subject to the            BOUYTQ6A.6      
C restrictions as set forth in the contract.                               BOUYTQ6A.7      
C                                                                          BOUYTQ6A.8      
C                Meteorological Office                                     BOUYTQ6A.9      
C                London Road                                               BOUYTQ6A.10     
C                BRACKNELL                                                 BOUYTQ6A.11     
C                Berkshire UK                                              BOUYTQ6A.12     
C                RG12 2SZ                                                  BOUYTQ6A.13     
C                                                                          BOUYTQ6A.14     
C If no contract has been raised with this copy of the code, the use,      BOUYTQ6A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      BOUYTQ6A.16     
C to do so must first be obtained in writing from the Head of Numerical    BOUYTQ6A.17     
C Modelling at the above address.                                          BOUYTQ6A.18     
C ******************************COPYRIGHT******************************    BOUYTQ6A.19     
!                                                                          BOUYTQ6A.20     
! SUBROUTINE BOUY_TQ                                                       BOUYTQ6A.21     
                                                                           BOUYTQ6A.22     
! PURPOSE: To calculate buoyancy parameters on p,T,q-levels                BOUYTQ6A.23     
!                                                                          BOUYTQ6A.24     
! METHOD:                                                                  BOUYTQ6A.25     
!                                                                          BOUYTQ6A.26     
! ORIGINAL PROGRAMMER: J. James                                            BOUYTQ6A.27     
! CURRENT CODE OWNER: R.N.B. Smith                                         BOUYTQ6A.28     
!                                                                          BOUYTQ6A.29     
! HISTORY:                                                                 BOUYTQ6A.30     
! DATE   VERSION   COMMENT                                                 BOUYTQ6A.31     
! ----   -------   -------                                                 BOUYTQ6A.32     
! new deck                                                                 BOUYTQ6A.33     
!!!  4.5    Jul. 98  Kill the IBM specific lines. (JCThil)                 AJC1F405.310    
!                                                                          BOUYTQ6A.34     
! CODE DESCRIPTION:                                                        BOUYTQ6A.35     
!   LANGUAGE: FORTRAN 77 + CRAY EXTENSIONS                                 BOUYTQ6A.36     
!   THIS CODE IS WRITTEN TO UMDP3 PROGRAMMING STANDARDS.                   BOUYTQ6A.37     
!                                                                          BOUYTQ6A.38     
                                                                           BOUYTQ6A.39     
                                                                           BOUYTQ6A.40     
                                                                           BOUYTQ6A.41     

      SUBROUTINE BOUY_TQ (                                                  2,7BOUYTQ6A.42     
     & P_FIELD,P1,P_POINTS,BL_LEVELS                                       BOUYTQ6A.43     
     &,P,T,Q,QCF,QCL                                                       BOUYTQ6A.44     
     &,BT,BQ,BT_CLD,BQ_CLD,A_QS,A_DQSDT,DQSDT                              BOUYTQ6A.45     
     &,LTIMER                                                              BOUYTQ6A.46     
     & )                                                                   BOUYTQ6A.47     
                                                                           BOUYTQ6A.48     
      IMPLICIT NONE                                                        BOUYTQ6A.49     
                                                                           BOUYTQ6A.50     
! ARGUMENTS WITH INTENT IN. IE: INPUT VARIABLES.                           BOUYTQ6A.51     
                                                                           BOUYTQ6A.52     
      LOGICAL LTIMER          ! IN Flag for TIMER diagnostics              BOUYTQ6A.53     
                                                                           BOUYTQ6A.54     
      INTEGER                                                              BOUYTQ6A.55     
     & P_FIELD                ! IN No. of P-grid points in whole field.    BOUYTQ6A.56     
     &,P1                     ! IN First P-grid point to be processed.     BOUYTQ6A.57     
     &,P_POINTS               ! IN No. of P-grid points to be processed.   BOUYTQ6A.61     
     &,BL_LEVELS              ! IN No. of atmospheric levels for which     BOUYTQ6A.65     
!                                boundary layer fluxes are calculated.     BOUYTQ6A.66     
!                                Assumed  <=30 for dimensioning GAMMA()    BOUYTQ6A.67     
!                                in common deck C_GAMMA                    BOUYTQ6A.68     
                                                                           BOUYTQ6A.69     
      REAL                                                                 BOUYTQ6A.70     
     & P(P_FIELD,BL_LEVELS)   ! IN Pressure at pressure points.            BOUYTQ6A.71     
     &,T(P_FIELD,BL_LEVELS)   ! IN Temperature (K). At P points            BOUYTQ6A.72     
     &,Q(P_FIELD,BL_LEVELS)   ! IN Sp humidity (kg water per kg air).      BOUYTQ6A.73     
     &,QCL(P_FIELD,BL_LEVELS) ! IN Cloud liq water (kg per kg air).        BOUYTQ6A.74     
     &,QCF(P_FIELD,BL_LEVELS) ! IN Cloud liq water (kg per kg air).        BOUYTQ6A.75     
                                                                           BOUYTQ6A.76     
                                                                           BOUYTQ6A.77     
! ARGUMENTS WITH INTENT OUT. IE: OUTPUT VARIABLES.                         BOUYTQ6A.78     
                                                                           BOUYTQ6A.79     
      REAL                                                                 BOUYTQ6A.80     
     & BQ(P_FIELD,BL_LEVELS)  ! OUT A buoyancy parameter for clear air     BOUYTQ6A.81     
     &,BT(P_FIELD,BL_LEVELS)  ! OUT A buoyancy parameter for clear air     BOUYTQ6A.82     
     &,BQ_CLD(P_FIELD,BL_LEVELS)                                           BOUYTQ6A.83     
!                             ! OUT A buoyancy parameter for cloudy air    BOUYTQ6A.84     
     &,BT_CLD(P_FIELD,BL_LEVELS)                                           BOUYTQ6A.85     
!                             ! OUT A buoyancy parameter for cloudy air    BOUYTQ6A.86     
     &,A_QS(P_FIELD,BL_LEVELS)                                             BOUYTQ6A.87     
!                             ! OUT Saturated lapse rate factor            BOUYTQ6A.88     
     &,A_DQSDT(P_FIELD,BL_LEVELS)                                          BOUYTQ6A.89     
!                             ! OUT Saturated lapse rate factor            BOUYTQ6A.90     
     &,DQSDT(P_FIELD,BL_LEVELS)                                            BOUYTQ6A.91     
!                             ! OUT Derivative of q_SAT w.r.t. T           BOUYTQ6A.92     
                                                                           BOUYTQ6A.93     
! LOCAL VARIABLES.                                                         BOUYTQ6A.94     
                                                                           BOUYTQ6A.95     
      REAL                                                                 BOUYTQ6A.96     
     & QS(P_FIELD)            ! WORK Saturated mixing ratio.               BOUYTQ6A.97     
                                                                           BOUYTQ6A.98     
      INTEGER                                                              BOUYTQ6A.99     
     &  I                                                                  BOUYTQ6A.100    
     &, K                                                                  BOUYTQ6A.101    
                                                                           BOUYTQ6A.102    
      REAL                                                                 BOUYTQ6A.103    
     &  BC                                                                 BOUYTQ6A.104    
                                                                           BOUYTQ6A.105    
      EXTERNAL                                                             BOUYTQ6A.106    
     &  QSAT,TIMER                                                         BOUYTQ6A.107    
                                                                           BOUYTQ6A.108    
*CALL C_0_DG_C                                                             BOUYTQ6A.109    
*CALL C_LHEAT                                                              BOUYTQ6A.110    
*CALL C_G                                                                  BOUYTQ6A.111    
*CALL C_R_CP                                                               BOUYTQ6A.112    
*CALL C_EPSLON                                                             BOUYTQ6A.113    
*CALL C_VKMAN                                                              BOUYTQ6A.114    
*CALL C_SOILH                                                              BOUYTQ6A.115    
*CALL C_MDI                                                                BOUYTQ6A.116    
                                                                           BOUYTQ6A.117    
                                                                           BOUYTQ6A.118    
      REAL ETAR,GRCP,LCRCP,LFRCP,LS,LSRCP                                  BOUYTQ6A.119    
      PARAMETER (                                                          BOUYTQ6A.120    
     & ETAR=1.0/(1.0-EPSILON)   ! Used in buoyancy parameter BETAC.        BOUYTQ6A.121    
     &,GRCP=G/CP                ! Used in DZTL, FTL calculations.          BOUYTQ6A.122    
     &,LCRCP=LC/CP              ! Latent heat of condensation / CP.        BOUYTQ6A.123    
     &,LFRCP=LF/CP              ! Latent heat of fusion / CP.              BOUYTQ6A.124    
     &,LS=LC+LF                 ! Latent heat of sublimation.              BOUYTQ6A.125    
     &,LSRCP=LS/CP              ! Latent heat of sublimation / CP.         BOUYTQ6A.126    
     &)                                                                    BOUYTQ6A.127    
                                                                           BOUYTQ6A.128    
      IF (LTIMER) THEN                                                     BOUYTQ6A.129    
        CALL TIMER('BOUY_TQ ',3)                                           BOUYTQ6A.130    
      ENDIF                                                                BOUYTQ6A.131    
!-----------------------------------------------------------------------   BOUYTQ6A.132    
!! 1.  Loop round levels.                                                  BOUYTQ6A.133    
!-----------------------------------------------------------------------   BOUYTQ6A.134    
      DO K=1,BL_LEVELS                                                     BOUYTQ6A.135    
!-----------------------------------------------------------------------   BOUYTQ6A.136    
!! 1.1 Calculate saturated specific humidity at pressure and               BOUYTQ6A.137    
!!     temperature of current level.                                       BOUYTQ6A.138    
!-----------------------------------------------------------------------   BOUYTQ6A.139    
        CALL QSAT(QS(P1),T(P1,K),P(P1,K),P_POINTS)                         BOUYTQ6A.140    
!                                                                          BOUYTQ6A.141    
        DO I=P1,P1+P_POINTS-1                                              BOUYTQ6A.142    
                                                                           BOUYTQ6A.143    
!-----------------------------------------------------------------------   BOUYTQ6A.144    
!! 1.2 Calculate buoyancy parameters BT and BQ, required for the           BOUYTQ6A.145    
!!     calculation of stability.                                           BOUYTQ6A.146    
!-----------------------------------------------------------------------   BOUYTQ6A.147    
                                                                           BOUYTQ6A.148    
          BT(I,K) = 1.0/T(I,K)                                             BOUYTQ6A.149    
          BQ(I,K) = C_VIRTUAL/(1.0+C_VIRTUAL*Q(I,K)-QCL(I,K)-QCF(I,K))     BOUYTQ6A.150    
!                                                                          BOUYTQ6A.151    
          IF (T(I,K) .GT. TM) THEN                                         BOUYTQ6A.152    
            DQSDT(I,K) = (EPSILON * LC * QS(I))                            BOUYTQ6A.153    
     &                   / ( R * T(I,K) * T(I,K) )                         BOUYTQ6A.154    
!                      ...  (Clausius-Clapeyron) for T above freezing      BOUYTQ6A.155    
!                                                                          BOUYTQ6A.156    
            A_QS(I,K) = 1.0 / (1.0 + LCRCP*DQSDT(I,K))                     BOUYTQ6A.157    
!                                                                          BOUYTQ6A.158    
            A_DQSDT(I,K) = A_QS(I,K) * DQSDT(I,K)                          BOUYTQ6A.159    
!                                                                          BOUYTQ6A.160    
            BC = LCRCP*BT(I,K) - ETAR*BQ(I,K)                              BOUYTQ6A.161    
!                                                                          BOUYTQ6A.162    
          ELSE                                                             BOUYTQ6A.163    
            DQSDT(I,K) = (EPSILON * LS * QS(I))                            BOUYTQ6A.164    
     &                   / ( R * T(I,K) * T(I,K) )                         BOUYTQ6A.165    
!                      ...  (Clausius-Clapeyron) for T below freezing      BOUYTQ6A.166    
!                                                                          BOUYTQ6A.167    
            A_QS(I,K) = 1.0 / (1.0 + LSRCP*DQSDT(I,K))                     BOUYTQ6A.168    
!                                                                          BOUYTQ6A.169    
            A_DQSDT(I,K) = A_QS(I,K) * DQSDT(I,K)                          BOUYTQ6A.170    
!                                                                          BOUYTQ6A.171    
            BC = LSRCP*BT(I,K) - ETAR*BQ(I,K)                              BOUYTQ6A.172    
!                                                                          BOUYTQ6A.173    
          ENDIF                                                            BOUYTQ6A.174    
!                                                                          BOUYTQ6A.175    
!-----------------------------------------------------------------------   BOUYTQ6A.176    
!! 1.3 Calculate in-cloud buoyancy parameters.                             BOUYTQ6A.177    
!-----------------------------------------------------------------------   BOUYTQ6A.178    
!                                                                          BOUYTQ6A.179    
          BT_CLD(I,K) = BT(I,K) - A_DQSDT(I,K) * BC                        BOUYTQ6A.180    
          BQ_CLD(I,K) = BQ(I,K) + A_QS(I,K) * BC                           BOUYTQ6A.181    
!                                                                          BOUYTQ6A.182    
        ENDDO ! p_points                                                   BOUYTQ6A.183    
      ENDDO ! bl_levels                                                    BOUYTQ6A.184    
                                                                           BOUYTQ6A.185    
      IF (LTIMER) THEN                                                     BOUYTQ6A.186    
        CALL TIMER('BOUY_TQ ',4)                                           BOUYTQ6A.187    
      ENDIF                                                                BOUYTQ6A.188    
      RETURN                                                               BOUYTQ6A.189    
      END                                                                  BOUYTQ6A.190    
*ENDIF                                                                     BOUYTQ6A.191