SURFEX v8.1
General documentation of Surfex
coupling_isba_canopyn.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 coupling_isba_canopy_n (DTCO, UG, U, USS, SB, NAG, CHI, NCHI, DTV, ID, NGB, GB, &
7  ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, &
8  HPROGRAM, HCOUPLING, PTSTEP, &
9  KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, &
10  PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, &
11  PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, &
12  PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, &
13  PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, &
14  PEMIS, PTSURF, PZ0,PZ0H, PQSURF, PPEW_A_COEF, &
15  PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, &
16  PPEQ_B_COEF, HTEST )
17 ! ###############################################################################
18 !
19 !!**** *COUPLING_ISBA_CANOPY_n * - Adds a SBL into ISBA
20 !!
21 !! PURPOSE
22 !! -------
23 !
24 !!** METHOD
25 !! ------
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !!
31 !! AUTHOR
32 !! ------
33 !! V. Masson
34 !!
35 !! MODIFICATIONS
36 !! -------------
37 !! Original 09/2007
38 !! S. Riette 06/2009 Initialisation of XT, XQ, XU and XTKE on canopy levels
39 !! S. Riette 01/2010 Use of interpol_sbl to compute 10m wind diagnostic
40 !! Modified 09/2012 : J. Escobar , SIZE(PTA) not allowed without-interface , replace by KI
41 !! B. Decharme 04/2013 new coupling variables
42 !----------------------------------------------------------------
43 !
44 USE modd_agri_n, ONLY : agri_np_t
46 USE modd_data_isba_n, ONLY : data_isba_t
47 USE modd_surfex_n, ONLY : isba_diag_t
49 USE modd_sso_n, ONLY : sso_t, sso_np_t
50 USE modd_sfx_grid_n, ONLY : grid_t, grid_np_t
53 !
54 USE modd_dst_n, ONLY : dst_np_t
55 
56 USE modd_canopy_n, ONLY : canopy_t
57 !
60 USE modd_surf_atm_n, ONLY : surf_atm_t
61 USE modd_sso_n, ONLY : sso_t
62 USE modd_data_isba_n, ONLY : data_isba_t
63 USE modd_slt_n, ONLY : slt_t
64 !
65 !
66 USE modd_csts, ONLY : xcpd
67 USE modd_surf_par, ONLY : xundef
68 USE modd_canopy_turb, ONLY : xalpsbl
69 !
71 !
72 USE modi_init_isba_sbl
73 !
74 USE modi_canopy_evol
75 USE modi_canopy_grid_update
76 !
77 USE modi_coupling_isba_n
78 !
79 USE modi_isba_canopy
80 USE modi_sso_beljaars04
81 !
82 USE yomhook ,ONLY : lhook, dr_hook
83 USE parkind1 ,ONLY : jprb
84 !
85 IMPLICIT NONE
86 !
87 !* 0.1 declarations of arguments
88 !
89 TYPE(agri_np_t), INTENT(INOUT) :: NAG
90 TYPE(ch_isba_t), INTENT(INOUT) :: CHI
91 TYPE(ch_isba_np_t), INTENT(INOUT) :: NCHI
92 TYPE(data_isba_t), INTENT(INOUT) :: DTV
93 TYPE(isba_diag_t), INTENT(INOUT) :: ID
94 TYPE(gr_biog_np_t), INTENT(INOUT) :: NGB
95 TYPE(gr_biog_t), INTENT(INOUT) :: GB
96 TYPE(sso_t), INTENT(INOUT) :: ISS
97 TYPE(sso_np_t), INTENT(INOUT) :: NISS
98 TYPE(grid_t), INTENT(INOUT) :: IG
99 TYPE(grid_np_t), INTENT(INOUT) :: NIG
100 TYPE(isba_options_t), INTENT(INOUT) :: IO
101 TYPE(isba_s_t), INTENT(INOUT) :: S
102 TYPE(isba_k_t), INTENT(INOUT) :: K
103 TYPE(isba_nk_t), INTENT(INOUT) :: NK
104 TYPE(isba_np_t), INTENT(INOUT) :: NP
105 TYPE(isba_npe_t), INTENT(INOUT) ::NPE
106 !
107 TYPE(dst_np_t), INTENT(INOUT) :: NDST
108 !
109 TYPE(canopy_t), INTENT(INOUT) :: SB
110 !
111 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
112 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
113 TYPE(surf_atm_t), INTENT(INOUT) :: U
114 TYPE(sso_t), INTENT(INOUT) :: USS
115 TYPE(slt_t), INTENT(INOUT) :: SLT
116 !
117  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
118  CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling
119  ! 'E' : explicit
120  ! 'I' : implicit
121 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
122 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
123 INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
124 REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s)
125 INTEGER, INTENT(IN) :: KI ! number of points
126 INTEGER, INTENT(IN) :: KSV ! number of scalars
127 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
128 REAL, DIMENSION(KI), INTENT(IN) :: PTSUN ! solar time (s from midnight)
129 REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s)
130 REAL, DIMENSION(KI), INTENT(IN) :: PZREF ! height of T,q forcing (m)
131 REAL, DIMENSION(KI), INTENT(IN) :: PUREF ! height of wind forcing (m)
132 !
133 REAL, DIMENSION(KI), INTENT(IN) :: PTA ! air temperature forcing (K)
134 REAL, DIMENSION(KI), INTENT(IN) :: PQA ! air humidity forcing (kg/m3)
135 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3)
136 REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV ! scalar variables
137 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
138 ! !
139  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV ! name of all scalar variables
140 REAL, DIMENSION(KI), INTENT(IN) :: PU ! zonal wind (m/s)
141 REAL, DIMENSION(KI), INTENT(IN) :: PV ! meridian wind (m/s)
142 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.)
143 ! ! (W/m2)
144 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
145 ! ! (W/m2)
146 REAL, DIMENSION(KSW),INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m)
147 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle at t (radian from the vertical)
148 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH2 ! zenithal angle at t+1 (radian from the vertical)
149 REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! azimuthal angle (radian from North, clockwise)
150 REAL, DIMENSION(KI), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
151 ! ! (W/m2)
152 REAL, DIMENSION(KI), INTENT(IN) :: PPS ! pressure at atmospheric model surface (Pa)
153 REAL, DIMENSION(KI), INTENT(IN) :: PPA ! pressure at forcing level (Pa)
154 REAL, DIMENSION(KI), INTENT(IN) :: PZS ! atmospheric model CANOPY (m)
155 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration in the air (kg/m3)
156 REAL, DIMENSION(KI), INTENT(IN) :: PSNOW ! snow precipitation (kg/m2/s)
157 REAL, DIMENSION(KI), INTENT(IN) :: PRAIN ! liquid precipitation (kg/m2/s)
158 !
159 !
160 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH ! flux of heat (W/m2)
161 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ ! flux of water vapor (kg/m2/s)
162 REAL, DIMENSION(KI), INTENT(OUT) :: PSFU ! zonal momentum flux (Pa)
163 REAL, DIMENSION(KI), INTENT(OUT) :: PSFV ! meridian momentum flux (Pa)
164 REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2 ! flux of CO2 (m/s*kg_CO2/kg_air)
165 REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS ! flux of scalar var. (kg/m2/s)
166 !
167 REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD ! radiative temperature (K)
168 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band (-)
169 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
170 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity (-)
171 !
172 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
173 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0 ! roughness length for momentum (m)
174 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0H ! roughness length for heat (m)
175 REAL, DIMENSION(KI), INTENT(OUT) :: PQSURF ! specific humidity at surface (kg/kg)
176 !
177 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients
178 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I'
179 REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
180 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
181 REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
182 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
183  CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
184 !
185 !* 0.2 declarations of local variables
186 !
187 !* forcing variables
188 !
189 TYPE(isba_p_t), POINTER :: PK
190 TYPE(isba_pe_t), POINTER :: PEK
191 !
192 REAL, DIMENSION(KI) :: ZWIND ! lowest atmospheric level wind speed (m/s)
193 REAL, DIMENSION(KI) :: ZEXNA ! Exner function at lowest SBL scheme level (-)
194 REAL, DIMENSION(KI) :: ZTA ! temperature (K)
195 REAL, DIMENSION(KI) :: ZPA ! pressure (Pa)
196 REAL, DIMENSION(KI) :: ZZREF ! temperature forcing level (m)
197 REAL, DIMENSION(KI) :: ZUREF ! wind forcing level (m)
198 REAL, DIMENSION(KI) :: ZU ! zonal wind (m/s)
199 REAL, DIMENSION(KI) :: ZV ! meridian wind (m/s)
200 REAL, DIMENSION(KI) :: ZQA ! specific humidity (kg/m3)
201 REAL, DIMENSION(KI) :: ZPEQ_A_COEF ! specific humidity implicit
202 REAL, DIMENSION(KI) :: ZPEQ_B_COEF ! coefficients (hum. in kg/kg)
203 !
204 !
205 ! canopy turbulence scheme
206 !
207 REAL, DIMENSION(KI) :: ZCANOPY ! height of canopy (m)
208 REAL, DIMENSION(KI) :: ZSFLUX_U ! Surface flux u'w' (m2/s2)
209 REAL, DIMENSION(KI) :: ZSFLUX_T ! Surface flux w'T' (mK/s)
210 REAL, DIMENSION(KI) :: ZSFLUX_Q ! Surface flux w'q' (kgm2/s)
211 REAL, DIMENSION(KI,SB%NLVL) :: ZFORC_U ! tendency due to drag force for wind
212 REAL, DIMENSION(KI,SB%NLVL) :: ZDFORC_UDU! formal derivative of
213 ! ! tendency due to drag force for wind
214 REAL, DIMENSION(KI,SB%NLVL) :: ZFORC_E ! tendency due to drag force for TKE
215 REAL, DIMENSION(KI,SB%NLVL) :: ZDFORC_EDE! formal derivative of
216 ! ! tendency due to drag force for TKE
217 REAL, DIMENSION(KI,SB%NLVL) :: ZFORC_T ! tendency due to drag force for Temp
218 REAL, DIMENSION(KI,SB%NLVL) :: ZDFORC_TDT! formal derivative of
219 ! ! tendency due to drag force for Temp
220 REAL, DIMENSION(KI,SB%NLVL) :: ZFORC_Q ! tendency due to drag force for Temp
221 REAL, DIMENSION(KI,SB%NLVL) :: ZDFORC_QDQ! formal derivative of
222 ! ! tendency due to drag force for hum.
223 REAL, DIMENSION(KI,SB%NLVL) :: ZLM ! mixing length
224 REAL, DIMENSION(KI,SB%NLVL) :: ZLEPS ! dissipative length
225 REAL, DIMENSION(KI) :: ZH ! canopy height (m)
226 REAL, DIMENSION(KI) :: ZUSTAR ! friction velocity including drag effect (m/s)
227 REAL, DIMENSION(KI) :: ZUSTAR_GROUND! friction velocity at ground only (ISBA) (m/s)
228 !
229 REAL, DIMENSION(KI) :: ZPET_A_COEF ! temperature implicit
230 REAL, DIMENSION(KI) :: ZPET_B_COEF ! coefficients (K)
231 REAL, DIMENSION(KI) :: ZPEW_A_COEF ! wind implicit
232 REAL, DIMENSION(KI) :: ZPEW_B_COEF ! coefficients (m/s)
233 !
234 REAL, DIMENSION(KI) :: ZALFAU ! V+(1) = - alfa rho u'w'(1) + beta
235 REAL, DIMENSION(KI) :: ZBETAU ! V+(1) = - alfa rho u'w'(1) + beta
236 REAL, DIMENSION(KI) :: ZALFATH ! Th+(1) = - alfa rho w'th'(1) + beta
237 REAL, DIMENSION(KI) :: ZBETATH ! Th+(1) = - alfa rho w'th'(1) + beta
238 REAL, DIMENSION(KI) :: ZALFAQ ! Q+(1) = - alfa rho w'q'(1) + beta
239 REAL, DIMENSION(KI) :: ZBETAQ ! Q+(1) = - alfa rho w'q'(1) + beta
240 !
241  CHARACTER(LEN=1) :: GCOUPLING
242 !
243 REAL, DIMENSION(KI) ::ZCANOPY_DENSITY
244 REAL, DIMENSION(KI) ::ZUW_GROUND
245 REAL, DIMENSION(KI) ::ZDUWDU_GROUND
246 !
247 INTEGER :: JJ, JLAYER, IMASK, JP, JI
248 REAL(KIND=JPRB) :: ZHOOK_HANDLE
249 
250 !-------------------------------------------------------------------------------------
251 !
252 !
253 !* 1. Preliminary computations of the SBL scheme
254 ! ------------------------------------------
255 !
256 IF (lhook) CALL dr_hook('COUPLING_ISBA_CANOPY_N',0,zhook_handle)
257 !
258 IF (io%LCANOPY) THEN
259 !
260 !* 1.1 Updates canopy vertical grid as a function of forcing height
261 ! ------------------------------------------------------------
262 !
263 !* determines where is the forcing level and modifies the upper levels of the canopy grid
264 !
265  zcanopy = 0.
266  CALL canopy_grid_update(ki,zcanopy,puref,sb)
267 !
268 !
269 !
270 !* 1.2 Allocations and initialisations
271 ! -------------------------------
272 !
273 !
274 ! 1.2.1 First time step canopy initialisation
275 !
276  IF(any(sb%XT(:,:) == xundef)) THEN
277  CALL init_isba_sbl(io, k, np, npe, sb, &
278  ptstep, ppa, pps, pta, pqa, prhoa, pu, pv, pdir_sw, &
279  psca_sw, psw_bands, prain, psnow, pzref, puref, iss%XSSO_SLOPE )
280  ENDIF
281 !
282 !* 1.3 Allocations
283 ! -----------
284 !
285  CALL init_forc(zforc_u, zdforc_udu, zforc_e, zdforc_ede, zforc_t, zdforc_tdt, zforc_q, zdforc_qdq )
286 !
287  zsflux_u = 0.
288  zsflux_t = 0.
289  zsflux_q = 0.
290 !
291 !* default :
292 !* no canopy in ISBA scheme
293 !
294  zh = 0.
295  zcanopy_density(:) = 0.
296 !
297 !
298 !
299 !* 1.4 canopy for wind drag only
300 ! -------------------------
301 !
302  IF (io%LCANOPY_DRAG) THEN
303 !* mean canopy height
304 !
305 !* in ecoclimap, height is set retrieved from roughness length (z0/0.13)
306  DO jp = 1,io%NPATCH
307  pk => np%AL(jp)
308  pek => npe%AL(jp)
309  DO jj = 1,pk%NSIZE_P
310  imask = pk%NR_P(jj)
311  zh(imask) = zh(imask) + pk%XPATCH(jj) * pek%XZ0(jj) / 0.13
312  zcanopy_density(imask) = zcanopy_density(imask) + pk%XPATCH(jj) * pek%XLAI(jj)
313  ENDDO
314  ENDDO
315  !
316  DO jj=1,ki
317  zh(jj) = min(zh(jj), sb%XZF(jj,sb%NLVL))
318  IF (zh(jj)<=sb%XDZ(jj,1)) zh(jj) = 0.
319 !
320 !* canopy for wind drag only
321  zuw_ground(jj) = 0.
322  zduwdu_ground(jj) = 0.
323  !
324  ENDDO
325 !
326 !* computes tendencies on wind and Tke due to canopy
327  CALL isba_canopy(io%XCDRAG, ki, sb, zh,zcanopy_density, zuw_ground, &
328  zduwdu_ground, zforc_u, zdforc_udu, zforc_e, zdforc_ede )
329 !
330  ENDIF
331 !
332 !* 1.5 Computes coefficients for implicitation
333 ! ---------------------------------------
334 !
335  zwind = sqrt(pu**2+pv**2)
336  CALL canopy_evol(sb, ki, ptstep, 1, sb%XZ, zwind, pta, pqa, ppa, prhoa, &
337  zsflux_u, zsflux_t, zsflux_q, zforc_u, zdforc_udu, &
338  zforc_e, zdforc_ede, zforc_t, zdforc_tdt, zforc_q, &
339  zdforc_qdq, zlm, zleps, zustar, zalfau, zbetau, zalfath, &
340  zbetath, zalfaq, zbetaq )
341 !
342 !* 1.6 Goes from atmospheric forcing to canopy forcing height
343 ! ------------------------------------------------------
344 !
345  gcoupling ='I'
346 !
347  CALL init_coupling_canopy(sb, ppa, pu, pv, prhoa, zalfau, &
348  zbetau, zalfath, zbetath, zalfaq,&
349  zbetaq, zpa, zta, zqa, zu, zv, &
350  zuref, zzref, zexna, zpew_a_coef,&
351  zpew_b_coef, zpet_a_coef, &
352  zpet_b_coef, zpeq_a_coef, &
353  zpeq_b_coef )
354 !
355 !-------------------------------------------------------------------------------------
356 ELSE
357 !-------------------------------------------------------------------------------------
358 !
359 !* 2. If no canopy scheme is used, forcing is not modified
360 ! ----------------------------------------------------
361 !
362  gcoupling = hcoupling
363 !
364  CALL init_coupling(hcoupling, pps, ppa, pta, pqa, &
365  pu, pv, puref, pzref, &
366  ppew_a_coef, ppew_b_coef, &
367  ppet_a_coef, ppet_b_coef, &
368  ppeq_a_coef, ppeq_b_coef, &
369  zpa, zta, zqa, zu, zv, zuref, &
370  zzref, zpew_a_coef, &
371  zpew_b_coef, zpet_a_coef, &
372  zpet_b_coef, zpeq_a_coef, &
373  zpeq_b_coef )
374 !
375 END IF
376 !
377 !-------------------------------------------------------------------------------------
378 !
379 !* 2. Call of ISBA
380 ! ------------
381 !
382  CALL coupling_isba_n(dtco, ug, u, uss, nag, chi, nchi, dtv, id, ngb, gb, iss,niss, ig, &
383  nig, io, s, k, nk, np, npe, ndst, slt, hprogram, gcoupling, &
384  ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, &
385  pzenith2, zzref, zuref, pzs, zu, zv, zqa, zta, prhoa, psv, pco2, &
386  hsv, prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, zpa, &
387  psftq, psfth, psfts, psfco2, psfu, psfv, ptrad, pdir_alb, &
388  psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, zpew_a_coef, &
389  zpew_b_coef, zpet_a_coef, zpeq_a_coef, zpet_b_coef, zpeq_b_coef, &
390  'OK' )
391 !
392 !-------------------------------------------------------------------------------------
393 !
394 !* 3. End if no canopy is used
395 ! ------------------------
396 !
397 IF (.NOT. io%LCANOPY .AND. lhook) CALL dr_hook('COUPLING_ISBA_CANOPY_N',1,zhook_handle)
398 IF (.NOT. io%LCANOPY) RETURN
399 !
400 !-------------------------------------------------------------------------------------
401 !
402 !* 4. Computes the impact of surface on air
403 ! -------------------------------------
404 !
405  CALL init_forc(zforc_u, zdforc_udu, zforc_e, zdforc_ede, &
406  zforc_t, zdforc_tdt, zforc_q, zdforc_qdq )
407 !
408 zsflux_u = - sqrt(psfu(:)**2+psfv(:)**2) / prhoa(:)
409 zsflux_t(:) = psfth(:) / xcpd * zexna(:) / prhoa(:)
410 zsflux_q(:) = psftq(:)
411 !
412 !-------------------------------------------------------------------------------------
413 !
414 !* 5. Computes the impact of canopy on air
415 ! ------------------------------------
416 !
417 IF (io%LCANOPY_DRAG) THEN
418 !
419  DO jj=1,ki
420  zuw_ground(jj) = -sqrt(psfu(jj)**2+psfv(jj)**2)/ prhoa(jj)
421  zduwdu_ground(jj) = 0.
422  IF (sb%XU(jj,1)/=0.) zduwdu_ground(jj) = 2. * zuw_ground(jj) / sb%XU(jj,1)
423  ENDDO
424 
425 !* computes tendencies on wind and Tke due to canopy and surface
426  CALL isba_canopy(io%XCDRAG, ki, sb, zh, zcanopy_density, zuw_ground, &
427  zduwdu_ground, zforc_u, zdforc_udu, zforc_e, zdforc_ede )
428 
429  zsflux_u = 0. ! surface friction is incorporated in ZFORC_U by ISBA_CANOPY routine
430 !
431 END IF
432 !
433 !-------------------------------------------------------------------------------------
434 !
435 !* 6. Evolution of canopy air due to these impacts
436 ! --------------------------------------------
437 !
438 zwind = sqrt(pu**2+pv**2)
439  CALL canopy_evol(sb, ki, ptstep, 2, sb%XZ, zwind, pta, pqa, ppa, prhoa, &
440  zsflux_u, zsflux_t, zsflux_q, zforc_u, zdforc_udu,zforc_e,&
441  zdforc_ede, zforc_t, zdforc_tdt, zforc_q, zdforc_qdq, zlm,&
442  zleps, zustar, zalfau, zbetau, zalfath, zbetath, zalfaq, &
443  zbetaq )
444 !
445 DO jlayer=1,sb%NLVL-1
446  sb%XLMO(:,jlayer) = sb%XLMO(:,sb%NLVL)
447 ENDDO
448 !
449 ! Momentum fluxes if canopy is used
450 !
451 !* Total friction due to surface averaged friction and averaged canopy drag
452 IF (io%LCANOPY_DRAG) THEN
453  DO jj=1,ki
454  zustar_ground(jj) = sqrt(sqrt(psfu(jj)**2+psfv(jj)**2)/prhoa(jj))
455  IF (zustar_ground(jj)>0.) THEN
456  psfu(jj) = psfu(jj) * zustar(jj)**2/zustar_ground(jj)**2
457  psfv(jj) = psfv(jj) * zustar(jj)**2/zustar_ground(jj)**2
458  ENDIF
459  ENDDO
460 !* Total friction due to surface averaged friction and averaged canopy drag
461  IF (id%O%LSURF_BUDGET) THEN
462  id%D%XFMU = psfu
463  id%D%XFMV = psfv
464  ENDIF
465 END IF
466 !
467 !-------------------------------------------------------------------------------------
468 !
469 !* 7. 2m and 10m diagnostics if canopy is used
470 ! ----------------------------------------
471 !
472 IF (id%O%N2M>=1) CALL init_2m_10m(sb, id%D, pu, pv, zwind, prhoa )
473 !
474 IF (lhook) CALL dr_hook('COUPLING_ISBA_CANOPY_N',1,zhook_handle)
475 !
476 !-------------------------------------------------------------------------------------
477 !
478 END SUBROUTINE coupling_isba_canopy_n
subroutine coupling_isba_canopy_n(DTCO, UG, U, USS, SB, NAG, CHI, NCHI, DTV, ID, NGB, GB, ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine init_coupling(HCOUPLING, PPS, PPA, PTA, PQA, PU, PV, PUREF, PZREF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPET_B_COEF, PPEQ_A_COEF, PPEQ_B_COEF, PPPA, PTTA, PQQA, PUU, PVV, PUUREF, PZZREF, PPEW_AA_COEF, PPEW_BB_COEF, PPET_AA_COEF, PPET_BB_COEF, PPEQ_AA_COEF, PPEQ_BB_COEF)
subroutine init_isba_sbl(IO, K, NP, NPE, SB, PTSTEP, PPA, PPS, PTA, PQA, PRHOA, PU, PV, PDIR_SW, PSCA_SW, PSW_BANDS, PRAIN, PSNOW, PZREF, PUREF, PSSO_SLOPE)
real, save xcpd
Definition: modd_csts.F90:63
subroutine coupling_isba_n(DTCO, UG, U, USS, NAG, CHI, NCHI, DTI, ID, NGB, GB, ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine init_2m_10m(SB, D, PU, PV, PWIND, PRHOA)
real, parameter xundef
subroutine canopy_evol(SB, KI, PTSTEP, KIMPL, PZZ, PWIND, PTA, PQA
Definition: canopy_evol.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine init_forc(PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE, PFORC_T, PDFORC_TDT, PFORC_Q, PDFORC_QDQ)
subroutine isba_canopy(PCDRAG, KI, SB, PHEIGHT, PCANOPY_DENSITY, PUW_GROUND, PDUWDU_GROUND, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE)
Definition: isba_canopy.F90:8
subroutine canopy_grid_update(KI, PH, PZFORC, SB)
subroutine init_coupling_canopy(SB, PPA, PU, PV, PRHOA, PALFAU, PBETAU, PALFATH, PBETATH, PALFAQ, PBETAQ, PPPA, PTTA, PQQA, PUU, PVV, PUUREF, PZZREF, PEXNA, PPEW_AA_COEF, PPEW_BB_COEF, PPET_AA_COEF, PPET_BB_COEF, PPEQ_AA_COEF, PPEQ_BB_COEF)