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
! ######spl
SUBROUTINE COMPUTE_MF_CLOUD_STAT(KKA, KKB, KKE, KKU, KKL, KRR, KRRL, KRRI,&
&PFRAC_ICE,&
&PTHLM, PRTM, PPABSM, PRM,&
&PDZZ, PTHM, PEXNM, &
&PEMF, PTHL_UP, PRT_UP,&
&PSIGMF)
! #################################################################
!!
!!**** *COMPUTE_MF_CLOUD_STAT* -
!! compute diagnostic subgrid cumulus cloud caracteristics with a statistical scheme
!!
!! PURPOSE
!! -------
!!**** With this option, a formulation for the computation of the variance of the departure
!! to saturation is proposed.
!!
!
!!** METHOD
!! ------
!! Updraft variables are used to diagnose the variance
!!
!! EXTERNAL
!! --------
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!! S. Riette moving of code previously in compute_mf_cloud code
!!
!! MODIFICATIONS
!! -------------
!! Original 25 Aug 2011
!! S. Riette Jan 2012: support for both order of vertical levels
!! --------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
USE MODD_CMFSHALL, ONLY : XTAUSIGMF
USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
!
USE MODI_SHUMAN_MF, ONLY: MZF_MF, MZM_MF, GZ_M_W_MF
USE MODE_COMPUTE_FUNCTION_THERMO_MF, ONLY: COMPUTE_FUNCTION_THERMO_MF
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
!
USE PARKIND1, ONLY : JPRB
USE YOMHOOK , ONLY : LHOOK, DR_HOOK
!
IMPLICIT NONE
!
!* 0.1 Declaration of Arguments
!
INTEGER, INTENT(IN) :: KKA ! near ground array index
INTEGER, INTENT(IN) :: KKB ! near ground physical index
INTEGER, INTENT(IN) :: KKE ! uppest atmosphere physical index
INTEGER, INTENT(IN) :: KKU ! uppest atmosphere array index
INTEGER, INTENT(IN) :: KKL ! +1 if grid goes from ground to atmosphere top, -1 otherwise
INTEGER, INTENT(IN) :: KRR ! number of moist var.
INTEGER, INTENT(IN) :: KRRL ! number of liquid water var.
INTEGER, INTENT(IN) :: KRRI ! number of ice water var.
REAL, DIMENSION(:,:), INTENT(IN) :: PFRAC_ICE ! liquid/ice fraction
REAL, DIMENSION(:,:), INTENT(IN) :: PTHLM, PRTM ! cons. var. at t-dt
REAL, DIMENSION(:,:), INTENT(IN) :: PPABSM ! Pressure at time t-1
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRM ! water var. at t-dt
REAL, DIMENSION(:,:), INTENT(IN) :: PDZZ
REAL, DIMENSION(:,:), INTENT(IN) :: PTHM ! environement
REAL, DIMENSION(:,:), INTENT(IN) :: PEXNM
REAL, DIMENSION(:,:), INTENT(IN) :: PEMF ! updraft characteritics
REAL, DIMENSION(:,:), INTENT(IN) :: PTHL_UP, PRT_UP ! rc,w,Mass Flux,Thetal,rt
REAL, DIMENSION(:,:), INTENT(OUT) :: PSIGMF ! SQRT(variance) for statistical cloud scheme
!
!* 0.1 Declaration of local variables
!
!
REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2)) :: ZFLXZ
REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2)) :: ZT
REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2)) :: ZAMOIST, ZATHETA
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
!* 0.2 initialisation
!
IF (LHOOK) CALL DR_HOOK('COMPUTE_MF_CLOUD_STAT',0,ZHOOK_HANDLE)
!
!----------------------------------------------------------------------------
!
!* 1. COMPUTE SIGMA_MF (saturation deviation variance)
! Soares et al (2004) formulation
! ------------------------------------------------
!
! Thermodynamics functions
CALL COMPUTE_FUNCTION_THERMO_MF( KRR,KRRL,KRRI, &
PTHM,PRM,PEXNM,PFRAC_ICE,PPABSM, &
ZT,ZAMOIST,ZATHETA )
!
IF (KRRL > 0) THEN
!
!* 1.1 contribution from <THl THl>
!
!
ZFLXZ(:,:) = -2 * XTAUSIGMF * PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(PTHLM(:,:), KKA, KKU, KKL)) * &
GZ_M_W_MF(PTHLM(:,:),PDZZ(:,:), KKA, KKU, KKL)
!
! Avoid negative values
ZFLXZ(:,:) = MAX(0.,ZFLXZ(:,:))
PSIGMF(:,:) = MZF_MF(ZFLXZ(:,:), KKA, KKU, KKL) * ZATHETA(:,:)**2
!
!
!* 1.2 contribution from <Rnp Rnp>
!
!
!
!
ZFLXZ(:,:) = -2 * XTAUSIGMF * PEMF(:,:)*(PRT_UP(:,:)-MZM_MF(PRTM(:,:), KKA, KKU, KKL)) * &
GZ_M_W_MF(PRTM(:,:),PDZZ(:,:), KKA, KKU, KKL)
!
! Avoid negative values
ZFLXZ(:,:) = MAX(0.,ZFLXZ(:,:))
!
PSIGMF(:,:) = PSIGMF(:,:) + ZAMOIST(:,:) **2 * MZF_MF(ZFLXZ(:,:), KKA, KKU, KKL)
!
! 1.3 Vertical part of Sigma_s
!
PSIGMF(:,:) = SQRT( MAX (PSIGMF(:,:) , 0.) )
ELSE
PSIGMF(:,:) = 0.
END IF
!
IF (LHOOK) CALL DR_HOOK('COMPUTE_MF_CLOUD_STAT',1,ZHOOK_HANDLE)
!
END SUBROUTINE COMPUTE_MF_CLOUD_STAT