!copyright (C) 2001 MSC-RPN COMM %%%RPNPHY%%%
*** S/P THERMCO2
*
#include "phy_macros_f.h"
SUBROUTINE THERMCO2 (T, QV, QC, S, PS, TIF, FICE, FNN, 2,5
1 THL, QW, A, B, C, ALPHA, BETA,
1 TYPE, INMODE, N, M, NK)
*
#include "impnone.cdk"
*
*
INTEGER N, M, NK
REAL T(M,NK), QV(M,NK), QC(N,NK)
REAL S(N,NK), PS(N), TIF(M,NK), FICE(N,NK), FNN(N,NK)
REAL THL(N,NK), QW(N,NK), A(N,NK), B(N,NK), C(N,NK)
REAL ALPHA(N,NK), BETA(N,NK)
INTEGER TYPE
LOGICAL INMODE
*
*Author
* J. Mailhot (Nov 1999)
*
*Revision
* 001 J. Mailhot (Jan 2000) - Changes to add mixed-phase mode
* 002 A.-M. Leduc (Oct 2001) Automatic arrays
* 003 J. Mailhot (Jun 2002) - Add cloud type and input mode
* Change calling sequence and rename THERMCO2
* 004 A. Plante (May 2003) - IBM conversion
* - calls to exponen4 (to calculate power function '**')
* - divisions replaced by reciprocals
* - calls to optimized routine mfdlesmx
* 005 B. Bilodeau (Aug 2003) - exponen4 replaced by vspown1
*
*Object
* Calculate the thermodynamic coefficients used in the presence of clouds
* and the conservative variables.
*
*Arguments
*
* - Input -
* T temperature
* QV specific humidity
* QC total cloud water content
* S sigma levels
* PS surface pressure (in Pa)
* TIF temperature used to compute ice fraction
* FICE ice fraction
* FNN flux enhancement factor
*
* - Input/Output -
* THL ice-liquid potential temperature (thetal)
* QW total water content (QW = QV + QC )
*
* - Output -
* A thermodynamic coefficient
* B thermodynamic coefficient
* C thermodynamic coefficient
* ALPHA thermodynamic coefficient
* BETA thermodynamic coefficient
*
* - Input -
* TYPE integer switch for cloud type: 0 = implicit only
* 1 = explicit only
* 2 = implicit/explicit
* INMODE logical switch for input mode: .TRUE. = standard mode
* .FALSE. = THL,QW are inputs
* N horizontal dimension
* M first dimension of T and QV
* NK vertical dimension
*
*
*Notes
* See definitions in:
* - Bechtold and Siebesma 1998, JAS 55, 888-895
*
*
*IMPLICITS
*
#include "consphy.cdk"
*
**
*
INTEGER J, K, ITOTAL
*
*
*
**********************************************************
* AUTOMATIC ARRAYS
**********************************************************
*
AUTOMATIC ( PRES , REAL , (N,NK) )
AUTOMATIC ( EXNER , REAL , (N,NK) )
AUTOMATIC ( EXNERR , REAL*8 , (N,NK) )
AUTOMATIC ( QSAT , REAL , (N,NK) )
AUTOMATIC ( DQSAT , REAL , (N,NK) )
AUTOMATIC ( TH , REAL , (N,NK) )
AUTOMATIC ( TL , REAL , (N,NK) )
AUTOMATIC ( FFICE , REAL , (N,NK) )
AUTOMATIC ( TFICE , REAL , (N,NK) )
AUTOMATIC ( DFICE , REAL , (N,NK) )
AUTOMATIC ( WORK , REAL , (N,NK) )
AUTOMATIC ( WORK8 , REAL*8 , (N,NK) )
*
**********************************************************
*
*
#include "dintern.cdk"
#include "fintern.cdk"
*
*
*MODULES
EXTERNAL FICEMXP,MFDLESMX
*------------------------------------------------------------------------
*
*
*
* 1. Preliminaries
* --------------------
*
DO K=1,NK
DO J=1,N
PRES(J,K) = S(J,K)*PS(J)
FFICE(J,K) = FICE(J,K)
END DO
END DO
CALL VSPOWN1 (EXNER,S,CAPPA,N*NK)
WORK8=EXNER
CALL VREC(EXNERR,WORK8,N*NK)
*
IF ( INMODE ) THEN
IF ( TYPE .EQ. 0 )
1 CALL FICEMXP
(FFICE,TFICE,DFICE,TIF,N,M,NK)
DO K=1,NK
DO J=1,N
TH(J,K) = T(J,K)*EXNERR(J,K)
THL(J,K) = TH(J,K)*( 1.0 - ((CHLC+FFICE(J,K)*CHLF)/CPD)
1 *( QC(J,K)/T(J,K) ) )
QW(J,K) = QV(J,K)+QC(J,K)
END DO
END DO
ENDIF
*
DO K=1,NK
DO J=1,N
TL(J,K) = EXNER(J,K)*THL(J,K)
END DO
END DO
*
*
* 2. Saturation specific humidity
* -----------------------------------
*
IF ( TYPE .EQ. 0 ) THEN
CALL FICEMXP
(A,TFICE,DFICE,TIF,N,M,NK)
DO K=1,NK
DO J=1,N
QSAT(J,K) = FQSMX( TL(J,K), PRES(J,K), TFICE(J,K) )
END DO
END DO
CALL MFDLESMX
(C,TL,TFICE,DFICE,N,NK)
DO K=1,NK
DO J=1,N
DQSAT(J,K) = FDQSMX( QSAT(J,K), C(J,K) )
END DO
END DO
*
ELSEIF( TYPE .EQ. 1 ) THEN
DO K=1,NK
DO J=1,N
QSAT(J,K) = FOQSA( TL(J,K), PRES(J,K) )
DQSAT(J,K) = FODQA( QSAT(J,K), TL(J,K) )
END DO
END DO
*
ENDIF
*
IF ( TYPE .EQ. 2 ) THEN
CALL FICEMXP
(A,TFICE,DFICE,TIF,N,M,NK)
CALL MFDLESMX
(WORK,TL,TFICE,DFICE,N,NK)
DO K=1,NK
DO J=1,N
IF ( FNN(J,K) .LT. 1.0 ) THEN
QSAT(J,K) = FQSMX( TL(J,K), PRES(J,K), TFICE(J,K) )
C(J,K) = WORK(J,K)
DQSAT(J,K) = FDQSMX( QSAT(J,K), C(J,K) )
ELSE
QSAT(J,K) = FOQSA( TL(J,K), PRES(J,K) )
DQSAT(J,K) = FODQA( QSAT(J,K), TL(J,K) )
ENDIF
END DO
END DO
ENDIF
*
* 3. Thermodynamic coefficients
* ---------------------------------
* (cf. BS 1998 Appendix A)
DO K=1,NK
DO J=1,N
A(J,K) = 1.0/( 1.0 + ((CHLC+FFICE(J,K)*CHLF)/CPD)*DQSAT(J,K) )
B(J,K) = A(J,K)*EXNER(J,K)*DQSAT(J,K)
C(J,K) = A(J,K)*( QW(J,K)-QSAT(J,K) )
*
IF ( INMODE ) THEN
ALPHA(J,K) = DELTA*TH(J,K)
BETA(J,K) = ((CHLC+FFICE(J,K)*CHLF)/CPD)/EXNER(J,K)
1 - (1.0+DELTA)*TH(J,K)
ELSE
ALPHA(J,K) = 0.0
BETA(J,K) = 0.0
ENDIF
*
END DO
END DO
*
*
*
RETURN
END