SURFEX v8.1
General documentation of Surfex
average_diag_evap_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 average_diag_evap_isba_n (OSURF_BUDGETC, DE, DEC, NDE, NDEC, NP, KNPATCH, &
7  OGLACIER, OMEB_PATCH, PTSTEP, PRAIN, PSNOW)
8 !#############################
9 !
10 !
11 !!**** *AVERAGE_DIAG_EVAP_ISBA_n*
12 !!
13 !! PURPOSE
14 !! -------
15 ! Average the cumulated diagnostics from all ISBA tiles
16 !
17 !!** METHOD
18 !! ------
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !! AUTHOR
31 !! ------
32 !! P. Le Moigne * Meteo-France *
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 11/03
37 !! B. Decharme 2008 New diag for the water budget
38 !! B. Decharme 2012 New diag for snow
39 !! carbon
40 !! isab water budget
41 !! 2013 Sublimation
42 !! Subsurface runoff if SGH (DIF option only)
43 !! P. Samuelsson 10/2014: MEB
44 !-------------------------------------------------------------------------------
45 !
46 !* 0. DECLARATIONS
47 ! ------------
48 !
49 USE mode_diag
50 !
52 USE modd_isba_n, ONLY : isba_np_t
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 LOGICAL, INTENT(IN) :: OSURF_BUDGETC
63 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DE
64 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEC
65 TYPE(diag_evap_isba_np_t), INTENT(INOUT) :: NDE
66 TYPE(diag_evap_isba_np_t), INTENT(INOUT) :: NDEC
67 TYPE(isba_np_t), INTENT(INOUT) :: NP
68 INTEGER, INTENT(IN) :: KNPATCH
69 !
70 LOGICAL, INTENT(IN) :: OGLACIER
71 LOGICAL, DIMENSION(:), INTENT(IN) :: OMEB_PATCH
72 !
73 REAL, INTENT(IN) :: PTSTEP ! time step (s)
74 REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! rainfall rate
75 REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! snowfall rate
76 !
77 !
78 !* 0.2 declarations of local variables
79 !
80 INTEGER :: JP ! tile loop counter
81 INTEGER :: JI, IMASK
82 INTEGER :: ISIZE_LMEB_PATCH ! Number of patches where multi-energy balance should be applied
83 REAL(KIND=JPRB) :: ZHOOK_HANDLE
84 !-------------------------------------------------------------------------------
85 !
86 ! 0. Initialization
87 ! --------------
88 !
89 !
90 IF (lhook) CALL dr_hook('AVERAGE_DIAG_EVAP_ISBA_N',0,zhook_handle)
91 !
92 isize_lmeb_patch=count(omeb_patch(:))
93 !
94 ! 1. Surface Energy fluxes
95 ! -----------------------
96 !
97 IF (de%LSURF_EVAP_BUDGET) THEN
98  !
99  CALL init_evap_bud(de)
100  IF (isize_lmeb_patch>0) CALL init_meb_bud(de)
101  !
102  IF(de%LWATER_BUDGET)THEN
103  !
104  CALL init_water_bud(de)
105  !
106  de%XRAINFALL (:) = prain(:) * ptstep
107  de%XSNOWFALL (:) = psnow(:) * ptstep
108  !
109  ENDIF
110  !
111  CALL make_average_evap(de,nde)
112  !
113  ! Ice calving flux
114  !
115  IF(oglacier)THEN
116 
117  de%XICEFLUX(:)= 0.
118  DO jp=1,knpatch
119  DO ji=1,np%AL(jp)%NSIZE_P
120  imask = np%AL(jp)%NR_P(ji)
121  de%XICEFLUX(imask) = de%XICEFLUX(imask) + np%AL(jp)%XPATCH(ji) * nde%AL(jp)%XICEFLUX(ji)
122  END DO
123  END DO
124 
125  END IF
126  !
127 ENDIF
128 !
129 ! 2. Surface Cumulated Energy fluxes
130 ! -------------------------------
131 !
132 IF (osurf_budgetc) THEN
133  !
134  !
135  CALL init_evap_bud(dec)
136  !
137  IF (isize_lmeb_patch>0) THEN
138  CALL init_meb_bud(dec)
139  ENDIF
140  !
141  ! Isba water budget and reservoir time tendencies
142  !
143  IF(de%LWATER_BUDGET)THEN
144  !
145  CALL init_water_bud(dec)
146  !
147  dec%XRAINFALL (:) = dec%XRAINFALL (:) + prain(:) * ptstep
148  dec%XSNOWFALL (:) = dec%XSNOWFALL (:) + psnow(:) * ptstep
149  !
150  ENDIF
151  !
152  CALL make_average_evap(dec,ndec)
153  !
154  ! Ice calving flux
155  !
156  IF(oglacier)THEN
157 
158  dec%XICEFLUX(:)= 0.
159  DO jp=1,knpatch
160  DO ji=1,np%AL(jp)%NSIZE_P
161  imask = np%AL(jp)%NR_P(ji)
162  dec%XICEFLUX(imask) = dec%XICEFLUX(imask) + np%AL(jp)%XPATCH(ji) * ndec%AL(jp)%XICEFLUX(ji)
163  END DO
164  END DO
165 
166  END IF
167 !
168 END IF
169 !
170 IF (lhook) CALL dr_hook('AVERAGE_DIAG_EVAP_ISBA_N',1,zhook_handle)
171 !
172 CONTAINS
173 !
174 SUBROUTINE make_average_evap(DEA,NDEA)
175 !
176 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEA
177 TYPE(diag_evap_isba_np_t), INTENT(INOUT) :: NDEA
178 !
179 REAL(KIND=JPRB) :: ZHOOK_HANDLE
180 IF (lhook) CALL dr_hook('AVERAGE_DIAG_EVAP_ISBA_N:MAKE_AVERAGE_EVAP',0,zhook_handle)
181 !
182 DO jp=1,knpatch
183  DO ji=1,np%AL(jp)%NSIZE_P
184  imask = np%AL(jp)%NR_P(ji)
185  !
186  ! Latent heat of evaporation over the ground
187  dea%XLEG (imask) = dea%XLEG (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLEG(ji)
188  !
189  ! Surface soil ice sublimation
190  dea%XLEGI(imask) = dea%XLEGI(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLEGI(ji)
191  !
192  ! Latent heat of evaporation over vegetation
193  dea%XLEV (imask) = dea%XLEV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLEV(ji)
194  !
195  ! Latent heat of sublimation over snow
196  dea%XLES (imask) = dea%XLES (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLES(ji)
197  !
198  ! Latent heat of evaporation of liquid water over snow
199  dea%XLESL(imask) = dea%XLESL(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLESL(ji)
200  !
201  ! Evaporation from canopy water interception
202  dea%XLER (imask) = dea%XLER (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLER(ji)
203  !
204  ! Evapotranspiration of the vegetation
205  dea%XLETR(imask) = dea%XLETR(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLETR(ji)
206  !
207  ! Blowing snow sublimation (ES or Crocus)
208  dea%XSNDRIFT(imask) = dea%XSNDRIFT(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XSNDRIFT(ji)
209  !
210  ! Soil drainage flux
211  dea%XDRAIN (imask) = dea%XDRAIN (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XDRAIN(ji)
212  !
213  ! Soil lateral subsurface flux
214  dea%XQSB (imask) = dea%XQSB (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XQSB(ji)
215  !
216  ! Supersaturation runoff
217  dea%XRUNOFF(imask) = dea%XRUNOFF(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XRUNOFF(ji)
218  !
219  ! Horton runoff
220  dea%XHORT (imask) = dea%XHORT (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XHORT(ji)
221  !
222  ! Vegetation dripping
223  dea%XDRIP (imask) = dea%XDRIP (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XDRIP(ji)
224  !
225  ! Precipitation intercepted by the vegetation
226  dea%XRRVEG (imask) = dea%XRRVEG (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XRRVEG(ji)
227  !
228  ! Snow melt
229  dea%XMELT (imask) = dea%XMELT (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XMELT(ji)
230  !
231  ! Flood infiltartion
232  dea%XIFLOOD(imask) = dea%XIFLOOD(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XIFLOOD(ji)
233  !
234  ! Precipitation intercepted by the floodplains
235  dea%XPFLOOD(imask) = dea%XPFLOOD(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XPFLOOD(ji)
236  !
237  ! Floodplains evaporation
238  dea%XLE_FLOOD (imask) = dea%XLE_FLOOD (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLE_FLOOD (ji)
239  dea%XLEI_FLOOD(imask) = dea%XLEI_FLOOD(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLEI_FLOOD(ji)
240  !
241  ! irrigation rate (as soil input)
242  dea%XIRRIG_FLUX(imask) = dea%XIRRIG_FLUX(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XIRRIG_FLUX(ji)
243  !
244  ! Gross primary production
245  dea%XGPP (imask) = dea%XGPP (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XGPP(ji)
246  !
247  ! Autotrophic respiration
248  dea%XRESP_AUTO(imask) = dea%XRESP_AUTO(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XRESP_AUTO(ji)
249  !
250  ! Ecosystem respiration
251  dea%XRESP_ECO (imask) = dea%XRESP_ECO (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XRESP_ECO(ji)
252  !
253  IF (isize_lmeb_patch>0) THEN
254  dea%XLELITTER (imask) = dea%XLELITTER (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLELITTER (ji)
255  dea%XLELITTERI(imask) = dea%XLELITTERI(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLELITTERI(ji)
256  dea%XDRIPLIT (imask) = dea%XDRIPLIT (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XDRIPLIT (ji)
257  dea%XRRLIT (imask) = dea%XRRLIT (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XRRLIT (ji)
258 
259  dea%XLEV_CV (imask) = dea%XLEV_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLEV_CV (ji)
260  dea%XLES_CV (imask) = dea%XLES_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLES_CV (ji)
261  dea%XLETR_CV (imask) = dea%XLETR_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLETR_CV (ji)
262  dea%XLER_CV (imask) = dea%XLER_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLER_CV (ji)
263  dea%XLE_CV (imask) = dea%XLE_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLE_CV (ji)
264  dea%XH_CV (imask) = dea%XH_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XH_CV (ji)
265  dea%XMELT_CV (imask) = dea%XMELT_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XMELT_CV (ji)
266  dea%XFRZ_CV (imask) = dea%XFRZ_CV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XFRZ_CV (ji)
267 
268  dea%XLETR_GV (imask) = dea%XLETR_GV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLETR_GV (ji)
269  dea%XLER_GV (imask) = dea%XLER_GV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLER_GV (ji)
270  dea%XLE_GV (imask) = dea%XLE_GV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLE_GV (ji)
271  dea%XH_GV (imask) = dea%XH_GV (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XH_GV (ji)
272 
273  dea%XLE_GN (imask) = dea%XLE_GN (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLE_GN (ji)
274  dea%XEVAP_GN (imask) = dea%XEVAP_GN (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XEVAP_GN (ji)
275  dea%XH_GN (imask) = dea%XH_GN (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XH_GN (ji)
276  dea%XSR_GN (imask) = dea%XSR_GN (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XSR_GN (ji)
277  dea%XSWDOWN_GN(imask) = dea%XSWDOWN_GN(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XSWDOWN_GN(ji)
278  dea%XLWDOWN_GN(imask) = dea%XLWDOWN_GN(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLWDOWN_GN(ji)
279 
280  dea%XEVAP_G (imask) = dea%XEVAP_G (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XEVAP_G (ji)
281  dea%XLE_CA (imask) = dea%XLE_CA (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLE_CA (ji)
282  dea%XH_CA (imask) = dea%XH_CA (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XH_CA (ji)
283 
284  dea%XSWNET_V (imask) = dea%XSWNET_V (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XSWNET_V(ji)
285  dea%XSWNET_G (imask) = dea%XSWNET_G (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XSWNET_G(ji)
286  dea%XSWNET_N (imask) = dea%XSWNET_N (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XSWNET_N(ji)
287  dea%XSWNET_NS (imask) = dea%XSWNET_NS (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XSWNET_NS(ji)
288  dea%XLWNET_V (imask) = dea%XLWNET_V (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLWNET_V(ji)
289  dea%XLWNET_G (imask) = dea%XLWNET_G (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLWNET_G(ji)
290  dea%XLWNET_N (imask) = dea%XLWNET_N (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XLWNET_N(ji)
291  ENDIF
292  END DO
293 ENDDO
294 !
295 ! Isba water budget and reservoir time tendencies
296 !
297 IF(de%LWATER_BUDGET)THEN
298  !
299  DO jp=1,knpatch
300  DO ji=1,np%AL(jp)%NSIZE_P
301  imask = np%AL(jp)%NR_P(ji)
302  !
303  dea%XDWG (imask) = dea%XDWG (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XDWG (ji)
304  dea%XDWGI (imask) = dea%XDWGI (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XDWGI (ji)
305  dea%XDWR (imask) = dea%XDWR (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XDWR (ji)
306  dea%XDSWE (imask) = dea%XDSWE (imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XDSWE (ji)
307  dea%XWATBUD(imask) = dea%XWATBUD(imask) + np%AL(jp)%XPATCH(ji) * ndea%AL(jp)%XWATBUD(ji)
308 
309  ENDDO
310  ENDDO
311 !
312 ENDIF
313 !
314 IF (lhook) CALL dr_hook('AVERAGE_DIAG_EVAP_ISBA_N:MAKE_AVERAGE_EVAP',1,zhook_handle)
315 !
316 END SUBROUTINE make_average_evap
317 !
318 !-------------------------------------------------------------------------------
319 !
320 END SUBROUTINE average_diag_evap_isba_n
subroutine average_diag_evap_isba_n(OSURF_BUDGETC, DE, DEC, NDE, NDEC, NP, KNPATCH, OGLACIER, OMEB_PATCH, PTSTEP, PRAIN, PSNOW)
subroutine init_meb_bud(DEA)
Definition: mode_diag.F90:495
subroutine init_water_bud(DEA)
Definition: mode_diag.F90:546
subroutine make_average_evap(DEA, NDEA)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine init_evap_bud(DEA)
Definition: mode_diag.F90:441
logical lhook
Definition: yomhook.F90:15
static int count
Definition: memory_hook.c:21