SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
e_budget.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 e_budget(HISBA, HSNOW_ISBA, OFLOOD, OTEMP_ARP, HIMPLICIT_WIND, &
7  ptstep, psodelx, puref, ppew_a_coef, ppew_b_coef, &
8  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
9  pvmod, pcd, &
10  ptg, ptsm, pt2m, psnowalbm, &
11  psw_rad, plw_rad, pta, pqa, pps, prhoa, &
12  pexns, pexna, pcps, plvtt, plstt, &
13  pveg, phug, phui, phv, &
14  pleg_delta, plegi_delta, &
15  pemis, palb, pra, &
16  pct, pcg, ppsn, ppsnv, ppsng, &
17  pgrndflux, pflux_cor, &
18  pd_g, pdzg, pdzdif, psoilcondz, psoilhcapz, &
19  palbt, pemist, pqsat, pdqsat, &
20  pfrozen1, ptdeep_a, ptdeep_b, pgammat, &
21  pta_ic, pqa_ic, pustar2_ic, &
22  psnowfree_alb_veg, ppsnv_a,psnowfree_alb_soil, &
23  pffg, pffv, pff, pffrozen, pfalb, pfemis, pdeep_flux,&
24  prestore )
25 ! ##########################################################################
26 !
27 !!**** *E_BUDGET*
28 !!
29 !! PURPOSE
30 !! -------
31 !
32 ! Calculates the evolution of the surface and deep-soil temperature
33 ! (i.e., Ts and T2), as well as all the surface fluxes.
34 !
35 !
36 !!** METHOD
37 !! ------
38 !
39 ! 1- find the grid-averaged albedo, emissivity, and roughness length
40 ! 2- compute the za, zb, and zc terms involved in the numerical
41 ! resolution of the equations for Ts and T2.
42 ! 3- find Ts(t) and T2(t).
43 ! 4- derive the surface fluxes.
44 !
45 !! EXTERNAL
46 !! --------
47 !!
48 !! none
49 !!
50 !! IMPLICIT ARGUMENTS
51 !! ------------------
52 !!
53 !!
54 !!
55 !! REFERENCE
56 !! ---------
57 !!
58 !! Noilhan and Planton (1989)
59 !! Belair (1995)
60 !!
61 !! AUTHOR
62 !! ------
63 !!
64 !! S. Belair * Meteo-France *
65 !!
66 !! MODIFICATIONS
67 !! -------------
68 !! Original 14/03/95
69 !! (J.Stein) 15/11/95 use the wind components in the flux computation
70 !! (J.Noilhan) 15/03/96 use the potential temperature instead of the
71 !! temperature for the heat flux computation
72 !! (J.Stein) 27/03/96 use only H and LE in the soil scheme
73 !! (A.Boone, V.Masson) 28/08/98 splits the routine in two for C02 computations
74 !! (A.Boone) 15/03/99 Soil ice tendencies calculated here: heating/cooling
75 !! affects surface and deep soil temperatures.
76 !! (A. Boone, V. Masson) 01/2003 Externalization
77 !! (E. Martin) 07/05 implicit coupling (coeff ZA,ZB,ZC)
78 !! (P. Le Moigne) 07/05 dependence on qs for cp
79 !! (B. Decharme) 05/08 Add floodplains dependencies
80 !! (B. Decharme) 01/09 optional deep soil temperature as in Arpege
81 !! (R. Hamdi) 01/09 Cp and L are not constants (As in ALADIN)
82 !! (B. Decharme) 09/09 When LCPL_ARP, do not calculate x2 each coef
83 !! (A.Boone) 03/10 Add delta fnctions to force LEG ans LEGI=0
84 !! when hug(i)Qsat < Qa and Qsat > Qa
85 !! (B. Decharme) 09/12 new wind implicitation
86 !! (V. Masson) 01/13 Deep soil flux implicitation
87 !! (B. Decharme) 10/14 Bug in DIF composite budget
88 !! Use harmonic mean to compute interfacial thermal conductivities
89 !! "Restore" flux computed here
90 !-------------------------------------------------------------------------------
91 !
92 !* 0. DECLARATIONS
93 ! ------------
94 !
95 USE modd_csts, ONLY : xlvtt, xlstt, xstefan, xcpd, xpi, xday, &
96  xtt, xcl, xcpv, xci
97 USE modd_surf_par, ONLY : xundef
98 USE modd_snow_par, ONLY : xemissn, xemcrin
99 !
100 USE modd_surf_atm, ONLY : lcpl_arp, lqvnplus
101 !
102 USE mode_thermos
103 !
104 USE modi_soil_heatdif
105 USE modi_soil_temp_arp
106 !
107 USE yomhook ,ONLY : lhook, dr_hook
108 USE parkind1 ,ONLY : jprb
109 !
110 IMPLICIT NONE
111 !
112 !* 0.1 declarations of arguments
113 !
114 !
115 !
116  CHARACTER(LEN=*), INTENT(IN) :: hisba ! type of soil (Force-Restore OR Diffusion)
117 ! ! '2-L'
118 ! ! '3-L'
119 ! ! 'DIF' ISBA-DF
120 !
121  CHARACTER(LEN=*), INTENT(IN) :: hsnow_isba ! 'DEF' = Default F-R snow scheme
122 ! ! (Douville et al. 1995)
123 ! ! '3-L' = 3-L snow scheme (option)
124 ! ! (Boone and Etchevers 2000)
125 LOGICAL, INTENT(IN) :: oflood ! Activation of the flooding scheme
126 LOGICAL, INTENT(IN) :: otemp_arp ! True = time-varying force-restore soil temperature (as in ARPEGE)
127  ! False = No time-varying force-restore soil temperature (Default)
128 !
129  CHARACTER(LEN=*), INTENT(IN) :: himplicit_wind ! wind implicitation option
130 ! ! 'OLD' = direct
131 ! ! 'NEW' = Taylor serie, order 1
132 !
133 REAL, INTENT(IN) :: ptstep
134 ! timestep of the integration
135 !!
136 REAL, DIMENSION(:), INTENT (IN) :: psodelx ! Pulsation for each layer (Only used if LTEMP_ARP=True)
137 
138 !
139 REAL, DIMENSION(:), INTENT(IN) :: puref ! reference height of the wind
140 REAL, DIMENSION(:), INTENT(IN) :: psnowalbm
141 ! prognostic variables at time 't-dt'
142 ! PSNOWALBM = albedo of the snow
143 !
144 !
145 REAL, DIMENSION(:), INTENT (IN) :: psw_rad, plw_rad, pps, prhoa, pta, pqa, pcd, pvmod
146 ! PSW_RAD = incoming solar radiation
147 ! PLW_RAD = atmospheric infrared radiation
148 ! PRHOA = near-ground air density
149 ! PPS = surface pressure
150 ! PTA = near-ground air temperature
151 ! PQA = near-ground air specific humidity
152 ! PCD = drag coefficient
153 ! PVMOD = wind speed
154 !
155 ! implicit atmospheric coupling coefficients:
156 !
157 REAL, DIMENSION(:), INTENT(IN) :: ppew_a_coef, ppew_b_coef, &
158  ppet_a_coef, ppeq_a_coef, ppet_b_coef, &
159  ppeq_b_coef
160 ! PPEW_A_COEF = A-wind coefficient (m2s/kg)
161 ! PPEW_B_COEF = B-wind coefficient (m/s)
162 ! PPET_A_COEF = A-air temperature coefficient
163 ! PPET_B_COEF = B-air temperature coefficient
164 ! PPEQ_A_COEF = A-air specific humidity coefficient
165 ! PPEQ_B_COEF = B-air specific humidity coefficient
166 !
167 REAL, DIMENSION(:), INTENT(IN) :: pexns, pexna
168 REAL, DIMENSION(:), INTENT(IN) :: pveg, phug, phui, phv
169 REAL, DIMENSION(:), INTENT(IN) :: pemis, palb, pct, pcg
170 REAL, DIMENSION(:), INTENT(IN) :: ppsnv, ppsng, ppsn
171 ! PVEG = fraction of vegetation
172 ! PHUG = relative humidity of the soil
173 ! PHV = Halstead coefficient
174 ! PEMIS = emissivity
175 ! PALB = albedo
176 ! PCT = area-averaged heat capacity
177 ! PCG = heat capacity of the ground
178 ! PPSN = grid fraction covered by snow
179 ! PPSNV = fraction of the vegetation covered by snow
180 ! PPSNG = fraction of the ground covered by snow
181 !
182 REAL, DIMENSION(:), INTENT(IN) :: pfrozen1
183 ! PFROZEN1 = ice fraction in supurficial soil
184 !
185 REAL, DIMENSION(:), INTENT(IN) :: ptdeep_a, ptdeep_b, pgammat
186 ! PTDEEP_A = Deep soil temperature
187 ! coefficient depending on flux
188 ! PTDEEP_B = Deep soil temperature (prescribed)
189 ! which models heating/cooling from
190 ! below the diurnal wave penetration
191 ! (surface temperature) depth. If it
192 ! is FLAGGED as undefined, then the zero
193 ! flux lower BC is applied.
194 ! Tdeep = PTDEEP_B + PTDEEP_A * PDEEP_FLUX
195 ! (with PDEEP_FLUX in W/m2)
196 ! PGAMMAT = Deep soil heat transfer coefficient:
197 ! assuming homogeneous soil so that
198 ! this can be prescribed in units of
199 ! (1/days): associated time scale with
200 ! PTDEEP.
201 !
202 REAL, DIMENSION(:), INTENT(IN) :: pgrndflux
203 ! PGRNDFLUX = soil/snow interface flux (W/m2) using
204 ! ISBA-SNOW3L option
205 !
206 REAL, DIMENSION(:,:), INTENT(IN) :: pflux_cor
207 ! PFLUX_COR = correction flux to conserve energy (W/m2)
208 !
209 REAL, DIMENSION(:,:), INTENT(IN) :: pd_g, psoilcondz, psoilhcapz
210 ! PD_G = Depth of bottom of Soil layers (m)
211 ! PSOILCONDZ= ISBA-DF Soil conductivity profile [W/(m K)]
212 ! PSOILHCAPZ=ISBA-DF Soil heat capacity profile [J/(m3 K)]
213 REAL, DIMENSION(:,:), INTENT(IN) :: pdzg ! soil layers thicknesses (DIF option) (m)
214 REAL, DIMENSION(:,:), INTENT(IN) :: pdzdif ! distance between consecuative layer mid-points (DIF option) (m)
215 !
216 !
217 REAL, DIMENSION(:), INTENT(IN) :: psnowfree_alb_veg !snow free albedo of vegetation for EBA
218 REAL, DIMENSION(:), INTENT(IN) :: psnowfree_alb_soil !snow free albedo of soil for EBA option
219 REAL, DIMENSION(:), INTENT(IN) :: ppsnv_a !fraction of the the vegetation covered by snow for EBA scheme
220 !
221 REAL, DIMENSION(:), INTENT(INOUT) :: pleg_delta, plegi_delta
222 ! PLEG_DELTA = soil evaporation delta fn
223 ! PLEGI_DELTA = soil evaporation delta fn
224 !
225 REAL, DIMENSION(:), INTENT (OUT) :: pqa_ic, pta_ic, pustar2_ic
226 ! PTA_IC = near-ground air temperature
227 ! PQA_IC = near-ground air specific humidity
228 ! PUSTAR2_IC = near-ground wind friction (m2/s2)
229 ! (modified if implicit coupling with
230 ! atmosphere used)
231 !
232 REAL, DIMENSION(:), INTENT(IN) :: pra
233 ! PRA = aerodynamic surface resistance for
234 ! heat transfers
235 !
236 REAL, DIMENSION(:,:), INTENT(INOUT):: ptg
237 ! PTG = soil temperature profile (K)
238 !
239 REAL, DIMENSION(:), INTENT (IN) :: ptsm, pt2m
240 ! PTSM = surface temperature at start
241 ! of time step (K)
242 ! PT2M = mean surface (or restore) temperature at start
243 ! of time step (K)
244 !
245 REAL, DIMENSION(:), INTENT(INOUT) :: pcps
246 ! PCPS = heat capacity at surface
247 !
248 REAL, DIMENSION(:), INTENT(OUT) :: palbt, pemist, pdqsat
249 ! PALBT = averaged albedo
250 ! PEMIST = averaged emissivity
251 ! PDQSAT = saturation vapor humidity derivative
252 REAL, DIMENSION(:), INTENT(IN) :: pqsat
253 ! PQSAT = saturation vapor humidity
254 !
255 REAL, DIMENSION(:), INTENT(IN) :: pffv, pff, pffg, pfalb, pfemis, pffrozen
256 ! PFFG = Floodplain fraction over ground
257 ! PFFV = Floodplain fraction over vegetation
258 ! PFF = Floodplain fraction at the surface
259 ! PFALB = Floodplain albedo
260 ! PFEMIS= Floodplain emis
261 !
262 REAL, DIMENSION(:), INTENT(INOUT) :: plstt, plvtt
263 !
264 REAL, DIMENSION(:), INTENT(OUT) :: pdeep_flux ! Heat flux at bottom of ISBA (W/m2)
265 !
266 REAL, DIMENSION(:), INTENT(OUT) :: prestore
267 ! PRESTORE = surface restore flux (W m-2)
268 !
269 !* 0.2 declarations of local variables
270 !
271 !
272 REAL, DIMENSION(SIZE(PALB)) :: zrora, &
273 ! rhoa / ra
274 !
275  za,zb,zc
276 ! terms for the calculation of Ts(t)
277 !
278 ! ISBA-DF:
279 !
280 REAL, DIMENSION(SIZE(PALB)) :: zcondavg, zcond1, zcond2, zterm2, zterm1
281 !
282 ! implicit atmospheric coupling coefficients: (modified-form)
283 !
284 REAL, DIMENSION(SIZE(PALB)) :: zpet_a_coef, zpeq_a_coef, zpet_b_coef, &
285  zpeq_b_coef, z_ccoef, zhums, zhuma, zlavg, &
286  zhumsd, zhumad
287 ! ZPET_A_COEF = A-air temperature coefficient
288 ! ZPET_B_COEF = B-air temperature coefficient
289 ! ZPEQ_A_COEF = A-air specific humidity coefficient
290 ! ZPEQ_B_COEF = B-air specific humidity coefficient
291 ! Z_CCOEF = C-working variable
292 !
293 REAL, DIMENSION(SIZE(PALB)) :: zustar2, zvmod
294 ! ZUSTAR2 = friction (m2/s2)
295 ! ZVMOD = wind modulus (m/s)
296 REAL, DIMENSION(SIZE(PALB)) :: zxcpv_xcl_avg
297 REAL, DIMENSION(SIZE(PALB)) :: zcnhuma, zpeqa2, zdpqb, zcdqsat, zincr, ztrad, &
298  zchums, zchuma, zpeta2, zpetb2,ztemp, zfgnfrz, &
299  zfgfrz, zfv, zfg, zfnfrz, zffrz, zfnsnow, zcps,&
300  zlvtt, zlstt
301 REAL :: zsnow
302 !
303 REAL(KIND=JPRB) :: zhook_handle
304 !
305 !-------------------------------------------------------------------------------
306 !
307 !* 0. Initialization:
308 ! ---------------
309 !
310 IF (lhook) CALL dr_hook('E_BUDGET',0,zhook_handle)
311 !
312 zcondavg(:) = 0.0
313 zterm2(:) = 0.0
314 zterm1(:) = 0.0
315 zhumsd(:) = 0.0
316 zhumad(:) = 0.0
317 !
318 !-------------------------------------------------------------------------------
319 !
320 !* 1. COEFFICIENTS FOR THE TIME INTEGRATION OF TS
321 ! --------------------------------------------
322 !
323 !
324 ! function dqsat(Ts,ps)
325 !
326 pdqsat(:) = dqsat(ptg(:,1),pps(:),pqsat(:))
327 ! function zrsra
328 !
329 ! Modify flux-form implicit coupling coefficients:
330 ! - wind components:
331 !
332 ztemp(:) = pcd(:)*pvmod(:)
333 !
334 IF(himplicit_wind=='OLD')THEN
335 ! old implicitation (m2/s2)
336  zustar2(:) = ztemp(:) * ppew_b_coef(:) / (1.0- ztemp(:)*prhoa(:)*ppew_a_coef(:))
337 ELSE
338 ! new implicitation (m2/s2)
339  zustar2(:) = ztemp(:) * (2.*ppew_b_coef(:)-pvmod(:)) / (1.0-2.0*ztemp(:)*prhoa(:)*ppew_a_coef(:))
340 ENDIF
341 !
342 !wind modulus at t+1 (m/s)
343 zvmod(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
344 zvmod(:) = max(zvmod(:),0.)
345 !
346 WHERE(ppew_a_coef(:)/= 0.)
347  zustar2(:) = max( ( zvmod(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef(:)), 0.)
348 ENDWHERE
349 !
350 zustar2(:) = max(zustar2(:),0.)
351 !
352 zrora(:) = prhoa(:) / pra(:)
353 !
354 ! terms za, zb, and zc for the
355 ! calculation of ts(t)
356 !
357 ! Modify flux-form implicit coupling coefficients:
358 ! - air temperature:
359 !
360 ztemp(:) = ppet_a_coef(:)*zrora(:)
361 z_ccoef(:) = (1.0 - ztemp(:))/pexna(:)
362 !
363 zpet_a_coef(:) = - ztemp(:)/pexns(:)/z_ccoef(:)
364 !
365 zpet_b_coef(:) = ppet_b_coef(:)/z_ccoef(:)
366 !
367 !-------------------------------------------------------------------------------
368 !
369 !* 2. AIR AND SOIL SPECIFIC HUMIDITIES
370 ! --------------------------------
371 !
372 ! - air specific humidity:
373 !
374 zfv(:) = pveg(:) * (1-ppsnv(:)-pffv(:))
375 zfg(:) = (1.-pveg(:))*(1.-ppsng(:)-pffg(:))
376 zfnfrz(:) = (1.-pffrozen(:))*pff(:) + zfv + zfg(:)*(1.-pfrozen1(:))
377 zffrz(:) = pffrozen(:)*pff(:) + zfg(:)*pfrozen1(:) + ppsn(:)
378 !
379 zsnow=1.
380 zfnsnow(:)=1.
381 zcps(:)=pcps(:)
382 !
383 IF (lcpl_arp) THEN
384 
385  ! currently this correction not applied for this option, but can be
386  ! added later after testing...so delta fns set to 1 (turns OFF this correction)
387 
388  pleg_delta(:) = 1.0
389  plegi_delta(:) = 1.0
390 
391  zlavg(:) = plvtt(:)*zfnfrz(:) + plstt(:)*zffrz(:)
392  zxcpv_xcl_avg(:)= (xcpv-xcl)*zfnfrz(:) + (xcpv-xci)*zffrz(:)
393 
394  zlvtt(:) = zlavg(:)
395  zlstt(:) = zlavg(:)
396 
397 ELSE
398 
399  IF(hsnow_isba == '3-L' .OR. hsnow_isba == 'CRO' .OR. hisba == 'DIF')THEN
400  zsnow = 0.
401  zfnsnow(:) = 1. - ppsn(:)
402  zcps(:)=xcpd
403  ENDIF
404 
405  zlavg(:) = xlvtt*zfnfrz(:) + xlstt*zffrz(:)
406 
407  zlvtt(:) = xlvtt
408  zlstt(:) = xlstt
409 
410 ENDIF
411 !
412 zfgnfrz(:) = zfg(:)*(1.-pfrozen1(:))*pleg_delta(:)
413 zfgfrz(:) = zfg(:)*pfrozen1(:)*plegi_delta(:)
414 !
415 zhuma(:) = zlvtt(:)/zlavg(:) * ((1.-pffrozen(:))*pff(:) + zfv(:)*phv(:) + zfgnfrz(:)) + &
416  zlstt(:)/zlavg(:) * (pffrozen(:)*pff(:) + zfgfrz(:) + zsnow*ppsn(:) )
417 !
418 zhums(:) = zlvtt(:)/zlavg(:) * ((1.-pffrozen(:))*pff(:) + zfv(:)*phv(:) + zfgnfrz(:)*phug(:)) + &
419  zlstt(:)/zlavg(:) * (pffrozen(:)*pff(:) + zfgfrz(:)*phui(:) + zsnow*ppsn(:) )
420 !
421 IF(hsnow_isba == '3-L' .OR. hsnow_isba == 'CRO' .OR. hisba == 'DIF')THEN
422 !
423 ! humidity considering no snow (done elsewhere) and flooded zones:
424 !
425  zhumad(:) = pff(:) + zfv(:)*phv(:) + zfgnfrz(:) + zfgfrz(:)
426  zhumsd(:) = pff(:) + zfv(:)*phv(:) + zfgnfrz(:)*phug(:) + zfgfrz(:)*phui(:)
427 ELSE
428  zhumad(:) = zhuma(:)
429  zhumsd(:) = zhums(:)
430 ENDIF
431 !
432 !-------------------------------------------------------------------------------
433 !
434 !* 3. COEFFICIENTS FOR THE TIME INTEGRATION OF Q
435 ! -------------------------------------------
436 !
437 ! implicit q coefficients:
438 !
439 ztemp(:) = ppeq_a_coef(:)*zrora(:)
440 z_ccoef(:) = 1.0 - ztemp(:)*zhumad(:)
441 !
442 zpeq_a_coef(:) = - ztemp(:)*pdqsat(:)*zhumsd(:)/z_ccoef(:)
443 !
444 zpeq_b_coef(:) = ( ppeq_b_coef(:) - ztemp(:)*zhumsd(:)* &
445  (pqsat(:) - pdqsat(:)*ptg(:,1)) )/z_ccoef(:)
446 !
447 !-------------------------------------------------------------------------------
448 !
449 !* 4. TOTAL ALBEDO AND EMISSIVITY
450 ! ---------------------------
451 !
452 !
453 IF(hsnow_isba == '3-L' .OR. hsnow_isba == 'CRO' .OR. hisba == 'DIF')THEN
454 !
455 ! NON-SNOW covered Grid averaged albedo and emissivity for explicit
456 ! snow scheme
457 !
458  IF(.NOT.oflood)THEN
459 !
460  palbt(:) = palb(:)
461  pemist(:) = pemis(:)
462 !
463  ELSE
464 !
465 ! Taking into account the floodplains with snow grid fractions :
466 ! PFF 1.-PFF-PPSN PPSN
467 ! |------------|----|---------------|
468 !
469  WHERE(ppsn(:)<1.0)
470  palbt(:) = ((1.-pff(:)-ppsn(:))*palb(:) + pff(:)*pfalb(:))/(1.-ppsn(:))
471  pemist(:) = ((1.-pff(:)-ppsn(:))*pemis(:) + pff(:)*pfemis(:))/(1.-ppsn(:))
472  ELSEWHERE
473  palbt(:) = palb(:)
474  pemist(:) = pemis(:)
475  ENDWHERE
476 !
477  ENDIF
478 !
479 !
480 ELSE
481 !
482 ! Grid averaged albedo and emissivity for composite snow scheme:
483 !
484  IF(hsnow_isba=='EBA') THEN
485 !
486  palbt(:) = (1-pveg(:))*(psnowfree_alb_soil(:)*(1-ppsng(:))+psnowalbm(:)*ppsng(:)) + &
487  pveg(:)*(psnowfree_alb_veg(:)*(1-ppsnv_a(:)) + &
488  psnowalbm(:)*ppsnv_a(:))
489 !
490  pemist(:) = pemis(:)-ppsn(:)*(pemis(:)-xemcrin)
491 !
492  ELSE
493 !
494  palbt(:) = ( 1.-ppsn(:)-pff(:))*palb(:) + ppsn(:)*psnowalbm(:) + pff(:)*pfalb(:)
495 !
496  pemist(:) = ( 1.-ppsn(:)-pff(:))*pemis(:) + ppsn(:)*xemissn + pff(:)*pfemis(:)
497 !
498  ENDIF
499 
500 ENDIF
501 !
502 !-------------------------------------------------------------------------------
503 !
504 !* 5. CALCULATION OF ZA, ZB, ZC
505 ! -----------------------------
506 !
507 ! 5.1. Default
508 ! ------------
509 !
510 ztrad(:) = pemist(:) * xstefan * (ptg(:,1)**3)
511 zchums(:) = zrora(:)*zlavg(:)*zhums(:)
512 zchuma(:) = zrora(:)*zlavg(:)*zhuma(:)
513 !
514 zpeta2(:) = 1./pexns(:) - zpet_a_coef(:)/pexna(:)
515 zpetb2(:) = zpet_b_coef(:)/pexna(:)
516 !
517 ! Surface Energy Budget linearization coefficients for an explicit
518 ! soil-flood-vegetation energy budget with an insulating fractional overlying
519 ! layer of snow: fluxes partitioned between surface "felt" by atmosphere
520 ! and surface in contact with base of snowpack (flux exchange between
521 ! atmosphere and snow surface calculated in explicit snow routine)
522 ! (Boone and Etchevers, 2001, J Hydromet.)
523 ! NOTE for now, the meltwater advection term (heat source/sink)
524 ! is OFF because the corresponding energy should be compensated for
525 ! (but code is retained for possible future activation).
526 !
527 za(:) = 1. / ptstep + pct(:) * &
528  ((zfnsnow(:) * &
529  ( 4.*ztrad(:) + zrora(:)*zcps(:)*zpeta2(:) )) &
530  + zchums(:)*pdqsat(:) - zchuma(:)*zpeq_a_coef(:)) &
531  + 2. * xpi / xday
532 !
533 zb(:) = 1. / ptstep + pct(:) * ( zfnsnow(:)* 3.*ztrad(:) + zchums(:)*pdqsat(:) )
534 !
535 zc(:) = 2. * xpi * ptg(:,2) / xday + pct(:) * &
536  ( zfnsnow(:) * &
537  ( zrora(:)*zcps(:)*zpetb2(:) &
538  + psw_rad(:)*(1.-palbt(:)) + plw_rad(:)*pemist(:)) &
539  - (zchums(:)*pqsat(:) - zchuma(:)*zpeq_b_coef(:)))
540 !
541 IF(hsnow_isba == '3-L' .OR. hsnow_isba == 'CRO' .OR. hisba == 'DIF')THEN
542 !
543 ! 5.2. With CSNOW=SNOW3L or CSNOW=CRO or HISBA=DIF
544 ! -------------------------------------------------
545 !
546  zc(:) = zc(:) + pct(:)*(ppsn(:)*pgrndflux(:)+pflux_cor(:,1))
547 !
548 ELSEIF (lcpl_arp) THEN
549 !
550 ! 5.3. With Arpege
551 ! ----------------
552 !
553 zcdqsat(:) = (xcpv-xcpd)*zhums(:)*pdqsat(:)
554 zincr(:)= pct(:) * zrora(:) * &
555  (zcdqsat(:) * ( zpeta2(:)*ptg(:,1) - zpetb2(:)) + &
556  zxcpv_xcl_avg(:) * &
557  (zhums(:)*pqsat(:) - zhuma(:) * (zpeq_b_coef(:) + zpeq_a_coef(:) * ptg(:,1))))
558 
559 ! Surface Energy Budget linearization coefficients for a composite
560 ! (soil-vegetation-flood-snow) energy budget: composite fluxes "felt" by
561 ! atmosphere from a mixed soil,snow and vegetation surface:
562 ! (Douville et al. 1995, J. Clim. Dyn.)
563 !
564 
565  za(:) = za(:) + zincr(:)
566 
567  zb(:) = zb(:) + zincr(:)
568 
569  IF (lqvnplus) THEN
570 !
571 ! 5.4. With LQVNPLUS=TRUE
572 ! ------------------------
573 !
574  zcnhuma(:)=(xcpv-xcpd)*(1.-zhuma(:))
575  zpeqa2(:)=zcnhuma(:)*zpeq_a_coef(:)*zpeta2(:)*ptg(:,1)
576  zdpqb(:)=zpeq_b_coef(:)-pqa(:)
577 
578  za(:) = za(:) + pct(:) * zrora(:) * &
579  (2.* zpeqa2(:) + &
580  zcnhuma(:) * (zdpqb(:)*zpeta2(:) - zpeq_a_coef(:)*zpetb2(:) ))
581 
582  zb(:) = zb(:) + pct(:) * zrora(:) * zpeqa2(:)
583 
584  zc(:) = zc(:) + pct(:)*zrora(:)*zcnhuma(:) *zdpqb(:)*zpetb2(:)
585 
586  ENDIF
587 ENDIF
588 !
589 
590 !-------------------------------------------------------------------------------
591 !
592 !* 6. T AT TIME 'T+DT' (before snowmelt or soil ice evolution)
593 ! -----------------
594 !
595 IF(hisba == 'DIF')THEN
596 !
597 ! First determine terms needed for implicit linearization of surface:
598 !
599 ! We use harmonic mean to compute the thermal conductivity at the layers interface
600 !
601  zcond1(:) = pdzg(:,1)/((pdzg(:,1)+pdzg(:,2))*psoilcondz(:,1))
602  zcond2(:) = pdzg(:,2)/((pdzg(:,1)+pdzg(:,2))*psoilcondz(:,2))
603 !
604  zcondavg(:) = 1.0/(zcond1(:)+zcond2(:))
605 !
606  za(:) = za(:) - (2. * xpi / xday) + zcondavg(:)*pcg(:)/pdzdif(:,1)
607  zterm2(:) = zcondavg(:)*pcg(:)/(za(:)*pdzdif(:,1))
608  zterm1(:) = (ptg(:,1)*zb(:) + (zc(:) - (2. * xpi * ptg(:,2) / xday)) )/za(:)
609 !
610 ! Determine the soil temperatures:
611 !
612  CALL soil_heatdif(ptstep,pdzg,pdzdif,psoilcondz, &
613  psoilhcapz,pcg,zterm1,zterm2, &
614  ptdeep_a,ptdeep_b,ptg,pdeep_flux, &
615  pflux_cor )
616 !
617 !
618 ! "Restore" flux here is actually the heat flux between the surface
619 ! and sub-surface layers (W m-2):
620 !
621  prestore(:) = zcondavg(:)*(ptg(:,1)-ptg(:,2))/pdzdif(:,1)
622 !
623 ELSE
624 !
625  IF(otemp_arp)THEN
626 !
627  CALL soil_temp_arp(ptstep,za,zb,zc,pgammat,ptdeep_b,psodelx,ptg)
628 !
629 ! "Restore" flux between surface and deep layer(W m-2):
630  prestore(:)=2.0*xpi*(ptg(:,1)-ptg(:,2))/(pct(:)*xday*psodelx(1)*(psodelx(1)+psodelx(2)))
631 !
632  ELSE
633 !
634  ptg(:,1) = ( ptg(:,1)*zb(:) + zc(:) ) / za(:)
635 !
636  WHERE(ptdeep_b(:) /= xundef .AND. pgammat(:) /= xundef)
637  ptg(:,2) = (ptg(:,2) + (ptstep/xday)*(ptg(:,1) + pgammat(:)*ptdeep_b(:)))/ &
638  (1.+(ptstep/xday)*(1.0+pgammat(:)))
639  ELSEWHERE
640  ptg(:,2) = (ptg(:,2) + (ptstep/xday)*ptg(:,1))/ &
641  (1.+(ptstep/xday) )
642  END WHERE
643 !
644 ! "Restore" flux between surface and deep layer(W m-2):
645  prestore(:) = 2.0*xpi*(ptg(:,1)-pt2m(:))/(pct(:)*xday)
646 !
647  ENDIF
648 !
649 ENDIF
650 !
651 !-------------------------------------------------------------------------------
652 !* 7. TA and QA AT TIME 'T+DT'
653 ! ------------------------
654 ! (QA and TA are only modified by these expressions
655 ! if the implicit atmospheric coupling is used)
656 !
657 pqa_ic(:) = zpeq_a_coef(:)*ptg(:,1) + zpeq_b_coef(:)
658 !
659 pta_ic(:) = zpet_a_coef(:)*ptg(:,1) + zpet_b_coef(:)
660 !
661 pustar2_ic(:) = zustar2(:)
662 !
663 !--------------------------------------------------------------------------------------
664 !* 8. Update of LSTT and LVTT for Arpege
665 ! ----------------------------------
666 !
667 IF (lcpl_arp) THEN
668 
669  IF (.NOT.lqvnplus) THEN
670  pcps(:) = pcps(:) + (xcpv-xcpd) *zhums(:)*pdqsat(:)*(ptg(:,1)-ptsm(:))
671  ENDIF
672 
673 
674  IF (lqvnplus) THEN
675  pcps(:) = pcps(:) + (xcpv-xcpd) *zhums(:)*pdqsat(:)*(ptg(:,1)-ptsm(:)) &
676  + (xcpv-xcpd) *(1-zhuma(:))*(pqa_ic(:)-pqa(:))
677  ENDIF
678 
679  plstt(:) = plstt(:) + (xcpv-xci)*(ptg(:,1)-ptsm(:))
680 
681  plvtt(:) = plvtt(:) + (xcpv-xcl)*(ptg(:,1)-ptsm(:))
682 
683 
684 ENDIF
685 !
686 IF (lhook) CALL dr_hook('E_BUDGET',1,zhook_handle)
687 !
688 !-------------------------------------------------------------------------------
689 !
690 END SUBROUTINE e_budget
subroutine e_budget(HISBA, HSNOW_ISBA, OFLOOD, OTEMP_ARP, HIMPLICIT_WIND, PTSTEP, PSODELX, PUREF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PVMOD, PCD, PTG, PTSM, PT2M, PSNOWALBM, PSW_RAD, PLW_RAD, PTA, PQA, PPS, PRHOA, PEXNS, PEXNA, PCPS, PLVTT, PLSTT, PVEG, PHUG, PHUI, PHV, PLEG_DELTA, PLEGI_DELTA, PEMIS, PALB, PRA, PCT, PCG, PPSN, PPSNV, PPSNG, PGRNDFLUX, PFLUX_COR, PD_G, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ, PALBT, PEMIST, PQSAT, PDQSAT, PFROZEN1, PTDEEP_A, PTDEEP_B, PGAMMAT, PTA_IC, PQA_IC, PUSTAR2_IC, PSNOWFREE_ALB_VEG, PPSNV_A, PSNOWFREE_ALB_SOIL, PFFG, PFFV, PFF, PFFROZEN, PFALB, PFEMIS, PDEEP_FLUX, PRESTORE)
Definition: e_budget.F90:6
subroutine soil_temp_arp(PTSTEP, PA, PB, PC, PGAMMAT, PTDEEP, PSODELX, PTG)
subroutine soil_heatdif(PTSTEP, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ, PCT, PTERM1, PTERM2, PTDEEP_A, PTDEEP_B, PTG, PDEEP_FLUX, PFLUX_COR)
Definition: soil_heatdif.F90:6