!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