SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
diag_inline_isban.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE diag_inline_isba_n (DGEI, DGI, I, PKDI, &
7  pta, pts, pqa, ppa, pps, prhoa, pzona, pmera, &
8  pht, phw, pcd, pcdn, pch, pri, phu, pz0, pz0h, &
9  pz0eff, psfth, psftq, psfzon, psfmer, pqs, &
10  pdir_alb, psca_alb, pdir_sw, psca_sw, plw, prn )
11 ! ###############################################################################
12 !
13 !!**** *DIAG_INLINE_ISBA_n * - computes diagnostics during ISBA time-step
14 !!
15 !! PURPOSE
16 !! -------
17 !
18 !!** METHOD
19 !! ------
20 !!
21 !! REFERENCE
22 !! ---------
23 !!
24 !!
25 !! AUTHOR
26 !! ------
27 !! V. Masson
28 !!
29 !! MODIFICATIONS
30 !! -------------
31 !! Original 01/2004
32 !! B. Decharme 08/2009 caculate cumulated diag LSURF_BUDGETC
33 !! S. Riette 06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
34 !! more argument (height of diagnostic)
35 !!------------------------------------------------------------------
36 !
37 
38 !
39 !
40 !
42 USE modd_diag_isba_n, ONLY : diag_isba_t
43 USE modd_isba_n, ONLY : isba_t
45 !
46 USE modd_surf_par, ONLY : xundef
47 !
48 USE modi_param_cls
49 USE modi_cls_tq
50 USE modi_cls_wind
51 USE modi_diag_surf_budget_isba
52 !
53 !
54 USE yomhook ,ONLY : lhook, dr_hook
55 USE parkind1 ,ONLY : jprb
56 !
57 IMPLICIT NONE
58 !
59 !* 0.1 declarations of arguments
60 !
61 !
62 TYPE(diag_evap_isba_t), INTENT(INOUT) :: dgei
63 TYPE(diag_isba_t), INTENT(INOUT) :: dgi
64 TYPE(isba_t), INTENT(INOUT) :: i
65 TYPE(pack_diag_isba_t), INTENT(INOUT) :: pkdi
66 !
67 REAL, DIMENSION(:), INTENT(IN) :: pta ! atmospheric temperature
68 REAL, DIMENSION(:), INTENT(IN) :: pts ! surface temperature
69 REAL, DIMENSION(:), INTENT(IN) :: pqa ! atmospheric specific humidity
70 REAL, DIMENSION(:), INTENT(IN) :: ppa ! atmospheric level pressure
71 REAL, DIMENSION(:), INTENT(IN) :: pps ! surface pressure
72 REAL, DIMENSION(:), INTENT(IN) :: prhoa ! air density
73 REAL, DIMENSION(:), INTENT(IN) :: pzona ! zonal wind
74 REAL, DIMENSION(:), INTENT(IN) :: pmera ! meridian wind
75 REAL, DIMENSION(:), INTENT(IN) :: pht ! atmospheric level height
76 REAL, DIMENSION(:), INTENT(IN) :: phw ! atmospheric level height for wind
77 REAL, DIMENSION(:), INTENT(IN) :: pcd ! drag coefficient for momentum
78 REAL, DIMENSION(:), INTENT(IN) :: pcdn ! neutral drag coefficient
79 REAL, DIMENSION(:), INTENT(IN) :: pch ! drag coefficient for heat
80 REAL, DIMENSION(:), INTENT(IN) :: pri ! Richardson number
81 REAL, DIMENSION(:), INTENT(IN) :: phu ! near-surface humidity
82 REAL, DIMENSION(:), INTENT(IN) :: pz0 ! roughness length for momentum
83 REAL, DIMENSION(:), INTENT(IN) :: pz0h ! roughness length for heat
84 REAL, DIMENSION(:), INTENT(IN) :: pz0eff ! effective roughness length (z0+z0rel)
85 REAL, DIMENSION(:), INTENT(IN) :: pqs ! humidity at surface
86 REAL, DIMENSION(:,:), INTENT(IN) :: pdir_alb ! direct albedo for each spectral band
87 REAL, DIMENSION(:,:), INTENT(IN) :: psca_alb ! diffuse albedo for each spectral band (-)
88 REAL, DIMENSION(:,:), INTENT(IN) :: pdir_sw ! direct solar radiation (on horizontal surf.)
89 REAL, DIMENSION(:,:), INTENT(IN) :: psca_sw ! diffuse solar radiation (on horizontal surf.)
90 REAL, DIMENSION(:), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.)
91 REAL, DIMENSION(:), INTENT(IN) :: prn ! Surface net radiation
92 !
93 REAL, DIMENSION(:), INTENT(IN) :: psfzon ! zonal friction
94 REAL, DIMENSION(:), INTENT(IN) :: psfmer ! meridian friction
95 REAL, DIMENSION(:), INTENT(IN) :: psfth ! heat flux (W/m2)
96 REAL, DIMENSION(:), INTENT(IN) :: psftq ! water flux (kg/m2/s)
97 !
98 !* 0.2 declarations of local variables
99 !
100 REAL, DIMENSION(SIZE(PTA)) :: zh
101 REAL(KIND=JPRB) :: zhook_handle
102 !-------------------------------------------------------------------------------------
103 !
104 IF (lhook) CALL dr_hook('DIAG_INLINE_ISBA_N',0,zhook_handle)
105 !
106 ! * Richardson number
107 !
108 IF (dgi%N2M>=1) THEN
109  pkdi%XP_RI = pri
110 ENDIF
111 !
112 ! * Near surface atmospheric variables
113 !
114 IF (.NOT. i%LCANOPY) THEN
115 !
116  IF (dgi%N2M==1) THEN
117  CALL param_cls(pta, pts, pqa, ppa, prhoa, pzona, pmera, pht, phw, &
118  psfth, psftq, psfzon, psfmer, &
119  pkdi%XP_T2M, pkdi%XP_Q2M, pkdi%XP_HU2M, pkdi%XP_ZON10M, pkdi%XP_MER10M )
120  ELSE IF (dgi%N2M==2) THEN
121  zh(:)=2.
122  CALL cls_tq(pta, pqa, ppa, pps, pht, &
123  pcd, pch, pri, &
124  pts, phu, pz0h, zh, &
125  pkdi%XP_T2M, pkdi%XP_Q2M, pkdi%XP_HU2M )
126  zh(:)=10.
127  CALL cls_wind(pzona, pmera, phw, &
128  pcd, pcdn, pri, zh, &
129  pkdi%XP_ZON10M, pkdi%XP_MER10M )
130  END IF
131 !
132 ELSE
133  !
134  IF (dgi%N2M>=1) THEN
135  pkdi%XP_T2M = xundef
136  pkdi%XP_Q2M = xundef
137  pkdi%XP_HU2M = xundef
138  pkdi%XP_ZON10M = xundef
139  pkdi%XP_MER10M = xundef
140  ENDIF
141  !
142 ENDIF
143 !
144 ! * Surface energy budget
145 !
146 IF (dgi%LSURF_BUDGET.OR.dgei%LSURF_BUDGETC) THEN
147  !
148  CALL diag_surf_budget_isba(pdir_sw, psca_sw, pdir_alb, psca_alb, &
149  plw, prn, &
150  pkdi%XP_SWD, pkdi%XP_SWU, pkdi%XP_SWBD, pkdi%XP_SWBU, &
151  pkdi%XP_LWD, pkdi%XP_LWU )
152  !
153  pkdi%XP_FMU = psfzon
154  pkdi%XP_FMV = psfmer
155  !
156 END IF
157 !
158 IF (dgi%LCOEF) THEN
159  !
160  !* Transfer coefficient
161  !
162  pkdi%XP_CD = pcd
163  pkdi%XP_CH = pch
164  pkdi%XP_CE = pch
165  !
166  !* Roughness lengths
167  !
168  pkdi%XP_Z0_WITH_SNOW = pz0
169  pkdi%XP_Z0H_WITH_SNOW = pz0h
170  pkdi%XP_Z0EFF = pz0eff
171  !
172 ENDIF
173 !
174 IF (dgi%LSURF_VARS) THEN
175  !
176  !* Humidity at surface
177  !
178  pkdi%XP_QS = pqs
179  !
180 ENDIF
181 IF (lhook) CALL dr_hook('DIAG_INLINE_ISBA_N',1,zhook_handle)
182 !
183 !-------------------------------------------------------------------------------------
184 !
185 END SUBROUTINE diag_inline_isba_n
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:6
subroutine param_cls(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PH, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PT2M, PQ2M, PHU2M, PZON10M, PMER10M)
Definition: param_cls.F90:6
subroutine diag_surf_budget_isba(PDIR_SW, PSCA_SW, PDIR_ALB, PSCA_ALB, PLW, PRN, PSWD, PSWU, PSWBD, PSWBU, PLWD, PLWU)
subroutine diag_inline_isba_n(DGEI, DGI, I, PKDI, PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PCD, PCDN, PCH, PRI, PHU, PZ0, PZ0H, PZ0EFF, PSFTH, PSFTQ, PSFZON, PSFMER, PQS, PDIR_ALB, PSCA_ALB, PDIR_SW, PSCA_SW, PLW, PRN)
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:6