!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
*** S/P BAKTOTQ2
*
#include "phy_macros_f.h"

      SUBROUTINE BAKTOTQ2 (T, QV, QC, TM, S, PS, TIF, FICE, 1,2
     1                    DT, DQV, DQC,
     1                    TVE, QCBL, FNN, FN, ZN, ZE,
     1                    TAU, N, M, NK)
*
*
#include "impnone.cdk"
*
*
      INTEGER N, M, NK
      REAL TAU
      REAL T(M,NK), QV(M,NK), QC(N,NK), TM(N,NK)
      REAL S(N,NK), PS(N), TIF(N,NK), FICE(N,NK)
      REAL DT(N,NK), DQV(N,NK), DQC(N,NK)
      REAL TVE(N,NK), QCBL(N,NK)
      REAL FNN(N,NK), FN(N,NK), ZN(N,NK), ZE(N,NK)
*
*Author
*          J. Mailhot (Nov 2000)
*
*Revision
* 001      A.-M. Leduc (Oct 2001) Automatic arrays
* 002      B. Bilodeau and J. Mailhot (Dec 2001) Add a test to
*                      check the presence of advected explicit cloud water.
* 003      J. Mailhot (Nov 2000) Cleanup of routine
* 004      J. Mailhot (Feb 2003) - MOISTKE option based on implicit clouds only
* 005      A-M. Leduc (Jun 2003) - pass ps to clsgs---> clsgs2

*
*Object
*          Transform conservative variables and their tendencies
*          back to non-conservative variables and tendencies.
*          Calculate the boundary layer cloud properties (cloud fraction, cloud
*          water content, flux enhancement factor).
*
*Arguments
*
*          - Input/Output -
* T        thetal on input (temperature on output)
* QV       qw (total water content = QV + QC) on input (specific humidity on output)
*
*          - Input -
* QC       cloud water content
* TM       temperature at current time 
* S        sigma levels
* PS       surface pressure (in Pa)
* TIF      temperature to compute ice fraction
* FICE     ice fraction
*
*          - Input/Output -
* DT       thetal tendency on input (temperature tendency on output)
* DQV      qw tendency on input (specific humidity tendency on output)
*
*          - Output -
* DQC      cloud water content tendency
*
*          - Input -
* TVE      virtual temperature on 'E' levels
* QCBL     cloud water content of BL clouds (subgrid-scale)
* FNN      flux enhancement factor (fN) * cloud fraction (N)
*
*          - Input/Output -
* FN       constant C1 in second-order moment closure (on input)
*          cloud fraction (on output)
*
*          - Input -
* ZN       length scale for turbulent mixing (on 'E' levels)
* ZE       length scale for turbulent dissipation (on 'E' levels)
* TAU      timestep
* N        horizontal dimension
* M        first dimension of T and QV
* NK       vertical dimension
*
*
*Notes
*          Retrieval of cloud water content is done by 
*          a sub-grid-scale parameterization (implicit clouds)
*
*IMPLICITS
*
#include "consphy.cdk"
*
**
*
      INTEGER J, K
*
*
**********************************************************
*     AUTOMATIC ARRAYS
**********************************************************
*
      AUTOMATIC ( EXNER   , REAL    , (N,NK)  )
      AUTOMATIC ( THL     , REAL    , (N,NK)  )
      AUTOMATIC ( QW      , REAL    , (N,NK)  )
      AUTOMATIC ( A       , REAL    , (N,NK)  )
      AUTOMATIC ( B       , REAL    , (N,NK)  )
      AUTOMATIC ( C       , REAL    , (N,NK)  )
      AUTOMATIC ( ALPHA   , REAL    , (N,NK)  )
      AUTOMATIC ( BETA    , REAL    , (N,NK)  )
      AUTOMATIC ( QCP     , REAL    , (N,NK)  )
*
**********************************************************
*
*
* MODULES
      EXTERNAL THERMCO2, CLSGS


#include "dintern.cdk"
#include "fintern.cdk"
*
*
*------------------------------------------------------------------------
*
*
*       1. Retrieval of implicit cloud water content 
*       --------------------------------------------
*
      DO K=1,NK
      DO J=1,N
        EXNER(J,K) = S(J,K)**CAPPA
        THL(J,K) = T(J,K) + TAU*DT(J,K)
        QW(J,K) = QV(J,K) + TAU*DQV(J,K)
      END DO
      END DO
*
      CALL THERMCO2 (T, QV, QC, S, PS, TIF, FICE, FNN,
     1               THL, QW, A, B, C, ALPHA, BETA,
     1               0, .FALSE., N, M, NK)
*
*                                              retrieve QC from QW and THL (put in QCP)
      CALL CLSGS2 (THL, TVE, QW, QCP, FN, FNN, FN,
     1            ZN, ZE, S, PS, A, B, C, N, NK)
*                 
*
*       2.     Back to non-conservative variables (T and QV) and tendencies
*       -------------------------------------------------------------------
*
      DO K=1,NK
      DO J=1,N
*                                              back to T- and QV-
        T(J,K) = TM(J,K)
        QV(J,K) = QV(J,K) - MAX( 0.0 , QC(J,K) )
*
*                                              update QC and QCBL 
        DQC(J,K) = ( MAX(0.0 , QCP(J,K)) - 
     1               MAX(0.0 , QC(J,K)   ) )/TAU
*                                              prevent negative values for new QCBL
        DQC(J,K) = MAX( DQC(J,K) , -MAX( 0.0 ,QC(J,K) )/TAU )
        QCBL(J,K) =  MAX( 0.0 , QC(J,K) ) + DQC(J,K) * TAU
*                                              retrieve T, and QV tendencies
*                                              (T and QV updates are made elsewhere)
        DT(J,K) = EXNER(J,K)*DT(J,K) 
     1            + ((CHLC+FICE(J,K)*CHLF)/CPD)*DQC(J,K)
        DQV(J,K) = DQV(J,K) - DQC(J,K)
*                                              prevent negative values for QV
        DQV(J,K) = MAX( DQV(J,K) , -MAX( 0.0 ,QV(J,K) )/TAU )
*                                              set cloud water content tendency to zero
        DQC(J,K) = 0.0 
*
      END DO
      END DO
*
*
      RETURN
      END