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
! ######spl
FUNCTION BL_DEPTH_DIAG_3D(KKB,KKE,PSURF,PZS,PFLUX,PZZ,PFTOP_O_FSURF)
USE PARKIND1, ONLY : JPRB
USE YOMHOOK , ONLY : LHOOK, DR_HOOK
!
!
!!**** *SBL_DEPTH* - computes SBL depth
!!
!! PURPOSE
!! -------
!
!!** METHOD
!! ------
!!
!! SBL is defined as the layer where momentum flux is equal to XSBL_FRAC of its surface value
!!
!! EXTERNAL
!! --------
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!!
!! REFERENCE
!! ---------
!!
!! AUTHOR
!! ------
!! V. Masson * Meteo-France *
!!
!! MODIFICATIONS
!! -------------
!! Original nov. 2005
!!
!! --------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
!* 0.1 declarations of arguments
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: KKB ! bottom point
INTEGER, INTENT(IN) :: KKE ! top point
REAL, DIMENSION(:,:), INTENT(IN) :: PSURF ! surface flux
REAL, DIMENSION(:,:), INTENT(IN) :: PZS ! orography
REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLUX ! flux
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitude of flux points
REAL, INTENT(IN) :: PFTOP_O_FSURF! Flux at BL top / Surface flux
REAL, DIMENSION(SIZE(PSURF,1),SIZE(PSURF,2)) :: BL_DEPTH_DIAG_3D
!
!
! 0.2 declaration of local variables
!
INTEGER :: JI,JJ,JK ! loop counters
INTEGER :: IKL ! +1 : MesoNH levels -1: Arome
REAL :: ZFLX ! flux at top of BL
!
!----------------------------------------------------------------------------
!
REAL(KIND=JPRB) :: ZHOOK_HANDLE
IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_3D',0,ZHOOK_HANDLE)
IF (KKB < KKE) THEN
IKL=1
ELSE
IKL=-1
ENDIF
BL_DEPTH_DIAG_3D(:,:) = 0.
!
DO JJ=1,SIZE(PSURF,2)
DO JI=1,SIZE(PSURF,1)
IF (PSURF(JI,JJ)==0.) CYCLE
DO JK=KKB,KKE,IKL
IF (PZZ(JI,JJ,JK-IKL)<=PZS(JI,JJ)) CYCLE
ZFLX = PSURF(JI,JJ) * PFTOP_O_FSURF
IF ( (PFLUX(JI,JJ,JK)-ZFLX)*(PFLUX(JI,JJ,JK-IKL)-ZFLX) <= 0. ) THEN
BL_DEPTH_DIAG_3D(JI,JJ) = (PZZ (JI,JJ,JK-IKL) - PZS(JI,JJ)) &
+ (PZZ (JI,JJ,JK) - PZZ (JI,JJ,JK-IKL)) &
* (ZFLX - PFLUX(JI,JJ,JK-IKL) ) &
/ (PFLUX(JI,JJ,JK) - PFLUX(JI,JJ,JK-IKL) )
EXIT
END IF
END DO
END DO
END DO
!
BL_DEPTH_DIAG_3D(:,:) = BL_DEPTH_DIAG_3D(:,:) / (1. - PFTOP_O_FSURF)
!
IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_3D',1,ZHOOK_HANDLE)
END FUNCTION BL_DEPTH_DIAG_3D