SURFEX v8.1
General documentation of Surfex
isba_fluxes_meb.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 isba_fluxes_meb(KK, PK, PEK, DK, DEK, DMK, PRHOA, PLTT, PSIGMA_F,PSIGMA_FN, &
7  PRN_V, PRN_G, PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN, &
8  PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN, PLWNET_N_DTV, &
9  PLWNET_N_DTG, PLWNET_N_DTN, PTHRMA_TA, PTHRMB_TA, &
10  PTHRMA_TC, PTHRMB_TC, PTHRMA_TG, PTHRMB_TG, PTHRMA_TV, &
11  PTHRMB_TV, PTHRMA_TN, PTHRMB_TN, PQSAT_G, PQSAT_V, &
12  PQSATI_N, PPSNA, PPSNCV, PFROZEN1,PLEG_DELTA, &
13  PLEGI_DELTA, PHUGI, PHVG, PHVN, PFLXC_CA, PFLXC_GV, &
14  PFLXC_VG_C, PFLXC_VN_C, PFLXC_GN, PFLXC_N_A, PFLXC_MOM, &
15  PFLXC_CV, PHVGS, PHVNS, PTG, PDQSAT_G, PDQSAT_V, &
16  PDQSATI_N, PTA_IC, PQA_IC, PDELTA_V, PDELTAT_G, &
17  PDELTAT_V, PDELTAT_N, PSW_UP, PSW_RAD, PLW_RAD, PLW_UP, &
18  PH_N_A, PEVAP_C_A, PEVAP_N_A, PLEG, PLEGI, PLES, PLEL, &
19  PEVAPN, PEMIS )
20 ! ##########################################################################
21 !
22 !!**** *ISBA_FLXUES_MEB*
23 !!
24 !! PURPOSE
25 !! -------
26 !
27 ! Calculates the implicit fluxes for implicit or explicit atmospheric
28 ! coupling and fluxes needed by hydrology, soil and snow routines.
29 ! finally, compute soil phase changes.
30 !
31 !
32 !!** METHOD
33 !! ------
34 !
35 !! EXTERNAL
36 !! --------
37 !!
38 !! none
39 !!
40 !! IMPLICIT ARGUMENTS
41 !! ------------------
42 !!
43 !!
44 !!
45 !! REFERENCE
46 !! ---------
47 !!
48 !! Noilhan and Planton (1989)
49 !! Belair (1995)
50 !! * to be done * (2011)
51 !!
52 !! AUTHOR
53 !! ------
54 !!
55 !! A. Boone * Meteo-France *
56 !! P. Samuelsson * SMHI *
57 !! S. Gollvik * SMHI *
58 !!
59 !! MODIFICATIONS
60 !! -------------
61 !! Original 22/01/11
62 !!
63 !-------------------------------------------------------------------------------
64 !
65 !* 0. DECLARATIONS
66 ! ------------
67 !
69 USE modd_diag_n, ONLY : diag_t
72 !
73 USE modd_isba_par, ONLY : xemissoil, xemisveg
74 USE modd_csts, ONLY : xlvtt, xlstt, xstefan
75 !
76 USE modi_isba_emis_meb
77 !
78 USE yomhook ,ONLY : lhook, dr_hook
79 USE parkind1 ,ONLY : jprb
80 !
81 IMPLICIT NONE
82 !
83 TYPE(isba_k_t), INTENT(INOUT) :: KK
84 TYPE(isba_p_t), INTENT(INOUT) :: PK
85 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
86 TYPE(diag_t), INTENT(INOUT) :: DK
87 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEK
88 TYPE(diag_misc_isba_t), INTENT(INOUT) :: DMK
89 !
90 !* 0.1 declarations of arguments
91 !
92 REAL, DIMENSION(:), INTENT(IN) :: PRHOA, PLTT
93 ! PRHOA = reference level air density (kg m-3)
94 ! PLTT = latent heat normalization factor (J kg-1)
95 !
96 REAL, DIMENSION(:), INTENT(IN) :: PSIGMA_F, PSIGMA_FN
97 !
98 REAL, DIMENSION(:), INTENT(IN) :: PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN
99 ! PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN = Vegetation canopy net LW radiation
100 ! derivatives w/r/t surface temperature(s) (W m-2 K-1)
101 !
102 REAL, DIMENSION(:), INTENT(IN) :: PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN
103 ! PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN = Understory-ground net LW radiation
104 ! derivatives w/r/t surface temperature(s) (W m-2 K-1)
105 !
106 REAL, DIMENSION(:), INTENT(IN) :: PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN
107 ! PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN = Ground-based snow net LW radiation
108 ! derivatives w/r/t surface temperature(s) (W m-2 K-1)
109 !
110 REAL, DIMENSION(:), INTENT(IN) :: PTHRMA_TA, PTHRMB_TA, PTHRMA_TC, PTHRMB_TC, &
111  PTHRMA_TG, PTHRMB_TG, PTHRMA_TV, PTHRMB_TV, PTHRMA_TN, PTHRMB_TN
112 ! PTHRMA_TA (J kg-1 K-1)
113 ! PTHRMB_TA = linear transform coefficinets for atmospheric
114 ! thermal variable for lowest atmospheric level. (J kg-1)
115 ! Transform T to dry static energy or enthalpy.
116 ! PTHRMA_TC (J kg-1 K-1)
117 ! PTHRMB_TC = linear transform coefficinets for atmospheric
118 ! thermal variable for canopy air (J kg-1)
119 ! Transform T to dry static energy or enthalpy.
120 ! PTHRMA_TG,V,N (J kg-1 K-1)
121 ! PTHRMB_TG,V,N = linear transform coefficinets for atmospheric
122 ! thermal variable for surfaces (G, V, and N) (J kg-1)
123 ! Transform T to dry static energy or enthalpy.
124 !
125 REAL, DIMENSION(:), INTENT(IN) :: PQSAT_G, PQSAT_V, PQSATI_N
126 ! PQSAT_G = saturation specific humidity for understory surface (kg kg-1)
127 ! PQSAT_V = saturation specific humidity for the vegetation canopy (kg kg-1)
128 ! PQSATI_N = saturation specific humidity over ice for the snowpack (kg kg-1)
129 !
130 REAL, DIMENSION(:), INTENT(IN) :: PPSNA, PPSNCV, PFROZEN1
131 ! PPSNA = fraction of vegetation canopy buried by ground-based snowpack (-)
132 ! PPSNCV = fraction of vegetation canopy covered by intercepted snow (-)
133 ! PFROZEN1 = frozen fraction of surface ground layer (-)
134 !
135 !
136 REAL, DIMENSION(:), INTENT(IN) :: PLEG_DELTA, PLEGI_DELTA, PHUGI, PHVG, PHVN
137 !
138 ! PHVG = Halstead coefficient of non-buried (snow) canopy vegetation (-)
139 ! PHVN = Halstead coefficient of paritally-buried (snow) canopy vegetation (-)
140 !
141 REAL, DIMENSION(:), INTENT(IN) :: PFLXC_CA, PFLXC_GV, PFLXC_VG_C, PFLXC_VN_C, PFLXC_GN, PFLXC_N_A, &
142  PFLXC_CV, PFLXC_MOM
143 ! PFLXC_CA = Flux form heat transfer coefficient: canopy air to atmosphere (kg m-2 s-1)
144 ! PFLXC_GV = As above, but for : ground-understory to canopy air (kg m-2 s-1)
145 ! PFLXC_VG_C = As above, but for : non-snow buried canopy to canopy air (kg m-2 s-1)
146 ! PFLXC_VN_C = As above, but for : partially snow-buried canopy air to canopy
147 ! air (kg m-2 s-1)
148 ! PFLXC_CV = As above, but for : bulk vegetation canopy to canopy air (kg m-2 s-1)
149 ! PFLXC_GN = As above, but for : ground-based snow to atmosphere (kg m-2 s-1)
150 ! PFLXC_N_A = As above, but for : ground-based snow to canopy air (kg m-2 s-1)
151 ! PFLXC_MOM = flux form drag transfer coefficient: canopy air to atmosphere (kg m-2 s-1)
152 !
153 REAL, DIMENSION(:,:), INTENT(IN) :: PTG
154 ! PTG = Soil temperature profile (K)
155 !
156 REAL, DIMENSION(:), INTENT(IN) :: PDQSAT_G, PDQSAT_V, PDQSATI_N
157 ! PQSAT_G = saturation specific humidity derivative for understory
158 ! surface (kg kg-1 K-1)
159 ! PQSAT_V = saturation specific humidity derivative for the vegetation
160 ! canopy (kg kg-1 K-1)
161 ! PQSATI_N = saturation specific humidity derivative over ice for the
162 ! ground-based snowpack (kg kg-1 K-1)
163 !
164 REAL, DIMENSION(:), INTENT(IN) :: PHVGS, PHVNS
165 ! PHVGS = Dimensionless pseudo humidity factor for computing vapor
166 ! fluxes from the non-buried part of the canopy to the canopy air (-)
167 ! PHVNS = Dimensionless pseudo humidity factor for computing vapor
168 ! fluxes from the partly-buried part of the canopy to the canopy air (-)
169 !
170 REAL, DIMENSION(:), INTENT(IN) :: PTA_IC, PQA_IC
171 ! PTA_IC = Near-ground air temperature (K)
172 ! PQA_IC = Near-ground air specific humidity (kg kg-1)
173 !
174 REAL, DIMENSION(:), INTENT(IN) :: PSW_UP, PSW_RAD, PLW_RAD
175 ! PSW_UP = total upwelling shortwave radiation from the surface at the atmosphere (W m-2)
176 ! PSW_RAD = downwelling shortwave radiation from the atmosphere above the canopy (W m-2)
177 ! PLW_RAD = downwelling longwave radiation from the atmosphere above the canopy (W m-2)
178 !
179 REAL, DIMENSION(:), INTENT(IN) :: PDELTA_V
180 ! PDELTA_V = Explicit canopy interception fraction (-)
181 !
182 REAL, DIMENSION(:), INTENT(IN) :: PDELTAT_V, PDELTAT_N, PDELTAT_G
183 ! PDELTAT_V = Time change in vegetation canopy temperature (K)
184 ! PDELTAT_N = Time change in snowpack surface temperature (K)
185 ! PDELTAT_G = Time change in soil surface temperature (K)
186 !
187 REAL, DIMENSION(:), INTENT(OUT) :: PRN_V, PRN_G
188 ! PRN_G = Understory-ground net radiation (W m-2)
189 ! PRN_V = Vegetation canopy net radiation (W m-2)
190 !
191 REAL, DIMENSION(:), INTENT(OUT) :: PLW_UP
192 ! PLW_UP = total net longwave upwelling radiation to the atmosphere (W m-2)
193 !
194 REAL, DIMENSION(:), INTENT(OUT) :: PH_N_A
195 ! PH_N_A = Sensible heat flux: ground based snowpack to overlying atmosphere (W m-2)
196 !
197 REAL, DIMENSION(:), INTENT(OUT) :: PEVAP_C_A, PEVAP_N_A, PEVAPN
198 ! PEVAP_C_A = Water flux: canopy air space to overlying atmosphere (kg m-2 s-1)
199 ! PEVAP_N_A = Water flux: ground based snowpack to overlying atmosphere (kg m-2 s-1)
200 ! PEVAPN = Water flux: ground based snowpack to both canopy air space and overlying atmosphere (kg m-2 s-1)
201 !
202 REAL, DIMENSION(:), INTENT(OUT) :: PLEG, PLEGI, PLES, PLEL
203 ! PLEG = Latent heat flux: baresoil evaporation (W m-2)
204 ! PLEGI = Latent heat flux: baresoil sublimation (W m-2)
205 ! PLES = Latent heat flux: net sublimation from ground-based snowpack to canopy air and overlying atmosphere (W m-2)
206 ! PLEL = Latent heat flux: net evaporation from ground-based snowpack to canopy air and overlying atmosphere (W m-2)
207 !
208 REAL, DIMENSION(:), INTENT(OUT) :: PEMIS
209 ! PEMIS = effective (aggregated) net surface emissivity (-)
210 !
211 !
212 !* 0.2 declarations of local variables
213 !
214 !
215 REAL, DIMENSION(SIZE(PEK%XTV(:))) :: ZWORK
216 ! ZWORK = working array
217 !
218 REAL, DIMENSION(SIZE(PEK%XTV(:))) :: ZSAIR, ZSAIRC
219 ! ZSAIR = atmospheric value of the therodynamic variable
220 ! ZSAIRC = canopy air value of the therodynamic variable
221 !
222 REAL, DIMENSION(SIZE(PEK%XTV(:))) :: ZEVAP_CV
223 ! ZEVAP_CV = Water flux: Evapotranspiration vapor flux from the vegetation canopy (kg m-2 s-1)
224 !
225 REAL, DIMENSION(SIZE(PEK%XTV(:))) :: ZQSATN_V, ZQSATIN_N, ZQSATN_G
226 ! ZQSATN_V = saturation specific humidity (over water) for the vegetation canopy (kg kg-1)
227 ! ZQSATIN_N = saturation specific humidity (over ice) for the snow (kg kg-1)
228 ! NOTE that liquid water can only exist when the snowpack T=XTT in the model,
229 ! and at the freezing point, the value is the same over ice and water, therefore
230 ! over snow, we do not need to explicitly consider a "ZQSATN_N"
231 ! ZQSATN_G = saturation specific humidity (over water) for the understory (kg kg-1)
232 !
233 REAL(KIND=JPRB) :: ZHOOK_HANDLE
234 !-------------------------------------------------------------------------------
235 !
236 !* 0. Initialization:
237 ! ---------------
238 !
239 IF (lhook) CALL dr_hook('ISBA_FLUXES_MEB',0,zhook_handle)
240 !-------------------------------------------------------------------------------
241 !
242 !* 1. Radiative Fluxes
243 ! ----------------
244 !
245 ! LWnet: transform from explicit to implicit (i.e. at time t+dt)
246 !
247 dek%XLWNET_V(:) = dek%XLWNET_V(:) + plwnet_v_dtv(:)*pdeltat_v(:) &
248  + plwnet_v_dtg(:)*pdeltat_g(:) &
249  + plwnet_v_dtn(:)*pdeltat_n(:)
250 
251 dek%XLWNET_G(:) = dek%XLWNET_G(:) + plwnet_g_dtv(:)*pdeltat_v(:) &
252  + plwnet_g_dtg(:)*pdeltat_g(:) &
253  + plwnet_g_dtn(:)*pdeltat_n(:)
254 
255 dek%XLWNET_N(:) = dek%XLWNET_N(:) + plwnet_n_dtv(:)*pdeltat_v(:) &
256  + plwnet_n_dtg(:)*pdeltat_g(:) &
257  + plwnet_n_dtn(:)*pdeltat_n(:)
258 !
259 ! LWup at t+dt
260 !
261 plw_up(:) = plw_rad(:) - (dek%XLWNET_V(:) + dek%XLWNET_G(:) + dek%XLWNET_N(:))
262 !
263 !
264 ! Effective emissivity:
265 !
266  CALL isba_emis_meb(pek%XPSN, ppsna, psigma_f, psigma_fn, pek%TSNOW%EMIS, pemis )
267 !
268 ! Now compute the effective radiative temperature while
269 ! imposing the constraint:
270 !
271 ! LW_RAD * (1 - EMIS ) + EMIS * XSTEFAN * TS_RAD**4 = LWUP
272 !
273 ! Using the effective emissivity ensures that the upwelling radiation from the surface (RHS)
274 ! model will be equal to the upwelling radiation computed in the atmospheric model (LHS)
275 ! (i.e. LWUP is consistent with EMIS & TS_RAD), thereby insuring energy conservation from
276 ! the surface to the atmosphere. Solving the above equation for
277 ! the radiative T gives:
278 !
279 dk%XTSRAD(:) = ((plw_up(:) - plw_rad(:)*(1.0-pemis(:)))/(xstefan*pemis(:)))**0.25
280 !
281 !
282 ! Rnet (t+dt)
283 !
284 prn_v(:) = dek%XSWNET_V(:) + dek%XLWNET_V(:)
285 !
286 prn_g(:) = dek%XSWNET_G(:) + dek%XLWNET_G(:)
287 !
288 dmk%XRNSNOW(:) = dek%XSWNET_N(:) + dek%XLWNET_N(:)
289 !
290 !
291 ! total Rnet (t+dt):
292 !
293 dk%XRN(:) = prn_g(:) + prn_v(:) + dmk%XRNSNOW(:)
294 !
295 !
296 !* 2.a Implicit (Turbulent) Sensible Heat Fluxes
297 ! -----------------------------------------
298 
299 ! First get input thermo variable (could be enthalpy (air heat capacity x potential temperature or dry static energy)
300 
301 zsair(:) = pthrmb_ta(:) + pthrma_ta(:)*pta_ic(:)
302 zsairc(:) = pthrmb_tc(:) + pthrma_tc(:)*pek%XTC(:)
303 
304 ! Sensible heat fluxes (W m-2):
305 ! - Canopy air to atmosphere, vegetation canopy to canopy air (implicitly includes from canopy intercepted snow),
306 ! understory-ground to canopy air,
307 ! ground-based snow to canopy air, ground-based snow to atmosphere:
308 
309 dek%XH_CA(:) = pflxc_ca(:) *( zsairc(:) - zsair(:))*(1.0 - pek%XPSN(:)*ppsna(:))
310 dek%XH_CV(:) = pflxc_cv(:) *( pthrmb_tv(:) + pthrma_tv(:)*pek%XTV(:) - zsairc(:))
311 dek%XH_GV(:) = pflxc_gv(:) *( pthrmb_tg(:) + pthrma_tg(:)*ptg(:,1) - zsairc(:))*(1.0 - pek%XPSN(:))
312 dek%XH_GN(:) = pflxc_gn(:) *( pthrmb_tn(:) + pthrma_tn(:)*dmk%XSNOWTEMP(:,1) - zsairc(:))* pek%XPSN(:) *(1.0-ppsna(:))
313 ph_n_a(:) = pflxc_n_a(:) *( pthrmb_tn(:) + pthrma_tn(:)*dmk%XSNOWTEMP(:,1) - zsair(:))* pek%XPSN(:) * ppsna(:)
314 
315 ! - Net sensible heat flux from ground-based snow (to the canopy and the atmosphere (from
316 ! the buried-vegetation canopy fraction)) (W m-2)
317 
318 dmk%XHSNOW(:) = dek%XH_GN(:) + ph_n_a(:)
319 
320 ! FINAL sensible heat flux to the atmosphere (W m-2):
321 
322 dk%XH(:) = dek%XH_CA(:) + ph_n_a(:)
323 
324 !
325 !* 2.b Implicit (Turbulent) Vapor and Latent Heat Fluxes
326 ! -------------------------------------------------
327 ! Note, to convert any of the latent heat fluxes back to vapor fluxes,
328 ! simply divide by XLVTT, even sublimation fluxes as XLSTT already accounted for.
329 
330 ! - first get 'new' surface specific humidities, qsatn, at time t+dt:
331 
332 zqsatn_g(:) = pqsat_g(:) + pdqsat_g(:) * pdeltat_g(:)
333 zqsatn_v(:) = pqsat_v(:) + pdqsat_v(:) * pdeltat_v(:)
334 zqsatin_n(:) = pqsati_n(:) + pdqsati_n(:) * pdeltat_n(:)
335 
336 ! - Evaporation and Sublimation latent heat fluxes from the soil, respectively:
337 ! (W m-2)
338 
339 zwork(:) = (1.-pek%XPSN(:)-kk%XFF(:)) * pflxc_gv(:)
340 pleg(:) = zwork(:)*pleg_delta(:) *( dk%XHUG(:) *zqsatn_g(:) - pek%XQC(:) )*(1.-pfrozen1(:))*xlvtt
341 plegi(:) = zwork(:)*plegi_delta(:)*( phugi(:) *zqsatn_g(:) - pek%XQC(:) )* pfrozen1(:) *xlstt
342 
343 ! - Latent heat flux from frozen and unfrozen flooded zones (W m-2)
344 
345 zwork(:) = kk%XFF(:) * pflxc_gv(:)*( zqsatn_g(:) - pek%XQC(:) )
346 dek%XLE_FLOOD(:) = zwork(:) * (1.-kk%XFFROZEN(:))* xlvtt
347 dek%XLEI_FLOOD(:) = zwork(:) * kk%XFFROZEN(:) * xlstt
348 
349 ! - Evapotranspiration vapor flux from the vegetation canopy (kg m-2 s-1)
350 
351 zevap_cv(:) = (1.-ppsncv(:)) * phvgs(:) * pflxc_cv(:)*( zqsatn_v(:) - pek%XQC(:) ) * (xlvtt/pltt(:))
352 
353 ! - Latent heat flux from the canopy (liquid) water interception reservoir (W m-2)
354 
355 dek%XLER_CV(:) = ( (1.-ppsna(:))*pek%XPSN(:) * pflxc_vn_c(:) + &
356  (1.-pek%XPSN(:))* pflxc_vg_c(:) ) * &
357  xlvtt * (1.-ppsncv(:))* pdelta_v(:) * ( zqsatn_v(:) - pek%XQC(:) )
358 !
359 ! - Total latent heat flux (evapotranspiration) from the vegetation to the canopy air space (W m-2)
360 ! *without* sublimation (for TOTAL evapotranspiration and sublimation, add PLESC here)
361 
362 dek%XLEV_CV(:) = pltt(:) * zevap_cv(:)
363 !
364 ! - latent heat flux from transpiration from the canopy (W m-2)
365 
366 dek%XLETR_CV(:) = dek%XLEV_CV(:) - dek%XLER_CV(:)
367 
368 ! Snow sublimation and evaporation latent heat flux from canopy-intercepted snow (W m-2)
369 
370 dek%XLES_CV(:) = ppsncv(:) * xlstt * phvns(:) * pflxc_cv(:)*( zqsatn_v(:) - pek%XQC(:) )
371 
372 ! - Total latent heat flux from vegetation canopy overstory to canopy air space
373 ! (including transpiration, liquid water store, canopy snow sublimation):
374 
375 dek%XLE_CV(:) = dek%XLEV_CV(:) + dek%XLES_CV(:)
376 
377 ! - Vapor flux from the ground-based snowpack to the canopy air (kg m-2 s-1):
378 
379 zwork(:) = pflxc_gn(:)*(zqsatin_n(:) - pek%XQC(:))*pek%XPSN(:)*(1.0-ppsna(:))
380 dek%XEVAP_GN(:) = zwork(:)*(xlstt/pltt(:))
381 dek%XLE_GN(:) = zwork(:)* xlstt ! W m-2
382 
383 ! - latent heat flux from transpiration from canopy veg (evapotranspiration)
384 
385 dek%XLETR(:) = dek%XLETR_CV(:)
386 
387 ! Total latent heat flux from transpiration from understory veg and canopy veg (evapotranspiration and sublimation)
388 ! and intercepted water on both reservoirs (W m-2)
389 
390 dek%XLEV(:) = dek%XLETR(:) + dek%XLER_CV(:)
391 
392 ! Total latent heat flux from intercepted water (canopy and understory vegetation):
393 ! (does not include intercepted snow sublimation): W m-2
394 
395 dek%XLER(:) = dek%XLER_CV(:)
396 
397 ! - Vapor flux from the ground-based snowpack (part burying the canopy vegetation) to the atmosphere (kg m-2 s-1):
398 
399 zwork(:) = pflxc_n_a(:) *( zqsatin_n(:) - pqa_ic(:))* pek%XPSN(:)* ppsna(:)
400 pevap_n_a(:) = zwork(:) *(xlstt/pltt)
401 
402 ! - Net Snow (groud-based) sublimation latent heat flux (W m-2) to the canopy air space and the overlying atmosphere:
403 ples(:) = ( pflxc_gn(:) *( zqsatin_n(:) - pek%XQC(:))* pek%XPSN(:)*(1.0-ppsna(:)) + zwork(:) ) * xlstt
404 
405 ! - Net Snow evaporation (liquid water) latent heat flux (W m-2)
406 
407 plel(:) = pltt(:)*(dek%XEVAP_GN(:) + pevap_n_a(:)) - ples(:)
408 
409 ! - Total mass flux from ground-based snowpack (kg m-2 s-1)
410 
411 pevapn(:) = (plel(:) + ples(:))/pltt(:)
412 
413 ! - Total snow-free vapor flux from the understory (flooded areas, baresoil and understory vegetation)
414 ! to the canopy air space (W m-2 and kg m-2 s-1, respectively):
415 
416 dek%XLE_GV(:) = dek%XLE_FLOOD(:) + dek%XLEI_FLOOD(:) + plegi(:) + pleg(:)
417 
418 dek%XEVAP_G(:) = dek%XLE_GV(:)/pltt(:)
419 
420 ! - Net vapor flux from canopy air to the atmosphere (kg m-2 s-1)
421 
422 pevap_c_a(:) = pflxc_ca(:) *( pek%XQC(:) - pqa_ic(:))*(1.0 - pek%XPSN(:)*ppsna(:))
423 
424 dek%XLE_CA(:) = pltt(:) * pevap_c_a(:) ! W m-2
425 
426 ! FINAL net vapor flux from the surface to the Atmosphere:
427 ! - Net vapor flux from canopy air and exposed ground based snow (from part of snow
428 ! burying the vegetation canopy) to the atmosphere (kg m-2 s-1)
429 !
430 dk%XEVAP(:) = pevap_c_a(:) + pevap_n_a(:)
431 !
432 ! Total latent heat flux of surface/snow/vegetation: W m-2
433 !
434 pek%XLE(:) = dk%XEVAP(:)*pltt(:)
435 !
436 ! Total sublimation from the surface/snow/vegetation: W m-2
437 !
438 dk%XLEI(:) = ples(:) + plegi(:) + dek%XLEI_FLOOD(:)
439 !
440 ! Total sublimation from the surface/snow/vegetation: kg m-2 s-1
441 !
442 dk%XSUBL(:) = dk%XLEI(:)/ pltt(:)
443 !
444 IF (lhook) CALL dr_hook('ISBA_FLUXES_MEB',1,zhook_handle)
445 !
446 END SUBROUTINE isba_fluxes_meb
447 
448 
real, save xstefan
Definition: modd_csts.F90:59
real, save xlvtt
Definition: modd_csts.F90:70
real, save xlstt
Definition: modd_csts.F90:71
integer, parameter jprb
Definition: parkind1.F90:32
subroutine isba_fluxes_meb(KK, PK, PEK, DK, DEK, DMK, PRHOA, PLTT,
logical lhook
Definition: yomhook.F90:15
subroutine isba_emis_meb(PPSN, PPSNA, PSIGMA_F, PSIGMA_FN, PEMIS_N, PEMIS)