Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
! ######spl
FUNCTION EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM) RESULT(PEMOIST)
USE PARKIND1, ONLY : JPRB
USE YOMHOOK , ONLY : LHOOK, DR_HOOK
! ############################################################################
!
! PURPOSE
!! -------
! EMOIST computes the coefficient Emoist in the flottability turbulent
! flux. This coefficient relates the vertical flux of the virtual potential
! temperature ( <Thv' W'> ) to the vertical flux of the conservative mixing
! ratio ( <Rnp' W'> ).
!
!!** METHOD
!! ------
!! The virtual potential temperature perturbation is linearized in function
!! of Thl' and Rnp'. The result is
!! Thv'= ( ZA + ZC * Atheta * 2 * SRC ) Thl'
!! +( ZB + ZC * Amoist * 2 * SRC ) Rnp'
!! From this relation, we can compute the verical turbulent fluxes.
!!
!! EXTERNAL
!! --------
!! NONE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! Module MODD_CST : contains physical constants.
!! XRV, XRD : R for water vapor and dry air
!!
!! REFERENCE
!! ---------
!!
!! NONE
!!
!!
!! AUTHOR
!! ------
!! Jean-Marie Carriere * Meteo-France *
!!
!! MODIFICATIONS
!! -------------
!! Original 20/03/95
!!
!! J. Stein Feb 28, 1996 optimization + Doctorization
!! J. Stein Spet 15, 1996 Amoist previously computed
!! J.-P. Pinty May 20, 2003 Improve EMOIST expression
!!
!! ----------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
USE MODD_CST
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments and result
!
!
INTEGER :: KRR ! number of moist var.
INTEGER :: KRRI ! number of ice var.
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHLM ! Conservative pot. temperature
REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM ! Mixing ratios, where
! PRM(:,:,:,1) = conservative mixing ratio
REAL, DIMENSION(:,:,:), INTENT(IN) :: PLOCPEXNM ! Lv(T)/Cp/Exner at time t-1
REAL, DIMENSION(:,:,:), INTENT(IN) :: PAMOIST ! Amoist
REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRCM ! Normalized 2dn_order
! moment s'r'c/2Sigma_s2
!
REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)):: PEMOIST ! result
!
!* 0.2 declarations of local variables
!
REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) :: &
ZA, ZRW
! ZA = coeft A, ZRW = total mixing ratio rw
REAL :: ZDELTA ! = Rv/Rd - 1
INTEGER :: JRR ! moist loop counter
!
!---------------------------------------------------------------------------
!
!
!* 1. COMPUTE EMOIST
! --------------
!
!
REAL(KIND=JPRB) :: ZHOOK_HANDLE
IF (LHOOK) CALL DR_HOOK('EMOIST',0,ZHOOK_HANDLE)
IF ( KRR == 0 ) THEN ! dry case
PEMOIST(:,:,:) = 0.
ELSE IF ( KRR == 1 ) THEN ! only vapor
ZDELTA = (XRV/XRD) - 1.
PEMOIST(:,:,:) = ZDELTA*PTHLM(:,:,:)
ELSE ! liquid water & ice present
ZDELTA = (XRV/XRD) - 1.
ZRW(:,:,:) = PRM(:,:,:,1)
!
IF ( KRRI>0) THEN ! rc and ri case
ZRW(:,:,:) = ZRW(:,:,:) + PRM(:,:,:,3)
DO JRR=5,KRR
ZRW(:,:,:) = ZRW(:,:,:) + PRM(:,:,:,JRR)
ENDDO
ZA(:,:,:) = 1. + ( & ! Compute A
(1.+ZDELTA) * (PRM(:,:,:,1) - PRM(:,:,:,2) - PRM(:,:,:,4)) &
-ZRW(:,:,:) &
) / (1. + ZRW(:,:,:))
!
! Emoist = ZB + ZC * Amoist
! ZB is computed from line 1 to line 2
! ZC is computed from line 3 to line 5
! Amoist* 2 * SRC is computed at line 6
!
PEMOIST(:,:,:) = ZDELTA * (PTHLM(:,:,:) + PLOCPEXNM(:,:,:)*( &
PRM(:,:,:,2)+PRM(:,:,:,4)))&
/ (1. + ZRW(:,:,:)) &
+( PLOCPEXNM(:,:,:) * ZA(:,:,:) &
-(1.+ZDELTA) * (PTHLM(:,:,:) + PLOCPEXNM(:,:,:)*( &
PRM(:,:,:,2)+PRM(:,:,:,4)))&
/ (1. + ZRW(:,:,:)) &
) * PAMOIST(:,:,:) * 2. * PSRCM(:,:,:)
ELSE
DO JRR=3,KRR
ZRW(:,:,:) = ZRW(:,:,:) + PRM(:,:,:,JRR)
ENDDO
ZA(:,:,:) = 1. + ( & ! Compute ZA
(1.+ZDELTA) * (PRM(:,:,:,1) - PRM(:,:,:,2)) &
-ZRW(:,:,:) &
) / (1. + ZRW(:,:,:))
!
! Emoist = ZB + ZC * Amoist
! ZB is computed from line 1 to line 2
! ZC is computed from line 3 to line 5
! Amoist* 2 * SRC is computed at line 6
!
PEMOIST(:,:,:) = ZDELTA * (PTHLM(:,:,:) + PLOCPEXNM(:,:,:)*PRM(:,:,:,2)) &
/ (1. + ZRW(:,:,:)) &
+( PLOCPEXNM(:,:,:) * ZA(:,:,:) &
-(1.+ZDELTA) * (PTHLM(:,:,:) + PLOCPEXNM(:,:,:)*PRM(:,:,:,2)) &
/ (1. + ZRW(:,:,:)) &
) * PAMOIST(:,:,:) * 2. * PSRCM(:,:,:)
END IF
END IF
!
!---------------------------------------------------------------------------
!
IF (LHOOK) CALL DR_HOOK('EMOIST',1,ZHOOK_HANDLE)
END FUNCTION EMOIST