Newer
Older

RODIER Quentin
committed
!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
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
! ######spl
FUNCTION ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM) RESULT(PETHETA)
USE PARKIND1, ONLY : JPRB
USE YOMHOOK , ONLY : LHOOK, DR_HOOK
! ############################################################################
!
! PURPOSE
!! -------
! ETHETA computes the coefficient Etheta 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 potential
! temperature ( <Thl' 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 vertical turbulent fluxes.
!!
!! EXTERNAL
!! --------
!!
!! NONE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! Module MODD_CST : contains physical constants.
!! XRV, XRD : R for water vapor and dry air
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!! Jean-Marie Carriere * Meteo-France *
!!
!! MODIFICATIONS
!! -------------
!! Original 20/03/95
!!
!! J. Stein Feb 28, 1996 optimization + Doctorization
!! J. Stein Sept 15, 1996 Atheta previously computed
!! J.-P. Pinty May 20, 2003 Improve ETHETA expression

RODIER Quentin
committed
!! J.L Redelsperger 03, 2021 Ocean Model Case
!! ----------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
USE MODD_CST

RODIER Quentin
committed
USE MODD_DYN_n, ONLY : LOCEAN
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
!
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) :: PATHETA ! Atheta
!
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)):: PETHETA ! 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 ETHETA
! --------------
!
!
REAL(KIND=JPRB) :: ZHOOK_HANDLE
IF (LHOOK) CALL DR_HOOK('ETHETA',0,ZHOOK_HANDLE)

RODIER Quentin
committed
IF (LOCEAN) THEN ! ocean case
PETHETA(:,:,:) = 1.
ELSE
IF ( KRR == 0) THEN ! dry case
PETHETA(:,:,:) = 1.

RODIER Quentin
committed
ELSE IF ( KRR == 1 ) THEN ! only vapor
ZDELTA = (XRV/XRD) - 1.
PETHETA(:,:,:) = 1. + ZDELTA*PRM(:,:,:,1)

RODIER Quentin
committed
ELSE ! liquid water & ice present
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
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(:,:,:))
!
! Etheta = ZA + ZC * Atheta
! ZC is computed from line 2 to line 5
! - Atheta * 2. * SRC is computed at line 6
!
PETHETA(:,:,:) = ZA(:,:,:) &
+( PLOCPEXNM(:,:,:) * ZA(:,:,:) &
-(1.+ZDELTA) * (PTHLM(:,:,:) + PLOCPEXNM(:,:,:)*( &
PRM(:,:,:,2)+PRM(:,:,:,4)))&
/ (1. + ZRW(:,:,:)) &
) * PATHETA(:,:,:) * 2. * PSRCM(:,:,:)
ELSE
DO JRR=3,KRR
ZRW(:,:,:) = ZRW(:,:,:) + PRM(:,:,:,JRR)
ENDDO
ZA(:,:,:) = 1. + ( & ! Compute A
(1.+ZDELTA) * (PRM(:,:,:,1) - PRM(:,:,:,2)) &
-ZRW(:,:,:) &
) / (1. + ZRW(:,:,:))
!
! Etheta = ZA + ZC * Atheta
! ZC is computed from line 2 to line 5
! - Atheta * 2. * SRC is computed at line 6
!
PETHETA(:,:,:) = ZA(:,:,:) &
+( PLOCPEXNM(:,:,:) * ZA(:,:,:) &
-(1.+ZDELTA) * (PTHLM(:,:,:) + PLOCPEXNM(:,:,:)*PRM(:,:,:,2)) &
/ (1. + ZRW(:,:,:)) &
) * PATHETA(:,:,:) * 2. * PSRCM(:,:,:)
END IF

RODIER Quentin
committed
END IF

RODIER Quentin
committed
END IF
!---------------------------------------------------------------------------
!
IF (LHOOK) CALL DR_HOOK('ETHETA',1,ZHOOK_HANDLE)
END FUNCTION ETHETA