SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
coupling_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 coupling_isba_n (DTCO, UG, U, USS, IM, DTGD, DTGR, TGRO, DST, SLT, &
7  hprogram, hcoupling, &
8  ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, pzenith2, &
9  pzref, puref, pzs, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
10  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
11  psftq, psfth, psfts, psfco2, psfu, psfv, &
12  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
13  ppew_a_coef, ppew_b_coef, &
14  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
15  htest )
16 ! ###############################################################################
17 !
18 !!**** *COUPLING_ISBA_n * - Driver for ISBA time step
19 !!
20 !! PURPOSE
21 !! -------
22 !
23 !!** METHOD
24 !! ------
25 !!
26 !! First, all actions dependant on each patch is donbe independantly
27 !! (loop on patches)
28 !! Second, actions common to all patches (e.g. prescription of new vegetation)
29 !! Third, energy fluxes are averaged
30 !!
31 !! Nota that chemical fluxes are also treated.
32 !!
33 !! REFERENCE
34 !! ---------
35 !!
36 !!
37 !! AUTHOR
38 !! ------
39 !! V. Masson
40 !!
41 !! MODIFICATIONS
42 !! -------------
43 !! Original 01/2004
44 !! P Le Moigne 11/2004 add new diagnostics for isba
45 !! A.Bogatchev 09/2005 EBA snow option
46 !! P Le Moigne 09/2005 AGS modifs of L. Jarlan
47 !! P Le Moigne 02/2006 z0h with snow
48 !! P.Le Moigne 06/2006 seeding and irrigation
49 !! B. Decharme 2008 reset the subgrid topographic effect on the forcing
50 !! PSNV allways <= PSNG
51 !! News diag
52 !! Flooding scheme and allows TRIP variables coupling
53 !! A.L. Gibelin 04/2009 : Add respiration diagnostics
54 !! A.L. Gibelin 04/2009 : BIOMASS and RESP_BIOMASS arrays
55 !! A.L. Gibelin 04/2009 : TAU_WOOD for NCB option
56 !! A.L. Gibelin 05/2009 : Add carbon spinup
57 !! A.L. Gibelin 06/2009 : Soil carbon variables for CNT option
58 !! A.L. Gibelin 07/2009 : Suppress RDK and transform GPP as a diagnostic
59 !! A.L. Gibelin 07/2009 : Suppress PPST and PPSTF as outputs
60 !! S.Lafont 01/2011 : add PTSTEP as arg of diag_misc
61 !! B.Decharme 09/2012 : Bug in hydro_glacier calculation with ES or Crocus
62 !! New wind implicitation
63 !! New soil carbon spinup and diag
64 !! Isba budget
65 !! F. Bouttier 01/2013 : Apply random perturbations for ensembles
66 !! B. Decharme 04/2013 new coupling variables
67 !! Subsurface runoff if SGH (DIF option only)
68 !! 07/2013 Surface / Water table depth coupling
69 !! P Samuelsson 10/2014 : MEB
70 !! P. LeMoigne 12/2014 EBA scheme update
71 !! R. Seferian 05/2015 : Add coupling fiels to vegetation_evol call
72 !! B. Decharme 01/16 : Bug with flood budget
73 !! B. Decharme 01/16 : Bug when vegetation veg, z0 and emis are imposed whith interactive vegetation
74 !!-------------------------------------------------------------------
75 !
76 USE modd_surfex_n, ONLY : isba_model_t
77 !
80 USE modd_surf_atm_n, ONLY : surf_atm_t
85 USE modd_dst_n, ONLY : dst_t
86 USE modd_slt_n, ONLY : slt_t
87 !
88 USE modd_reprod_oper, ONLY : cimplicit_wind
89 !
90 USE modd_csts, ONLY : xrd, xrv, xp00, xcpd, xpi, xavogadro, xmd
91 USE modd_co2v_par, ONLY : xmco2, xspin_co2
92 !
93 USE modd_surf_par, ONLY : xundef
94 USE modd_snow_par, ONLY : xz0sn
96 !
97 USE modd_surf_atm, ONLY : lnosof
98 !
99 USE modd_dst_surf
100 USE modd_slt_surf
101 USE mode_dslt_surf
102 USE mode_meb
103 !
104 !
105 !
106 
107 USE modd_data_cover_par, ONLY : nvt_no, nvt_rock
108 !
109 USE modd_agri, ONLY : lagrip
110 USE modd_deepsoil, ONLY : ldeepsoil
111 !
112 #ifdef TOPD
113 USE modd_coupling_topd, ONLY : lcoupl_topd, nmaskt_patch
114 #endif
115 !
116 USE modi_irrigation_update
117 USE modi_add_forecast_to_date_surf
118 USE modi_z0eff
119 USE modi_isba
120 USE modi_average_flux
121 USE modi_average_phy
122 USE modi_average_rad
123 USE modi_average_diag_isba_n
124 USE modi_vegetation_evol
125 USE modi_vegetation_update
126 USE modi_albedo_veg_update
127 USE modi_carbon_evol
130 USE modi_albedo
131 USE modi_diag_inline_isba_n
132 USE modi_diag_evap_isba_n
133 USE modi_diag_misc_isba_n
134 !
135 USE modi_update_rad_isba_n
136 USE modi_deepsoil_update
137 USE modi_isba_sgh_update
138 USE modi_isba_flood_properties
139 USE modi_diag_cpl_esm_isba
140 USE modi_hydro_glacier
141 USE modi_isba_albedo
142 USE modi_carbon_spinup
143 USE modi_pack_isba_patch_n
144 USE modi_pack_isba_patch_get_size_n
145 USE modi_pack_ch_isba_patch_n
146 USE modi_pack_diag_patch_n
147 USE modi_pack_diag_patch_get_size_n
148 USE modi_unpack_isba_patch_n
149 USE modi_unpack_ch_isba_patch_n
150 USE modi_unpack_diag_patch_n
151 USE modi_ch_aer_dep
152 USE modi_abor1_sfx
153 USE modi_average_diag_evap_isba_n
154 USE modi_average_diag_misc_isba_n
155 USE modi_ch_bvocem_n
156 USE modi_soilemisno_n
157 USE modi_ch_dep_isba
158 USE modi_dslt_dep
159 USE modi_coupling_dst_n
160 USE modi_coupling_surf_topd
161 USE modi_isba_budget_init
162 USE modi_isba_budget
163 !
164 USE yomhook ,ONLY : lhook, dr_hook
165 USE parkind1 ,ONLY : jprb
166 !
167 IMPLICIT NONE
168 !
169 !* 0.1 declarations of arguments
170 !
171 !
172 TYPE(isba_model_t), INTENT(INOUT) :: im
173 TYPE(data_cover_t), INTENT(INOUT) :: dtco
174 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
175 TYPE(surf_atm_t), INTENT(INOUT) :: u
176 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
177 TYPE(data_teb_garden_t), INTENT(INOUT) :: dtgd
178 TYPE(data_teb_greenroof_t), INTENT(INOUT) :: dtgr
179 TYPE(teb_greenroof_options_t), INTENT(INOUT) :: tgro
180 TYPE(dst_t), INTENT(INOUT) :: dst
181 TYPE(slt_t), INTENT(INOUT) :: slt
182 !
183  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
184  CHARACTER(LEN=1), INTENT(IN) :: hcoupling ! type of coupling
185  ! 'E' : explicit
186  ! 'I' : implicit
187 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
188 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
189 INTEGER, INTENT(IN) :: kday ! current day (UTC)
190 REAL, INTENT(IN) :: ptime ! current time since midnight (UTC, s)
191 INTEGER, INTENT(IN) :: ki ! number of points
192 INTEGER, INTENT(IN) :: ksv ! number of scalars
193 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
194 REAL, DIMENSION(KI), INTENT(IN) :: ptsun ! solar time (s from midnight)
195 REAL, INTENT(IN) :: ptstep ! atmospheric time-step (s)
196 REAL, DIMENSION(KI), INTENT(IN) :: pzref ! height of T,q forcing (m)
197 REAL, DIMENSION(KI), INTENT(IN) :: puref ! height of wind forcing (m)
198 !
199 REAL, DIMENSION(KI), INTENT(IN) :: pta ! air temperature forcing (K)
200 REAL, DIMENSION(KI), INTENT(IN) :: pqa ! air humidity forcing (kg/m3)
201 REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density (kg/m3)
202 REAL, DIMENSION(KI,KSV),INTENT(IN) :: psv ! scalar variables
203 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
204 !
205  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: hsv ! name of all scalar variables!
206 REAL, DIMENSION(KI), INTENT(IN) :: pu ! zonal wind (m/s)
207 REAL, DIMENSION(KI), INTENT(IN) :: pv ! meridian wind (m/s)
208 REAL, DIMENSION(KI,KSW),INTENT(IN) :: pdir_sw ! direct solar radiation (on horizontal surf.)
209 ! ! (W/m2)
210 REAL, DIMENSION(KI,KSW),INTENT(IN) :: psca_sw ! diffuse solar radiation (on horizontal surf.)
211 ! ! (W/m2)
212 REAL, DIMENSION(KSW),INTENT(IN) :: psw_bands ! mean wavelength of each shortwave band (m)
213 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! zenithal angle at t (radian from the vertical)
214 REAL, DIMENSION(KI), INTENT(IN) :: pzenith2 ! zenithal angle at t+1(radian from the vertical)
215 REAL, DIMENSION(KI), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.)
216 ! ! (W/m2)
217 REAL, DIMENSION(KI), INTENT(IN) :: pps ! pressure at atmospheric model surface (Pa)
218 REAL, DIMENSION(KI), INTENT(IN) :: ppa ! pressure at forcing level (Pa)
219 REAL, DIMENSION(KI), INTENT(IN) :: pzs ! atmospheric model orography (m)
220 REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration in the air (kg_CO2/m3)
221 REAL, DIMENSION(KI), INTENT(IN) :: psnow ! snow precipitation (kg/m2/s)
222 REAL, DIMENSION(KI), INTENT(IN) :: prain ! liquid precipitation (kg/m2/s)
223 !
224 !
225 REAL, DIMENSION(KI), INTENT(OUT) :: psfth ! flux of heat (W/m2)
226 REAL, DIMENSION(KI), INTENT(OUT) :: psftq ! flux of water vapor (kg/m2/s)
227 REAL, DIMENSION(KI), INTENT(OUT) :: psfu ! zonal momentum flux (Pa)
228 REAL, DIMENSION(KI), INTENT(OUT) :: psfv ! meridian momentum flux (Pa)
229 REAL, DIMENSION(KI), INTENT(OUT) :: psfco2 ! flux of CO2 positive toward the atmosphere (m/s*kg_CO2/kg_air)
230 REAL, DIMENSION(KI,KSV),INTENT(OUT):: psfts ! flux of scalar var. (kg/m2/s)
231 !
232 REAL, DIMENSION(KI), INTENT(OUT) :: ptrad ! radiative temperature (K)
233 REAL, DIMENSION(KI,KSW),INTENT(OUT):: pdir_alb! direct albedo for each spectral band (-)
234 REAL, DIMENSION(KI,KSW),INTENT(OUT):: psca_alb! diffuse albedo for each spectral band (-)
235 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity (-)
236 !
237 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
238 REAL, DIMENSION(KI), INTENT(OUT) :: pz0 ! roughness length for momentum (m)
239 REAL, DIMENSION(KI), INTENT(OUT) :: pz0h ! roughness length for heat (m)
240 REAL, DIMENSION(KI), INTENT(OUT) :: pqsurf ! specific humidity at surface (kg/kg)
241 !
242 REAL, DIMENSION(KI), INTENT(IN) :: ppew_a_coef! implicit coefficients
243 REAL, DIMENSION(KI), INTENT(IN) :: ppew_b_coef! needed if HCOUPLING='I'
244 REAL, DIMENSION(KI), INTENT(IN) :: ppet_a_coef
245 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_a_coef
246 REAL, DIMENSION(KI), INTENT(IN) :: ppet_b_coef
247 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_b_coef
248  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
249 !
250 !
251 !* 0.2 declarations of local variables
252 !
253 !* forcing variables
254 !
255 REAL, DIMENSION(KI) :: zwind ! lowest atmospheric level wind speed (m/s)
256 REAL, DIMENSION(KI) :: zdir ! wind direction (rad from N clockwise)
257 REAL, DIMENSION(KI) :: zexna ! Exner function at lowest atmospheric level (-)
258 REAL, DIMENSION(KI) :: zexns ! Exner function at surface (-)
259 REAL, DIMENSION(KI) :: zalfa ! Wind direction (-)
260 REAL, DIMENSION(KI) :: zqa ! specific humidity (kg/kg)
261 REAL, DIMENSION(KI) :: zco2 ! CO2 concentration (kg/kg)
262 REAL :: zspinco2 ! CO2 concentration (ppmv)
263 REAL, DIMENSION(KI) :: zpeq_a_coef ! specific humidity implicit
264 REAL, DIMENSION(KI) :: zpeq_b_coef ! coefficients (hum. in kg/kg)
265 !
266 INTEGER ::ispinend
267 !
268 ! Patch outputs:
269 !
270 REAL, DIMENSION(KI,IM%I%NPATCH) :: zsfth_tile ! surface heat flux (W/m2)
271 REAL, DIMENSION(KI,IM%I%NPATCH) :: zsftq_tile ! surface vapor flux (kg/m2/s)
272 REAL, DIMENSION(KI,IM%I%NPATCH) :: zsfco2_tile ! surface CO2 flux positive toward the atmosphere (m/s*kg_CO2/kg_air)
273 REAL, DIMENSION(KI,IM%I%NPATCH) :: zsfu_tile ! zonal momentum flux
274 REAL, DIMENSION(KI,IM%I%NPATCH) :: zsfv_tile ! meridian momentum flux
275 REAL, DIMENSION(KI,IM%I%NPATCH) :: ztrad_tile ! radiative surface temperature
276 REAL, DIMENSION(KI,IM%I%NPATCH) :: zemis_tile ! emissivity
277 REAL, DIMENSION(KI,IM%I%NPATCH) :: ztsurf_tile ! surface effective temperature
278 REAL, DIMENSION(KI,IM%I%NPATCH) :: zz0_tile ! roughness length for momentum
279 REAL, DIMENSION(KI,IM%I%NPATCH) :: zz0h_tile ! roughness length for heat
280 REAL, DIMENSION(KI,IM%I%NPATCH) :: zqsurf_tile ! specific humidity at surface
281 REAL, DIMENSION(KI,KSW,IM%I%NPATCH) :: zdir_alb_tile ! direct albedo
282 REAL, DIMENSION(KI,KSW,IM%I%NPATCH) :: zsca_alb_tile ! diffuse albedo
283 REAL, DIMENSION(KI,KSV,IM%I%NPATCH) :: zsfts_tile ! scalar surface flux
284 !
285 REAL, DIMENSION(KI, IM%I%NPATCH) :: zcpl_drain ! For the coupling with TRIP
286 REAL, DIMENSION(KI, IM%I%NPATCH) :: zcpl_runoff ! For the coupling with TRIP
287 REAL, DIMENSION(KI, IM%I%NPATCH) :: zcpl_eflood ! For the coupling with TRIP
288 REAL, DIMENSION(KI, IM%I%NPATCH) :: zcpl_pflood ! For the coupling with TRIP
289 REAL, DIMENSION(KI, IM%I%NPATCH) :: zcpl_iflood ! For the coupling with TRIP
290 REAL, DIMENSION(KI, IM%I%NPATCH) :: zcpl_iceflux
291 !
292 ! for chemical computations
293 !
294 REAL, DIMENSION(KI, IM%I%NPATCH) :: zsw_forbio
295 !
296 REAL :: zconvertfacm0_slt, zconvertfacm0_dst
297 REAL :: zconvertfacm3_slt, zconvertfacm3_dst
298 REAL :: zconvertfacm6_slt, zconvertfacm6_dst
299 !
300 ! dimensions and loop counters
301 !
302 INTEGER :: iswb ! number of spectral shortwave bands
303 INTEGER :: jswb ! loop on number of spectral shortwave bands
304 INTEGER :: jpatch ! loop on patches
305 INTEGER :: jsv, idst, imoment, ii
306 INTEGER :: jlayer, jmode, jsv_idx
307 !
308 ! logical units
309 !
310 INTEGER :: jj
311 LOGICAL :: lupdated ! T if VEGETATION_UPDATE has reset fields
312 !
313 REAL(KIND=JPRB) :: zhook_handle
314 !
315 ! --------------------------------------------------------------------------------------
316 IF (lhook) CALL dr_hook('COUPLING_ISBA_N',0,zhook_handle)
317 IF (htest/='OK') THEN
318  CALL abor1_sfx('COUPLING_ISBAN: FATAL ERROR DURING ARGUMENT TRANSFER')
319 END IF
320 ! --------------------------------------------------------------------------------------
321 !
322 !* 1. Initializations
323 !
324 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
325 ! Allocations:
326 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
327 !
328 zsfth_tile(:,:) = xundef
329 zsftq_tile(:,:) = xundef
330 zsfco2_tile(:,:) = xundef
331 zsfu_tile(:,:) = xundef
332 zsfv_tile(:,:) = xundef
333 ztrad_tile(:,:) = xundef
334 zemis_tile(:,:) = xundef
335 zdir_alb_tile(:,:,:) = xundef
336 zsca_alb_tile(:,:,:) = xundef
337 ztsurf_tile(:,:) = xundef
338 zz0_tile(:,:) = xundef
339 zz0h_tile(:,:) = xundef
340 zqsurf_tile(:,:) = xundef
341 !
342 zsfts_tile(:,:,:) = 0.
343 !
344 zcpl_drain(:,:) = 0.0
345 zcpl_runoff(:,:) = 0.0
346 zcpl_eflood(:,:) = 0.0
347 zcpl_pflood(:,:) = 0.0
348 zcpl_iflood(:,:) = 0.0
349 zcpl_iceflux(:,:) = 0.0
350 !
351 zsw_forbio(:,:) = xundef
352 !
353 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
354 ! Forcing Modifications:
355 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
356 !
357 zdir=0.
358 !
359 DO jj=1,SIZE(pqa)
360 ! specific humidity (conversion from kg/m3 to kg/kg)
361 !
362  zqa(jj) = pqa(jj) / prhoa(jj)
363  zpeq_a_coef(jj) = ppeq_a_coef(jj) / prhoa(jj)
364  zpeq_b_coef(jj) = ppeq_b_coef(jj) / prhoa(jj)
365 !
366  zco2(jj) = pco2(jj) / prhoa(jj)
367 !
368 ! Other forcing variables depending on incoming forcing (argument list)JJ
369 !
370  zexns(jj) = (pps(jj)/xp00)**(xrd/xcpd)
371  zexna(jj) = (ppa(jj)/xp00)**(xrd/xcpd)
372 !
373 !* wind strength
374 !
375  zwind(jj) = sqrt(pu(jj)**2+pv(jj)**2)
376 !
377 !* wind direction
378 !
379  IF (zwind(jj)>0.) zdir(jj)=atan2(pu(jj),pv(jj))
380 !
381 !* angle between z0eff J axis and wind direction (rad., clockwise)
382 !
383  zalfa(jj) = zdir(jj) - im%I%XZ0EFFJPDIR(jj) * xpi/180.
384 
385  IF (zalfa(jj)<-xpi) zalfa(jj) = zalfa(jj) + 2.*xpi
386  IF (zalfa(jj)>=xpi) zalfa(jj) = zalfa(jj) - 2.*xpi
387 !
388 ENDDO
389 !
390 !* number of shortwave spectral bands
391 !
392 iswb = ksw
393 !
394 !* irrigation
395 !
396 IF (lagrip .AND. (im%I%CPHOTO=='LAI' .OR. im%I%CPHOTO=='LST' .OR. &
397  im%I%CPHOTO=='NIT'.OR. im%I%CPHOTO=='NCB') ) THEN
398  CALL irrigation_update(im%AG, &
399  im%I%XIRRIG,ptstep,kmonth,kday,ptime, &
400  im%I%TSEED(:,:)%TDATE%MONTH,im%I%TSEED(:,:)%TDATE%DAY, &
401  im%I%TREAP(:,:)%TDATE%MONTH,im%I%TREAP(:,:)%TDATE%DAY )
402 ENDIF
403 !
404 !* Actualization of the SGH variable (Fmu, Fsat)
405 !
406  CALL isba_sgh_update(im%IG, im%I, &
407  im%I%CISBA,im%I%CRUNOFF,im%I%CRAIN,prain,im%I%XMUF,im%I%XFSAT,im%I%XTOPQS)
408 !
409 !
410 !* Actualization of deep soil characteristics
411 !
412 IF (ldeepsoil) THEN
413  CALL deepsoil_update(im%I, &
414  im%I%TTIME%TDATE%MONTH)
415 ENDIF
416 !
417 !* Actualization of soil and wood carbon spinup
418 !
419 ! During soil carbon spinup with ISBA-CC:
420 ! (1) Atmospheric CO2 concentration fixed to Pre-industrial CO2 consentration XCO2_START
421 ! (2) Atmospheric CO2 concentration rampin up from XCO2_START to XCO2_END
422 !
423 IF(im%I%LSPINUPCARBS.OR.im%I%LSPINUPCARBW)THEN
424 !
425  ispinend=im%I%NNBYEARSPINS-nint(im%I%NNBYEARSPINS*xspin_co2)
426 !
427  im%I%LAGRI_TO_GRASS = .false.
428 !
429  IF ( im%I%LSPINUPCARBS .AND. (im%I%NNBYEARSOLD <= ispinend) ) THEN
430 !
431  im%I%LAGRI_TO_GRASS = .true.
432 !
433  zco2(:) = im%I%XCO2_START * 1.e-6 * xmco2 / xmd
434 !
435  ELSEIF(im%I%LSPINUPCARBS .AND. (im%I%NNBYEARSOLD > ispinend) .AND. &
436  (im%I%NNBYEARSOLD <= im%I%NNBYEARSPINS) )THEN
437 !
438  zspinco2 = im%I%XCO2_START + (im%I%XCO2_END-im%I%XCO2_START) * &
439  REAL(IM%I%NNBYEARSOLD - ISPINEND) / REAL(im%i%nnbyearspins - ispinend)
440 !
441  zco2(:) = zspinco2 * 1.e-6 * xmco2 / xmd
442 !
443  ENDIF
444 !
445  CALL carbon_spinup(im%I%TTIME%TDATE%MONTH,im%I%TTIME%TDATE%DAY,im%I%TTIME%TIME, &
446  im%I%LSPINUPCARBS, im%I%LSPINUPCARBW, im%I%XSPINMAXS, im%I%XSPINMAXW, &
447  im%I%NNBYEARSPINS, im%I%NNBYEARSPINW, im%I%NNBYEARSOLD, im%I%CPHOTO, &
448  im%I%CRESPSL, im%I%NSPINS, im%I%NSPINW )
449 !
450 ENDIF
451 !
452 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
453 ! Time evolution
454 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
455 !
456 im%I%TTIME%TIME = im%I%TTIME%TIME + ptstep
457  CALL add_forecast_to_date_surf(im%I%TTIME%TDATE%YEAR,im%I%TTIME%TDATE%MONTH,&
458  im%I%TTIME%TDATE%DAY,im%I%TTIME%TIME)
459 !
460 ! --------------------------------------------------------------------------------------
461 !
462 !* 2. Physical evolution
463 !
464 ! --------------------------------------------------------------------------------------
465 ! Patch Dependent Calculations
466 ! --------------------------------------------------------------------------------------
467 !
468 patch_loop: DO jpatch=1,im%I%NPATCH
469 !
470  IF (im%I%NSIZE_NATURE_P(jpatch) == 0 ) cycle
471 !
472 ! Pack dummy arguments for each patch:
473 !
474 #ifdef TOPD
475  IF (lcoupl_topd)nmaskt_patch(:)=im%I%NR_NATURE_P(:,jpatch)
476 #endif
477  CALL treat_patch(im%I%NSIZE_NATURE_P(jpatch),im%I%NR_NATURE_P(:,jpatch))
478 !
479 ENDDO patch_loop
480 !
481 ! --------------------------------------------------------------------------------------
482 ! SFX - RRM coupling update if used :
483 ! --------------------------------------------------------------------------------------
484 !
485 IF(im%I%LCPL_RRM)THEN
486  CALL diag_cpl_esm_isba(im%I, &
487  ptstep,zcpl_drain,zcpl_runoff,zcpl_eflood, &
488  zcpl_pflood,zcpl_iflood,zcpl_iceflux )
489 ENDIF
490 !
491 ! --------------------------------------------------------------------------------------
492 ! Vegetation update (in case of non-interactive vegetation):
493 ! Or
494 ! Vegetation albedo only update (in case of interactive vegetation):
495 ! --------------------------------------------------------------------------------------
496 !
497 lupdated=.false.
498 IF ((im%I%CPHOTO=='NON' .OR. im%I%CPHOTO=='AGS' .OR. im%I%CPHOTO=='AST') .AND. im%I%LVEGUPD) THEN
499  CALL vegetation_update(dtco, im%DTI, dtgd, dtgr, im%IG, im%I, tgro, &
500  ptstep,im%I%TTIME,im%I%XCOVER, im%I%LCOVER, &
501  im%I%CISBA,im%I%LECOCLIMAP,im%I%CPHOTO,lagrip,im%I%LTR_ML,'NAT', &
502  im%I%XLAI,im%I%XVEG,im%I%XZ0, &
503  im%I%XALBNIR,im%I%XALBVIS,im%I%XALBUV,im%I%XEMIS, &
504  im%I%XRSMIN,im%I%XGAMMA,im%I%XWRMAX_CF, &
505  im%I%XRGL,im%I%XCV, &
506  im%I%XGMES,im%I%XBSLAI,im%I%XLAIMIN,im%I%XSEFOLD,im%I%XGC,im%I%XDMAX, &
507  im%I%XF2I, im%I%LSTRESS, &
508  im%I%XAOSIP,im%I%XAOSIM,im%I%XAOSJP,im%I%XAOSJM, &
509  im%I%XHO2IP,im%I%XHO2IM,im%I%XHO2JP,im%I%XHO2JM, &
510  im%I%XZ0EFFIP,im%I%XZ0EFFIM,im%I%XZ0EFFJP,im%I%XZ0EFFJM, &
511  im%I%CALBEDO, im%I%XALBNIR_VEG, im%I%XALBVIS_VEG, im%I%XALBUV_VEG, &
512  im%I%XALBNIR_SOIL, im%I%XALBVIS_SOIL, im%I%XALBUV_SOIL, &
513  im%I%XCE_NITRO, im%I%XCF_NITRO, im%I%XCNA_NITRO, &
514  im%I%TSEED, im%I%TREAP, im%I%XWATSUP, im%I%XIRRIG, &
515  im%I%XGNDLITTER, im%I%XRGLGV,im%I%XGAMMAGV, &
516  im%I%XRSMINGV, im%I%XWRMAX_CFGV, &
517  im%I%XH_VEG, im%I%XLAIGV, im%I%XZ0LITTER, lupdated )
518 !
519 ELSEIF ((im%I%CPHOTO=='LAI'.OR.im%I%CPHOTO=='LST'.OR.im%I%CPHOTO=='NIT'.OR.im%I%CPHOTO=='NCB').AND.im%I%LVEGUPD) THEN
520 !
521  CALL albedo_veg_update(dtco, im%DTI, im%IG, im%I, &
522  ptstep,im%I%TTIME,im%I%XCOVER, im%I%LCOVER, &
523  im%I%CISBA,im%I%LECOCLIMAP,im%I%CPHOTO,lagrip,im%I%LTR_ML,'NAT', &
524  im%I%XVEG,im%I%XALBNIR,im%I%XALBVIS,im%I%XALBUV, &
525  im%I%CALBEDO, im%I%XALBNIR_VEG, im%I%XALBVIS_VEG, im%I%XALBUV_VEG, &
526  im%I%XALBNIR_SOIL, im%I%XALBVIS_SOIL, im%I%XALBUV_SOIL )
527 END IF
528 !
529 IF(im%I%LPERTSURF.AND.lupdated) THEN
530  ! random perturbation for ensembles:
531  ! reset these fields to their original values, as in compute_isba_parameters
532  im%I%XVEG(:,1) = im%I%XPERTVEG(:)
533  im%I%XLAI(:,1) = im%I%XPERTLAI(:)
534  im%I%XCV(:,1) = im%I%XPERTCV(:)
535  ! reapply original perturbation patterns
536  WHERE(im%I%XALBNIR(:,1)/=xundef) im%I%XALBNIR(:,1) =im%I%XALBNIR(:,1) *( 1.+ im%I%XPERTALB(:) )
537  WHERE(im%I%XALBVIS(:,1)/=xundef) im%I%XALBVIS(:,1) =im%I%XALBVIS(:,1) *( 1.+ im%I%XPERTALB(:) )
538  WHERE(im%I%XALBUV(:,1)/=xundef) im%I%XALBUV(:,1) =im%I%XALBUV(:,1) *( 1.+ im%I%XPERTALB(:) )
539  WHERE(im%I%XZ0(:,1)/=xundef) im%I%XZ0(:,1) =im%I%XZ0(:,1) *( 1.+ im%I%XPERTZ0(:) )
540  WHERE(im%I%XZ0EFFIP(:,1)/=xundef) im%I%XZ0EFFIP(:,1)=im%I%XZ0EFFIP(:,1)*( 1.+ im%I%XPERTZ0(:) )
541  WHERE(im%I%XZ0EFFIM(:,1)/=xundef) im%I%XZ0EFFIM(:,1)=im%I%XZ0EFFIM(:,1)*( 1.+ im%I%XPERTZ0(:) )
542  WHERE(im%I%XZ0EFFJP(:,1)/=xundef) im%I%XZ0EFFJP(:,1)=im%I%XZ0EFFJP(:,1)*( 1.+ im%I%XPERTZ0(:) )
543  WHERE(im%I%XZ0EFFJM(:,1)/=xundef) im%I%XZ0EFFJM(:,1)=im%I%XZ0EFFJM(:,1)*( 1.+ im%I%XPERTZ0(:) )
544 
545 ENDIF
546 !
547 ! --------------------------------------------------------------------------------------
548 ! Outputs for the atmospheric model or update the snow/flood fraction at time t+1
549 ! --------------------------------------------------------------------------------------
550 ! Grid box average fluxes/properties: Arguments and standard diagnostics at time t+1
551 !
552  CALL average_flux(im%I%XPATCH, &
553  zsfth_tile, zsftq_tile, zsfts_tile, zsfco2_tile, &
554  zsfu_tile, zsfv_tile, &
555  psfth, psftq, psfts, psfco2, &
556  psfu, psfv )
557 !
558 !
559 !-------------------------------------------------------------------------------
560 !Physical properties see by the atmosphere in order to close the energy budget
561 !between surfex and the atmosphere. All variables should be at t+1 but very
562 !difficult to do. Maybe it will be done later. However, Ts is at time t+1
563 !-------------------------------------------------------------------------------
564 !
565  CALL average_phy(im%I%XPATCH, &
566  ztsurf_tile, zz0_tile, zz0h_tile, zqsurf_tile, &
567  puref, pzref, ptsurf, pz0, pz0h, pqsurf )
568 !
569 !-------------------------------------------------------------------------------------
570 !Radiative properties at time t+1 (see by the atmosphere) in order to close
571 !the energy budget between surfex and the atmosphere
572 !-------------------------------------------------------------------------------------
573 !
574  CALL update_rad_isba_n(im%I, &
575  im%I%LFLOOD, im%I%TSNOW%SCHEME, pzenith2, psw_bands, &
576  im%I%XVEG, im%I%XLAI, im%I%XZ0, &
577  im%I%LMEB_PATCH,im%I%XLAIGV,im%I%XGNDLITTER,im%I%XZ0LITTER,im%I%XH_VEG, &
578  im%I%XALBNIR, im%I%XALBVIS, im%I%XALBUV, im%I%XEMIS, &
579  zdir_alb_tile,zsca_alb_tile,zemis_tile, &
580  pdir_sw, psca_sw, &
581  im%I%XALBNIR_VEG, im%I%XALBNIR_SOIL, &
582  im%I%XALBVIS_VEG, im%I%XALBVIS_SOIL )
583 !
584  CALL average_rad(im%I%XPATCH, &
585  zdir_alb_tile, zsca_alb_tile, zemis_tile, ztrad_tile, &
586  pdir_alb, psca_alb, im%I%XEMIS_NAT, im%I%XTSRAD_NAT )
587 !
588 pemis = im%I%XEMIS_NAT
589 ptrad = im%I%XTSRAD_NAT
590 !
591 !-------------------------------------------------------------------------------------
592 !
593 ! Any additional diagnostics (stored in MODD_DIAG_ISBA_n)
594 !
595  CALL average_diag_isba_n(im%DGEI, im%DGI, im%I, &
596  puref,pzref,psfco2,ptrad)
597 !
598 ! Cumulated diagnostics (stored in MODD_DIAG_EVAP_ISBA_n)
599 !
600  CALL average_diag_evap_isba_n(im%DGEI, im%I, &
601  ptstep,prain,psnow)
602 !
603 ! Miscellaneous diagnostics (stored in MODD_DIAG_MISC_ISBA_n)
604 !
605  CALL average_diag_misc_isba_n(im%DGMI, im%I)
606 !
607 !--------------------------------------------------------------------------------------
608 !
609  CALL coupling_surf_topd(im%DGEI, im%DGMI, im%IG, im%I, ug, u, &
610  hprogram,u%NDIM_FULL)
611 !
612 ! --------------------------------------------------------------------------------------
613 ! Snow/Flood fractions, albedo and emissivity update :
614 ! --------------------------------------------------------------------------------------
615 !
616 ! --------------------------------------------------------------------------------------
617 ! Chemical fluxes :
618 ! --------------------------------------------------------------------------------------
619 !
620 IF (im%CHI%SVI%NBEQ>0 .AND. im%CHI%LCH_BIO_FLUX) THEN
621  CALL ch_bvocem_n(im%CHI, im%GB, im%I, &
622  zsw_forbio,prhoa,psfts)
623 ENDIF
624 !
625 !SOILNOX
626 IF (im%CHI%LCH_NO_FLUX) THEN
627  CALL soilemisno_n(im%GB, im%I, &
628  pu,pv)
629 ENDIF
630 !
631 !==========================================================================================
632 !
633 IF (lhook) CALL dr_hook('COUPLING_ISBA_N',1,zhook_handle)
634  CONTAINS
635 !
636 !=======================================================================================
637 SUBROUTINE treat_patch(KSIZE,KMASK)
638 !
639 IMPLICIT NONE
640 !
641 INTEGER, INTENT(IN) :: ksize
642 INTEGER, INTENT(IN), DIMENSION(KI) :: kmask
643 !
644 REAL, DIMENSION(KSIZE) :: zp_zref ! height of T,q forcing (m)
645 REAL, DIMENSION(KSIZE) :: zp_uref ! height of wind forcing (m)
646 REAL, DIMENSION(KSIZE) :: zp_u ! zonal wind (m/s)
647 REAL, DIMENSION(KSIZE) :: zp_v ! meridian wind (m/s)
648 REAL, DIMENSION(KSIZE) :: zp_wind ! wind (m/s)
649 REAL, DIMENSION(KSIZE) :: zp_dir ! wind direction (rad from N clockwise)
650 REAL, DIMENSION(KSIZE) :: zp_qa ! air specific humidity forcing (kg/kg)
651 REAL, DIMENSION(KSIZE) :: zp_ta ! air temperature forcing (K)
652 REAL, DIMENSION(KSIZE) :: zp_co2 ! CO2 concentration in the air (kg/kg)
653 REAL, DIMENSION(KSIZE,KSV) :: zp_sv ! scalar concentration in the air (kg/kg)
654 REAL, DIMENSION(KSIZE) :: zp_zenith ! zenithal angle radian from the vertical)
655 REAL, DIMENSION(KSIZE) :: zp_pew_a_coef ! implicit coefficients
656 REAL, DIMENSION(KSIZE) :: zp_pew_b_coef ! needed if HCOUPLING='I'
657 REAL, DIMENSION(KSIZE) :: zp_pet_a_coef
658 REAL, DIMENSION(KSIZE) :: zp_pet_b_coef
659 REAL, DIMENSION(KSIZE) :: zp_peq_a_coef
660 REAL, DIMENSION(KSIZE) :: zp_peq_b_coef
661 REAL, DIMENSION(KSIZE) :: zp_rain ! liquid precipitation (kg/m2/s)
662 REAL, DIMENSION(KSIZE) :: zp_snow ! snow precipitation (kg/m2/s)
663 REAL, DIMENSION(KSIZE) :: zp_lw ! longwave radiation (W/m2)
664 REAL, DIMENSION(KSIZE,ISWB) :: zp_dir_sw ! direct solar radiation (W/m2)
665 REAL, DIMENSION(KSIZE,ISWB) :: zp_sca_sw ! diffuse solar radiation (W/m2)
666 REAL, DIMENSION(KSIZE) :: zp_ps ! pressure at atmospheric model surface (Pa)
667 REAL, DIMENSION(KSIZE) :: zp_pa ! pressure at forcing level (Pa)
668 REAL, DIMENSION(KSIZE) :: zp_zs ! atmospheric model orography (m)
669 REAL, DIMENSION(KSIZE) :: zp_sftq ! flux of water vapor <w'q'> (kg.m-2.s-1)
670 REAL, DIMENSION(KSIZE) :: zp_sfth ! flux of temperature <w'T'> (W/m2)
671 REAL, DIMENSION(KSIZE,KSV) :: zp_sfts ! flux of scalar <w'sv'> (mkg/kg/s)
672 REAL, DIMENSION(KSIZE) :: zp_sfco2 ! flux of CO2 positive toward the atmosphere (m/s*kg_CO2/kg_air)
673 REAL, DIMENSION(KSIZE) :: zp_ustar ! friction velocity (m/s)
674 REAL, DIMENSION(KSIZE) :: zp_sfu ! zonal momentum flux (pa)
675 REAL, DIMENSION(KSIZE) :: zp_sfv ! meridian momentum flux (pa)
676 REAL, DIMENSION(KSIZE) :: zp_trad ! radiative temperature (K)
677 REAL, DIMENSION(KSIZE) :: zp_tsurf ! surface effective temperature (K)
678 REAL, DIMENSION(KSIZE) :: zp_z0 ! roughness length for momentum (m)
679 REAL, DIMENSION(KSIZE) :: zp_z0h ! roughness length for heat (m)
680 REAL, DIMENSION(KSIZE) :: zp_qsurf ! specific humidity at surface (kg/kg)
681 !
682 !* other forcing variables (packed for each patch)
683 !
684 REAL, DIMENSION(KSIZE) :: zp_rhoa ! lowest atmospheric level air density (kg/m3)
685 REAL, DIMENSION(KSIZE) :: zp_exna ! Exner function at lowest atmospheric level (-)
686 REAL, DIMENSION(KSIZE) :: zp_exns ! Exner function at surface (-)
687 REAL, DIMENSION(KSIZE) :: zp_alfa ! Wind direction (-)
688 !
689 !* working variables (packed for each patch)
690 !
691 REAL, DIMENSION(KSIZE) :: zp_albnir_tveg ! total vegetation albedo in ir
692 REAL, DIMENSION(KSIZE) :: zp_albnir_tsoil ! total soil albedo in ir
693 REAL, DIMENSION(KSIZE) :: zp_albvis_tveg ! total vegetation albedo in vis
694 REAL, DIMENSION(KSIZE) :: zp_albvis_tsoil ! total soil albedo in vis
695 REAL, DIMENSION(KSIZE) :: zp_emis ! emissivity
696 REAL, DIMENSION(KSIZE) :: zp_global_sw ! global incoming SW rad.
697 REAL, DIMENSION(KSIZE) :: zp_slope_cos ! typical slope in the grid cosine
698 !
699 REAL, DIMENSION(KSIZE) :: zp_z0flood !Floodplain
700 REAL, DIMENSION(KSIZE) :: zp_ffgnos !Floodplain fraction over the ground without snow
701 REAL, DIMENSION(KSIZE) :: zp_ffvnos !Floodplain fraction over vegetation without snow
702 !
703 REAL, DIMENSION(KSIZE,IM%I%NNBIOMASS) :: zp_resp_biomass_inst ! instantaneous biomass respiration (kgCO2/kgair m/s)
704 !
705 !* Aggregated coeffs for evaporative flux calculations
706 !
707 REAL, DIMENSION(KSIZE) :: zp_ac_agg ! aggregated aerodynamic resistance
708 REAL, DIMENSION(KSIZE) :: zp_hu_agg ! aggregated relative humidity
709 !
710 !* For multi-energy balance
711 !
712 REAL, DIMENSION(KSIZE) :: zpalphan ! snow/canopy transition coefficient
713 REAL, DIMENSION(KSIZE) :: zsnowdepth ! total snow depth
714 REAL, DIMENSION(KSIZE) :: zz0g_without_snow ! roughness length for momentum at snow-free canopy floor
715 REAL, DIMENSION(KSIZE) :: zz0_mebv ! roughness length for momentum over MEB vegetation part of patch
716 REAL, DIMENSION(KSIZE) :: zz0h_mebv ! roughness length for heat over MEB vegetation part of path
717 REAL, DIMENSION(KSIZE) :: zz0eff_mebv ! roughness length for momentum over MEB vegetation part of patch
718 REAL, DIMENSION(KSIZE) :: zz0_mebn ! roughness length for momentum over MEB snow part of patch
719 REAL, DIMENSION(KSIZE) :: zz0h_mebn ! roughness length for heat over MEB snow part of path
720 REAL, DIMENSION(KSIZE) :: zz0eff_mebn ! roughness length for momentum over MEB snow part of patch
721 ! Temporary
722 REAL, DIMENSION(KSIZE) :: zp_meb_sca_sw ! diffuse incoming SW rad.
723 !
724 !* ISBA water and energy budget
725 !
726 REAL, DIMENSION(KSIZE) :: zp_wg_ini
727 REAL, DIMENSION(KSIZE) :: zp_wgi_ini
728 REAL, DIMENSION(KSIZE) :: zp_wr_ini
729 REAL, DIMENSION(KSIZE) :: zp_swe_ini
730 !
731 ! miscellaneous
732 !
733 REAL, DIMENSION(KSIZE) :: zp_deep_flux ! Flux at the bottom of the soil
734 REAL, DIMENSION(KSIZE) :: zp_tdeep_a ! coefficient for implicitation of Tdeep
735 REAL, DIMENSION(KSIZE) :: zirrig_gr ! green roof ground irrigation rate
736 !
737 ! For multi-energy balance
738 LOGICAL :: gmeb ! True if multi-energy balance should be used for the specific patch
739 !
740 INTEGER :: jj, ji, jk
741 REAL(KIND=JPRB) :: zhook_handle
742 !
743 IF (lhook) CALL dr_hook('COUPLING_ISBA_n:TREAT_PATCH',0,zhook_handle)
744 !
745 !--------------------------------------------------------------------------------------
746 !
747 ! Pack isba forcing outputs
748 !
749 IF (im%I%NPATCH==1) THEN
750  zp_zenith(:) = pzenith(:)
751  zp_zref(:) = pzref(:)
752  zp_uref(:) = puref(:)
753  zp_wind(:) = zwind(:)
754  zp_u(:) = pu(:)
755  zp_v(:) = pv(:)
756  zp_dir(:) = zdir(:)
757  zp_qa(:) = zqa(:)
758  zp_ta(:) = pta(:)
759  zp_co2(:) = zco2(:)
760  zp_sv(:,:) = psv(:,:)
761  zp_pew_a_coef(:) = ppew_a_coef(:)
762  zp_pew_b_coef(:) = ppew_b_coef(:)
763  zp_pet_a_coef(:) = ppet_a_coef(:)
764  zp_pet_b_coef(:) = ppet_b_coef(:)
765  zp_peq_a_coef(:) = zpeq_a_coef(:)
766  zp_peq_b_coef(:) = zpeq_b_coef(:)
767  zp_rain(:) = prain(:)
768  zp_snow(:) = psnow(:)
769  zp_lw(:) = plw(:)
770  zp_dir_sw(:,:) = pdir_sw(:,:)
771  zp_sca_sw(:,:) = psca_sw(:,:)
772  zp_ps(:) = pps(:)
773  zp_pa(:) = ppa(:)
774  zp_zs(:) = pzs(:)
775 !
776  zp_rhoa(:) = prhoa(:)
777  zp_exna(:) = zexna(:)
778  zp_exns(:) = zexns(:)
779  zp_alfa(:) = zalfa(:)
780 ELSE
781 !cdir nodep
782 !cdir unroll=8
783  DO jj=1,ksize
784  ji = kmask(jj)
785  zp_zenith(jj) = pzenith(ji)
786  zp_zref(jj) = pzref(ji)
787  zp_uref(jj) = puref(ji)
788  zp_wind(jj) = zwind(ji)
789  zp_u(jj) = pu(ji)
790  zp_v(jj) = pv(ji)
791  zp_dir(jj) = zdir(ji)
792  zp_qa(jj) = zqa(ji)
793  zp_ta(jj) = pta(ji)
794  zp_co2(jj) = zco2(ji)
795  zp_pew_a_coef(jj) = ppew_a_coef(ji)
796  zp_pew_b_coef(jj) = ppew_b_coef(ji)
797  zp_pet_a_coef(jj) = ppet_a_coef(ji)
798  zp_pet_b_coef(jj) = ppet_b_coef(ji)
799  zp_peq_a_coef(jj) = zpeq_a_coef(ji)
800  zp_peq_b_coef(jj) = zpeq_b_coef(ji)
801  zp_rain(jj) = prain(ji)
802  zp_snow(jj) = psnow(ji)
803  zp_lw(jj) = plw(ji)
804  zp_ps(jj) = pps(ji)
805  zp_pa(jj) = ppa(ji)
806  zp_zs(jj) = pzs(ji)
807 !
808  zp_rhoa(jj) = prhoa(ji)
809  zp_exna(jj) = zexna(ji)
810  zp_exns(jj) = zexns(ji)
811  zp_alfa(jj) = zalfa(ji)
812  ENDDO
813 !
814  DO jk=1,ksv
815 !cdir nodep
816 !cdir unroll=8
817  DO jj=1,ksize
818  ji=kmask(jj)
819  zp_sv(jj,jk) = psv(ji,jk)
820  ENDDO
821  ENDDO
822 !
823  DO jk=1,SIZE(pdir_sw,2)
824 !cdir nodep
825 !cdir unroll=8
826  DO jj=1,ksize
827  ji=kmask(jj)
828  zp_dir_sw(jj,jk) = pdir_sw(ji,jk)
829  zp_sca_sw(jj,jk) = psca_sw(ji,jk)
830  ENDDO
831  ENDDO
832 !
833 ENDIF
834 !
835 !--------------------------------------------------------------------------------------
836 !
837 ! For multi-energy balance
838  gmeb=im%I%LMEB_PATCH(jpatch)
839 !
840 ! Pack ISBA input and prognostic variables (modd_isban) for each patch:
841 !
842  CALL pack_isba_patch_get_size_n(im%I, im%PKI, &
843  jpatch)
844 !
845  CALL pack_diag_patch_get_size_n(im%DGEI, im%DGI, im%DGMI, im%I, im%PKDI, &
846  jpatch)
847 !
848  CALL pack_isba_patch_n(im%AG, im%IG, im%I, im%PKI, &
849  kmask,ksize,jpatch)
850 !
851 ! Pack chemistry input and prognostic variables (modd_ch_isban) for each patch:
852 !
853 IF (im%CHI%SVI%NBEQ>0) THEN
854  IF( im%CHI%CCH_DRY_DEP == "WES89") THEN
855  CALL pack_ch_isba_patch_n(im%CHI, im%PKCI, &
856  kmask,ksize,im%I%NPATCH,jpatch)
857  END IF
858 END IF
859 !
860 ! Allocate ISBA diagnostics for each patch:
861 !
862  CALL pack_diag_patch_n(im%DGEI, im%DGI, im%DGMI, im%I, im%PKDI, &
863  ksize,iswb,jpatch)
864 !
865 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
866 ! Cosine of the slope typically encoutered in the grid mesh (including subgrid orography)
867 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
868 !
869 zp_slope_cos(:) = 1./sqrt(1.+im%PKI%XP_SSO_SLOPE(:)**2)
870 IF(lnosof)zp_slope_cos(:) = 1.0
871 !
872 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
873 ! Snow fractions
874 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
875 ! now caculated at the initialization and at the end of the time step
876 ! (see update_frac_alb_emis_isban.f90) in order to close the energy budget
877 ! between surfex and the atmosphere. This fact do not change the offline runs.
878 !
879 !
880 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
881 ! No implicitation of Tdeep
882 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
883 zp_tdeep_a = 0.
884 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
885 ! Flood properties
886 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
887 !
888 IF(im%I%LFLOOD)THEN
889  CALL isba_flood_properties(im%PKI%XP_LAI,im%PKI%XP_FFLOOD,im%PKI%XP_FFROZEN, &
890  zp_z0flood,zp_ffgnos,zp_ffvnos)
891 ELSE
892  zp_z0flood = xundef
893  zp_ffgnos = 0.0
894  zp_ffvnos = 0.0
895 ENDIF
896 !
897 ! For multi-energy balance
898  IF(gmeb)THEN
899  zsnowdepth(:) = sum(im%PKI%XP_SNOWSWE(:,:)/im%PKI%XP_SNOWRHO(:,:),2)
900  zpalphan(:)=mebpalphan(zsnowdepth,im%PKI%XP_H_VEG)
901  ENDIF
902 !
903 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
904 ! Surface Roughness lengths (m):
905 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
906 !
907 !* effective roughness
908 !
909  CALL z0eff(im%I, &
910  im%I%CROUGH, gmeb, zp_alfa, zp_zref, zp_uref, &
911  im%PKI%XP_Z0, im%PKI%XP_Z0REL, im%PKI%XP_PSN, &
912  zpalphan,im%PKI%XP_Z0LITTER, im%PKI%XP_SNOWSWE(:,1), &
913  im%PKI%XP_Z0EFFIP,im%PKI%XP_Z0EFFIM,im%PKI%XP_Z0EFFJP, &
914  im%PKI%XP_Z0EFFJM, im%PKI%XP_FF, zp_z0flood, &
915  im%PKI%XP_AOSIP,im%PKI%XP_AOSIM,im%PKI%XP_AOSJP,im%PKI%XP_AOSJM, &
916  im%PKI%XP_HO2IP,im%PKI%XP_HO2IM,im%PKI%XP_HO2JP,im%PKI%XP_HO2JM, &
917  im%PKI%XP_Z0_O_Z0H, im%PKDI%XP_Z0_WITH_SNOW, im%PKDI%XP_Z0H_WITH_SNOW, &
918  im%PKDI%XP_Z0EFF, zz0g_without_snow, &
919  zz0_mebv,zz0h_mebv,zz0eff_mebv, &
920  zz0_mebn,zz0h_mebn,zz0eff_mebn )
921 !
922 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
923 ! Shortwave computations for outputs (albedo for radiative scheme)
924 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
925 ! now caculated at the initialization and at the end of the time step
926 ! (see update_frac_alb_emis_isban.f90) in order to close the energy budget
927 ! between surfex and the atmosphere. This fact do not change the offline runs.
928 !
929 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
930 ! Shortwave computations for ISBA inputs (global snow-free albedo)
931 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
932 !
933 ! ISBA needs global incoming solar radiation: it currently does
934 ! not distinguish between the scattered and direct components,
935 ! or between different wavelengths.
936 !
937 !
938 !* Snow-free surface albedo for each wavelength
939 !
940  CALL isba_albedo(im%I%TSNOW%SCHEME, im%I%LTR_ML, gmeb, &
941  zp_dir_sw, zp_sca_sw, psw_bands,iswb, &
942  im%PKI%XP_ALBNIR, im%PKI%XP_ALBVIS, im%PKI%XP_ALBUV, &
943  im%PKI%XP_ALBNIR_VEG, im%PKI%XP_ALBVIS_VEG, im%PKI%XP_ALBUV_VEG, &
944  im%PKI%XP_ALBNIR_SOIL, im%PKI%XP_ALBVIS_SOIL, im%PKI%XP_ALBUV_SOIL, &
945  im%PKI%XP_ALBF, im%PKI%XP_FFV, im%PKI%XP_FFG, &
946  zp_global_sw, im%PKDI%XP_SNOWFREE_ALB, im%PKDI%XP_SNOWFREE_ALB_VEG, &
947  im%PKDI%XP_SNOWFREE_ALB_SOIL, zp_meb_sca_sw, &
948  zp_albnir_tveg, zp_albvis_tveg, &
949  zp_albnir_tsoil, zp_albvis_tsoil )
950 !
951 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
952 ! Intialize computation of ISBA water and energy budget
953 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
954 !
955  CALL isba_budget_init(im%DGEI, &
956  im%I%CISBA,im%I%TSNOW%SCHEME, &
957  im%PKI%XP_WG,im%PKI%XP_WGI,im%PKI%XP_WR,im%PKI%XP_SNOWSWE, &
958  im%PKI%XP_DG, im%PKI%XP_DZG, zp_wg_ini, &
959  zp_wgi_ini, zp_wr_ini, &
960  zp_swe_ini )
961 !
962 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
963 ! Over Natural Land Surfaces:
964 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
965 zirrig_gr(:)= 0.
966 !
967  CALL isba(im%I%CISBA, im%I%CPHOTO, im%I%LTR_ML, im%I%CRUNOFF, im%I%CKSAT, im%I%CRAIN, &
968  im%I%CHORT, im%I%CC1DRY, im%I%CSCOND, im%I%TSNOW%SCHEME, im%I%CSNOWRES, &
969  im%I%CCPSURF, im%I%CSOILFRZ, im%I%CDIFSFCOND, im%I%TTIME, im%I%LFLOOD, &
970  im%I%LTEMP_ARP, im%I%LGLACIER, gmeb, im%I%LFORC_MEASURE, im%I%LMEB_LITTER, &
971  im%I%LMEB_GNDRES, ptstep, &
972  cimplicit_wind, im%I%LAGRI_TO_GRASS, im%I%LSNOWDRIFT, im%I%LSNOWDRIFT_SUBLIM, &
973  im%I%LSNOW_ABS_ZENITH, im%I%CSNOWMETAMO, im%I%CSNOWRAD, im%I%XCGMAX, zp_zref, &
974  zp_uref, zp_slope_cos, zp_ta, zp_qa, zp_exna, zp_rhoa, zp_ps, zp_exns, zp_rain, &
975  zp_snow, zp_zenith, zp_meb_sca_sw, zp_global_sw, zp_lw, zp_wind, zp_pew_a_coef, &
976  zp_pew_b_coef, zp_pet_a_coef, zp_peq_a_coef, zp_pet_b_coef, zp_peq_b_coef, &
977  im%PKI%XP_RSMIN, im%PKI%XP_RGL, im%PKI%XP_GAMMA, im%PKI%XP_CV, im%PKI%XP_RUNOFFD, &
978  im%PKI%XP_SOILWGHT, im%I%NLAYER_HORT, im%I%NLAYER_DUN, zp_albnir_tveg, zp_albvis_tveg, &
979  zp_albnir_tsoil, zp_albvis_tsoil, im%PKDI%XP_SNOWFREE_ALB, im%PKI%XP_WRMAX_CF, &
980  im%PKI%XP_VEG, im%PKI%XP_LAI, im%PKI%XP_EMIS, im%PKDI%XP_Z0_WITH_SNOW, &
981  im%PKDI%XP_Z0H_WITH_SNOW, im%PKI%XP_VEGTYPE_PATCH, im%PKDI%XP_Z0EFF, &
982  im%PKI%XP_RGLV, im%PKI%XP_GAMMAV, im%PKI%XP_RSMINV, &
983  im%PKI%XP_ROOTFRACV, im%PKI%XP_WRMAX_CFV, im%PKI%XP_LAIV, im%PKI%XP_BSLAI, &
984  im%PKI%XP_LAIMIN,im%PKI%XP_H_VEG,zpalphan, zz0g_without_snow, zz0_mebv, &
985  zz0h_mebv,zz0eff_mebv, zz0_mebn,zz0h_mebn,zz0eff_mebn, im%PKI%XP_GNDLITTER, &
986  im%PKI%XP_RUNOFFB, im%PKI%XP_CGSAT, im%PKI%XP_C1SAT, im%PKI%XP_C2REF, &
987  im%PKI%XP_C3, im%PKI%XP_C4B, im%PKI%XP_C4REF, im%PKI%XP_ACOEF, im%PKI%XP_PCOEF, &
988  im%PKI%XP_TAUICE, im%PKI%XP_WDRAIN, zp_tdeep_a, im%PKI%XP_TDEEP, im%PKI%XP_GAMMAT, &
989  im%PKI%XP_PSN, im%PKI%XP_PSNG, im%PKI%XP_PSNV, im%PKI%XP_PSNV_A, &
990  im%PKDI%XP_SNOWFREE_ALB_VEG, im%PKDI%XP_SNOWFREE_ALB_SOIL, im%PKI%XP_IRRIG, &
991  im%PKI%XP_WATSUP, im%PKI%XP_THRESHOLD, im%PKI%XP_LIRRIGATE, im%PKI%XP_LIRRIDAY, &
992  im%PKI%LP_STRESS, im%PKI%XP_GC, im%PKI%XP_F2I, im%PKI%XP_DMAX, im%PKI%XP_AH, &
993  im%PKI%XP_BH, zp_co2, im%PKI%XP_GMES, im%I%XPOI, im%PKI%XP_FZERO, im%PKI%XP_EPSO, &
994  im%PKI%XP_GAMM, im%PKI%XP_QDGAMM, im%PKI%XP_QDGMES, im%PKI%XP_T1GMES, im%PKI%XP_T2GMES, &
995  im%PKI%XP_AMAX, im%PKI%XP_QDAMAX, im%PKI%XP_T1AMAX, im%PKI%XP_T2AMAX, im%I%XABC, &
996  im%PKI%XP_DG, im%PKI%XP_DZG, im%PKI%XP_DZDIF, im%PKI%NK_WG_LAYER, im%PKI%XP_ROOTFRAC, &
997  im%PKI%XP_WFC, im%PKI%XP_WWILT, im%PKI%XP_WSAT, im%PKI%XP_BCOEF, im%PKI%XP_CONDSAT, &
998  im%PKI%XP_MPOTSAT, im%PKI%XP_HCAPSOIL, im%PKI%XP_CONDDRY, im%PKI%XP_CONDSLD, im%PKI%XP_D_ICE, &
999  im%PKI%XP_KSAT_ICE, im%PKI%XP_MUF, im%PKI%XP_FF, im%PKI%XP_FFG, im%PKI%XP_FFV, zp_ffgnos, &
1000  zp_ffvnos, im%PKI%XP_FFROZEN, im%PKI%XP_ALBF, im%PKI%XP_EMISF, im%PKI%XP_FFLOOD, im%PKI%XP_PIFLOOD, &
1001  im%PKDI%XP_IFLOOD, im%PKDI%XP_PFLOOD, im%PKDI%XP_LE_FLOOD, im%PKDI%XP_LEI_FLOOD, im%I%XSODELX, &
1002  im%PKI%XP_LAT, im%PKI%XP_LON, im%PKI%XP_TG, im%PKI%XP_WG, im%PKI%XP_WGI, im%PKI%XP_CPS, &
1003  im%PKI%XP_LVTT, im%PKI%XP_LSTT, im%PKI%XP_WR, im%PKI%XP_WRL, im%PKI%XP_WRLI, im%PKI%XP_WRVN, &
1004  im%PKI%XP_TV, im%PKI%XP_TL, &
1005  im%PKI%XP_RESA, im%PKI%XP_ANFM, im%PKI%XP_FSAT, im%PKI%XP_SNOWALB, im%PKI%XP_SNOWALBVIS, &
1006  im%PKI%XP_SNOWALBNIR, im%PKI%XP_SNOWALBFIR, im%PKI%XP_SNOWSWE, im%PKI%XP_SNOWHEAT, &
1007  im%PKI%XP_SNOWRHO, im%PKI%XP_SNOWGRAN1, im%PKI%XP_SNOWGRAN2, im%PKI%XP_SNOWHIST, im%PKI%XP_SNOWAGE, &
1008  im%PKDI%XP_GRNDFLUX, im%PKDI%XP_HPSNOW, im%PKDI%XP_SNOWHMASS, im%PKDI%XP_RNSNOW, im%PKDI%XP_HSNOW, &
1009  im%PKDI%XP_GFLUXSNOW, im%PKDI%XP_USTARSNOW, im%PKDI%XP_SRSFC, im%PKDI%XP_RRSFC, im%PKDI%XP_LESL, &
1010  im%PKI%XP_SNOWEMIS, im%PKDI%XP_CDSNOW, im%PKDI%XP_CHSNOW, im%PKDI%XP_TSRAD, im%PKDI%XP_TS, &
1011  im%PKDI%XP_HV, im%PKDI%XP_QS, im%PKDI%XP_SNOWTEMP, im%PKDI%XP_SNOWLIQ, im%PKDI%XP_SNOWDZ, &
1012  im%PKDI%XP_CG, im%PKDI%XP_C1, im%PKDI%XP_C2, im%PKDI%XP_WGEQ, im%PKDI%XP_CT, im%PKDI%XP_CH, im%PKDI%XP_CD, &
1013  im%PKDI%XP_CDN, im%PKDI%XP_RI, im%PKDI%XP_HU, im%PKDI%XP_HUG, zp_emis, im%PKDI%XP_ALBT, im%PKDI%XP_RS, &
1014  im%PKI%XP_LE, im%PKDI%XP_RN, im%PKDI%XP_H, im%PKDI%XP_LEI, im%PKDI%XP_LEGI, im%PKDI%XP_LEG, im%PKDI%XP_LEV, &
1015  im%PKDI%XP_LES, im%PKDI%XP_LER, im%PKDI%XP_LETR, im%PKDI%XP_EVAP, im%PKDI%XP_GFLUX, im%PKDI%XP_RESTORE, &
1016  zp_ustar, im%PKDI%XP_DRAIN, im%PKDI%XP_RUNOFF, im%PKDI%XP_MELT, im%PKDI%XP_MELTADV, im%PKI%XP_TC, &
1017  im%PKI%XP_QC, im%PKDI%XP_RN_ISBA, im%PKDI%XP_H_ISBA, im%PKDI%XP_LEG_ISBA, im%PKDI%XP_LEGI_ISBA, &
1018  im%PKDI%XP_LEV_ISBA, im%PKDI%XP_LETR_ISBA, im%PKDI%XP_USTAR_ISBA, im%PKDI%XP_LER_ISBA, im%PKDI%XP_LE_ISBA, &
1019  im%PKDI%XP_LEI_ISBA, im%PKDI%XP_GFLUX_ISBA, im%PKDI%XP_HORT, im%PKDI%XP_DRIP, im%PKDI%XP_RRVEG, &
1020  zp_ac_agg, zp_hu_agg, im%PKI%XP_FAPARC, im%PKI%XP_FAPIRC, im%PKI%XP_MUS, im%PKI%XP_LAI_EFFC, im%PKI%XP_AN, &
1021  im%PKI%XP_ANDAY, zp_resp_biomass_inst, im%PKDI%XP_IACAN, im%PKI%XP_ANF, im%PKDI%XP_GPP, im%PKDI%XP_FAPAR, &
1022  im%PKDI%XP_FAPIR, im%PKDI%XP_FAPAR_BS, im%PKDI%XP_FAPIR_BS, im%PKDI%XP_IRRIG_FLUX, zp_deep_flux, &
1023  im%PKDI%XP_SWNET_V, im%PKDI%XP_SWNET_G, im%PKDI%XP_SWNET_N, im%PKDI%XP_SWNET_NS, im%PKDI%XP_LWNET_V, &
1024  im%PKDI%XP_LWNET_G, im%PKDI%XP_LWNET_N, im%PKDI%XP_LEVCV, im%PKDI%XP_LESC, im%PKDI%XP_H_V_C, &
1025  im%PKDI%XP_H_G_C, im%PKDI%XP_LETRGV, im%PKDI%XP_LETRCV, im%PKDI%XP_LERGV, im%PKDI%XP_LELITTER, &
1026  im%PKDI%XP_LELITTERI,im%PKDI%XP_DRIPLIT,im%PKDI%XP_RRLIT, im%PKDI%XP_LERCV, im%PKDI%XP_H_C_A, &
1027  im%PKDI%XP_H_N_C, im%PKDI%XP_LE_C_A, im%PKDI%XP_LE_V_C, im%PKDI%XP_LE_G_C,im%PKDI%XP_LE_N_C, &
1028  im%PKDI%XP_EVAP_N_C, im%PKDI%XP_EVAP_G_C, im%PKDI%XP_SR_GN, im%PKDI%XP_MELTCV, im%PKDI%XP_FRZCV, &
1029  im%PKDI%XP_SWDOWN_GN, im%PKDI%XP_LWDOWN_GN, zirrig_gr, im%PKI%XP_TOPQS, im%PKDI%XP_QSB, im%PKDI%XP_SUBL, &
1030  im%PKI%XP_FWTD, im%PKI%XP_WTD, im%PKDI%XP_SNDRIFT )
1031 !
1032 zp_trad=im%PKDI%XP_TSRAD
1033 !
1034 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1035 ! Glacier : ice runoff flux (especally for Earth System Model)
1036 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1037 !
1038 IF(im%I%LGLACIER)THEN
1039 !
1040  CALL hydro_glacier(im%I, &
1041  ptstep,zp_snow,im%PKI%XP_SNOWRHO,im%PKI%XP_SNOWSWE,im%PKI%XP_ICE_STO,im%PKDI%XP_ICEFLUX)
1042 !
1043 ENDIF
1044 !
1045 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1046 ! Calculation of ISBA water and energy budget (and time tendencies of each reservoir)
1047 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1048 !
1049  CALL isba_budget(im%DGEI, &
1050  im%I%CISBA,im%I%TSNOW%SCHEME,im%I%LGLACIER,ptstep, &
1051  im%PKI%XP_WG,im%PKI%XP_WGI,im%PKI%XP_WR,im%PKI%XP_SNOWSWE, &
1052  im%PKI%XP_DG,im%PKI%XP_DZG,zp_wg_ini,zp_wgi_ini,zp_wr_ini, &
1053  zp_swe_ini,zp_rain,zp_snow,im%PKDI%XP_EVAP,im%PKDI%XP_DRAIN,&
1054  im%PKDI%XP_RUNOFF,im%PKDI%XP_IFLOOD,im%PKDI%XP_PFLOOD, &
1055  im%PKDI%XP_LE_FLOOD, im%PKDI%XP_LEI_FLOOD, &
1056  im%PKDI%XP_ICEFLUX,im%PKDI%XP_IRRIG_FLUX,im%PKDI%XP_SNDRIFT,&
1057  im%PKI%XP_LVTT, im%PKI%XP_LSTT, &
1058  im%PKDI%XP_DWG,im%PKDI%XP_DWGI,im%PKDI%XP_DWR, &
1059  im%PKDI%XP_DSWE,im%PKDI%XP_WATBUD )
1060 !
1061 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1062 ! Evolution of soil albedo, when depending on surface soil wetness:
1063 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1064 !
1065 IF (im%I%CALBEDO=='EVOL' .AND. im%I%LECOCLIMAP) THEN
1066  CALL soil_albedo(im%I%CALBEDO, &
1067  im%PKI%XP_WSAT(:,1),im%PKI%XP_WG(:,1), &
1068  im%PKI%XP_ALBVIS_DRY,im%PKI%XP_ALBNIR_DRY,im%PKI%XP_ALBUV_DRY, &
1069  im%PKI%XP_ALBVIS_WET,im%PKI%XP_ALBNIR_WET,im%PKI%XP_ALBUV_WET, &
1070  im%PKI%XP_ALBVIS_SOIL,im%PKI%XP_ALBNIR_SOIL,im%PKI%XP_ALBUV_SOIL )
1071  !
1072  CALL albedo(im%I%CALBEDO, &
1073  im%PKI%XP_ALBVIS_VEG,im%PKI%XP_ALBNIR_VEG,im%PKI%XP_ALBUV_VEG,im%PKI%XP_VEG, &
1074  im%PKI%XP_ALBVIS_SOIL,im%PKI%XP_ALBNIR_SOIL,im%PKI%XP_ALBUV_SOIL, &
1075  im%PKI%XP_ALBVIS,im%PKI%XP_ALBNIR,im%PKI%XP_ALBUV )
1076 END IF
1077 !
1078 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1079 ! Vegetation evolution for interactive LAI
1080 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1081 !
1082 IF (im%I%CPHOTO=='LAI' .OR. im%I%CPHOTO=='LST' .OR. im%I%CPHOTO=='NIT' .OR. im%I%CPHOTO=='NCB') THEN
1083  CALL vegetation_evol(im%I%CISBA, im%I%CPHOTO, im%I%CRESPSL, im%I%CALBEDO, lagrip, im%I%LTR_ML, &
1084  im%I%LNITRO_DILU, im%I%LAGRI_TO_GRASS, im%DTI%LIMP_VEG, im%DTI%LIMP_Z0, im%DTI%LIMP_EMIS, &
1085  ptstep, kmonth, kday, im%I%NSPINW, ptime, im%PKI%XP_LAT, zp_rhoa, &
1086  im%PKI%XP_DG, im%PKI%XP_DZG, im%PKI%NK_WG_LAYER, &
1087  im%PKI%XP_TG, im%PKI%XP_ALBNIR_VEG, im%PKI%XP_ALBVIS_VEG, im%PKI%XP_ALBUV_VEG, &
1088  im%PKI%XP_ALBNIR_SOIL, im%PKI%XP_ALBVIS_SOIL, im%PKI%XP_ALBUV_SOIL, &
1089  im%PKI%XP_VEGTYPE_PATCH, im%PKI%XP_SEFOLD, im%PKI%XP_ANMAX, im%PKI%XP_H_TREE, im%PKI%XP_BSLAI,&
1090  im%PKI%XP_LAIMIN, zp_co2, im%PKI%XP_CE_NITRO, im%PKI%XP_CF_NITRO, im%PKI%XP_CNA_NITRO, &
1091  im%PKI%XP_BSLAI_NITRO, im%PKI%XP_GMES, im%PKI%XP_TAU_WOOD, im%PKI%TP_SEED, &
1092  im%PKI%TP_REAP, im%PKI%XP_AOSIP, im%PKI%XP_AOSIM, im%PKI%XP_AOSJP, im%PKI%XP_AOSJM, &
1093  im%PKI%XP_HO2IP, im%PKI%XP_HO2IM, im%PKI%XP_HO2JP, im%PKI%XP_HO2JM, im%PKI%XP_Z0EFFIP, &
1094  im%PKI%XP_Z0EFFIM, im%PKI%XP_Z0EFFJP, im%PKI%XP_Z0EFFJM, im%PKI%XP_LAI, im%PKI%XP_VEG, &
1095  im%PKI%XP_Z0, im%PKI%XP_ALBNIR, im%PKI%XP_ALBVIS, im%PKI%XP_ALBUV, im%PKI%XP_EMIS, &
1096  im%PKI%XP_ANFM, im%PKI%XP_ANDAY, im%PKI%XP_BIOMASS, im%PKI%XP_RESP_BIOMASS, &
1097  zp_resp_biomass_inst, im%PKI%XP_INCREASE, im%PKI%XP_TURNOVER, &
1098  ! add optional for accurate dependency to nitrogen
1099  ! limitation
1100  pswdir=zp_global_sw )
1101 END IF
1102 !
1103 !
1104 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1105 ! Diagnostic of respiration carbon fluxes and soil carbon evolution
1106 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1107 !
1108 zp_sfco2(:)=0.
1109 im%PKDI%XP_RESP_ECO (:)=0.
1110 im%PKDI%XP_RESP_AUTO(:)=0.
1111 !
1112 IF ( im%I%CPHOTO/='NON' .AND. im%I%CRESPSL/='NON' .AND. any(im%PKI%XP_LAI(:)/=xundef) ) THEN
1113  CALL carbon_evol(im%I%CISBA, im%I%CRESPSL, im%I%CPHOTO, ptstep, im%I%NSPINS, &
1114  zp_rhoa, im%PKI%XP_TG, im%PKI%XP_WG, im%PKI%XP_WFC, im%PKI%XP_WWILT, im%PKI%XP_WSAT, im%PKI%XP_SAND,&
1115  im%PKI%XP_DG, im%PKI%XP_DZG, im%PKI%NK_WG_LAYER, &
1116  im%PKI%XP_RE25, im%PKI%XP_LAI, zp_resp_biomass_inst, im%PKI%XP_TURNOVER, &
1117  im%PKI%XP_LITTER, im%PKI%XP_LIGNIN_STRUC , im%PKI%XP_SOILCARB, &
1118  im%PKDI%XP_RESP_AUTO, im%PKDI%XP_RESP_ECO )
1119  ! calculation of vegetation CO2 flux
1120  ! Positive toward the atmosphere
1121  zp_sfco2(:) = im%PKDI%XP_RESP_ECO(:) - im%PKDI%XP_GPP(:)
1122 END IF
1123 !
1124 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1125 ! Reset effecitve roughness lentgh to its nominal value when snow has just disappeared
1126 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1127 !
1128  CALL subscale_z0eff(im%PKI%XP_AOSIP,im%PKI%XP_AOSIM,im%PKI%XP_AOSJP,im%PKI%XP_AOSJM, &
1129  im%PKI%XP_HO2IP,im%PKI%XP_HO2IM,im%PKI%XP_HO2JP,im%PKI%XP_HO2JM,im%PKI%XP_Z0, &
1130  im%PKI%XP_Z0EFFIP,im%PKI%XP_Z0EFFIM,im%PKI%XP_Z0EFFJP,im%PKI%XP_Z0EFFJM, &
1131  omask=(im%PKI%XP_SNOWSWE(:,1)==0. .AND. im%PKI%XP_PSN(:)>0.) )
1132 !
1133 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1134 ! Turbulent fluxes
1135 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1136 !
1137 zp_sfth(:) = im%PKDI%XP_H(:)
1138 zp_sftq(:) = im%PKDI%XP_EVAP(:)
1139 
1140 zp_sfu(:) = 0.
1141 zp_sfv(:) = 0.
1142 WHERE (zp_wind>0.)
1143  zp_sfu(:) = - zp_u(:)/zp_wind(:) * zp_ustar(:)**2 * zp_rhoa(:)
1144  zp_sfv(:) = - zp_v(:)/zp_wind(:) * zp_ustar(:)**2 * zp_rhoa(:)
1145 END WHERE
1146 !
1147 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1148 ! Scalar fluxes
1149 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1150 !
1151 zp_sfts(:,:) = 0.
1152 !
1153 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1154 !
1155 ! --------------------------------------------------------------------------------------
1156 ! Chemical dry deposition :
1157 ! --------------------------------------------------------------------------------------
1158 IF (im%CHI%SVI%NBEQ>0) THEN
1159  IF( im%CHI%CCH_DRY_DEP == "WES89") THEN
1160 
1161  CALL ch_dep_isba(zp_ustar, im%PKDI%XP_HU, im%PKI%XP_PSN, &
1162  im%PKI%XP_VEG, im%PKI%XP_LAI, im%PKI%XP_SAND, im%PKI%XP_CLAY, im%PKI%XP_RESA, &
1163  im%PKDI%XP_RS(:), im%PKI%XP_Z0(:), &
1164  zp_ta, zp_pa, zp_trad(:), &
1165  im%PKI%XP_VEGTYPE_PATCH(:,nvt_no), &
1166  im%PKI%XP_VEGTYPE_PATCH(:,nvt_rock), &
1167  im%CHI%SVI%CSV(im%CHI%SVI%NSV_CHSBEG:im%CHI%SVI%NSV_CHSEND), &
1168  im%PKCI%XP_SOILRC_SO2, im%PKCI%XP_SOILRC_O3 , &
1169  im%PKCI%XP_DEP(:,1:im%CHI%SVI%NBEQ) )
1170 
1171  zp_sfts(:,im%CHI%SVI%NSV_CHSBEG:im%CHI%SVI%NSV_CHSEND) = - zp_sv(:,im%CHI%SVI%NSV_CHSBEG:im%CHI%SVI%NSV_CHSEND) &
1172  * im%PKCI%XP_DEP(:,1:im%CHI%SVI%NBEQ)
1173  IF (im%CHI%SVI%NAEREQ > 0 ) THEN
1174  CALL ch_aer_dep(zp_sv(:,im%CHI%SVI%NSV_AERBEG:im%CHI%SVI%NSV_AEREND),&
1175  zp_sfts(:,im%CHI%SVI%NSV_AERBEG:im%CHI%SVI%NSV_AEREND),&
1176  zp_ustar, im%PKI%XP_RESA,zp_ta,zp_rhoa)
1177  END IF
1178  ELSE
1179  zp_sfts(:,im%CHI%SVI%NSV_CHSBEG:im%CHI%SVI%NSV_CHSEND) = 0.
1180  zp_sfts(:,im%CHI%SVI%NSV_AERBEG:im%CHI%SVI%NSV_AEREND) = 0.
1181  ENDIF
1182 ENDIF
1183 !
1184 ! --------------------------------------------------------------------------------------
1185 ! Dust deposition and emission:
1186 ! --------------------------------------------------------------------------------------
1187 !
1188 IF(im%CHI%SVI%NDSTEQ>0)THEN
1189  idst = im%CHI%SVI%NSV_DSTEND - im%CHI%SVI%NSV_DSTBEG + 1
1190 
1191  CALL coupling_dst_n(dst, im%PKI, &
1192  hprogram, &!I [char] Name of program
1193  ksize, &!I [nbr] number of points in patch
1194  idst, &!I [nbr] number of dust emissions variables
1195  jpatch, &!I [idx] patch in question
1196  im%PKI%XP_CLAY(:,1), &!I [frc] mass fraction clay in first soil layer
1197  zp_ps, &!I [Pa] surface pressure
1198  im%PKDI%XP_TS, &!I [K] surface temperature
1199  zp_qa, &!I [kg/kg] specific humidity
1200  im%PKI%XP_RESA, &!I [s/m] atmospheric resistance
1201  zp_rhoa, &!I [kg/m3] atmospheric density
1202  im%PKI%XP_SAND(:,1), &!I [frc] mass fraction of sand in first soil layer
1203  zp_pa, &!I [K] Atmospheric pressure
1204  zp_ta, &!I [K] Atmospheric temperature
1205  im%PKI%XP_TG(:,1), &!I [K] Ground temperature
1206  zp_u, &!I [m/s] zonal wind at atmospheric height
1207  zp_uref, &!I [m] reference height of wind
1208  zp_v, &!I [m/s] meridional wind at atmospheric height
1209  im%PKI%XP_WG(:,1), &!I [m3/m3] ground volumetric water content
1210  im%PKI%XP_WSAT(:,1), &!I [m3/m3] saturation volumetric water content
1211  zp_zref, &!I [m] reference height of wind
1212  im%PKDI%XP_CD, &!I [] Drag Coefficient for momentum
1213  im%PKDI%XP_CDN, &!I [] Drag neutral Coefficient for momentum
1214  im%PKDI%XP_CH, &!I [] drag coefficient for heat
1215  im%PKDI%XP_RI, &!I [] Richardson number
1216  im%PKDI%XP_Z0H_WITH_SNOW, &!I [frc] Z0 (heat) with snow
1217  zp_sfts(:,im%CHI%SVI%NSV_DSTBEG:im%CHI%SVI%NSV_DSTEND) &!O [kg/m2/sec] flux of dust
1218  )
1219 !
1220  IF (im%CHI%SVI%NSV_AEREND > 0) THEN ! case of dust/ anthropogenic aerosols coupling
1221  DO jmode=1,ndstmde
1222  !
1223  !Make index which is 0 for first mode, 3 for second, 6 for third etc
1224  IF (lvarsig_dst) THEN
1225  jsv_idx = (jmode-1)*3
1226  ELSE IF (lrgfix_dst) THEN
1227  jsv_idx = jmode-2
1228  ELSE
1229  jsv_idx = (jmode-1)*2
1230  END IF
1231  !
1232  DO jsv=1, size(hsv)
1233  IF ((trim(hsv(jsv)) == "@DSTI").AND.(jmode==3)) THEN
1234  ! add dust flux and conversion kg/m2/s into molec.m2/s
1235  zp_sfts(:,jsv) = zp_sfts(:,jsv) + zp_sfts(:,im%CHI%SVI%NSV_DSTBEG-1+jsv_idx+2)*xavogadro/xmolarweight_dst
1236  END IF
1237  IF ( (trim(hsv(jsv)) == "@DSTJ").AND.(jmode==2)) THEN
1238  ! add dust flux and conversion kg/m2/sec into molec.m2/s
1239  zp_sfts(:,jsv) = zp_sfts(:,jsv) + zp_sfts(:,im%CHI%SVI%NSV_DSTBEG-1+jsv_idx+2)*xavogadro/xmolarweight_dst
1240  END IF
1241  END DO
1242  !
1243  END DO
1244  END IF
1245 !
1246 !Modify fluxes due to dry deposition, we introduce a negative flux where dust is lost
1247  CALL dslt_dep(zp_sv(:,im%CHI%SVI%NSV_DSTBEG:im%CHI%SVI%NSV_DSTEND), &
1248  zp_sfts(:,im%CHI%SVI%NSV_DSTBEG:im%CHI%SVI%NSV_DSTEND), &
1249  zp_ustar, im%PKI%XP_RESA, zp_ta, zp_rhoa, dst%XEMISSIG_DST, dst%XEMISRADIUS_DST, &
1250  jpmode_dst, xdensity_dst, xmolarweight_dst, zconvertfacm0_dst, &
1251  zconvertfacm6_dst, zconvertfacm3_dst, lvarsig_dst, lrgfix_dst, &
1252  cvermod )
1253 !
1254 !Transfer these fluxes to fluxes understandable by all moments
1255  CALL massflux2momentflux( &
1256  zp_sfts(:,im%CHI%SVI%NSV_DSTBEG:im%CHI%SVI%NSV_DSTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
1257  zp_rhoa, & !I [kg/m3] air density
1258  dst%XEMISRADIUS_DST, &!I [um] emitted radius for the modes (max 3)
1259  dst%XEMISSIG_DST, &!I [-] emitted sigma for the different modes (max 3)
1260  ndstmde, &
1261  zconvertfacm0_dst, &
1262  zconvertfacm6_dst, &
1263  zconvertfacm3_dst, &
1264  lvarsig_dst, lrgfix_dst )
1265 !
1266 ENDIF !Check on CDSTYN
1267 !
1268 ! --------------------------------------------------------------------------------------
1269 ! Sea Salt deposition
1270 ! --------------------------------------------------------------------------------------
1271 !
1272 IF (im%CHI%SVI%NSLTEQ>0) THEN
1273  CALL dslt_dep(zp_sv(:,im%CHI%SVI%NSV_SLTBEG:im%CHI%SVI%NSV_SLTEND), &
1274  zp_sfts(:,im%CHI%SVI%NSV_SLTBEG:im%CHI%SVI%NSV_SLTEND), &
1275  zp_ustar, im%PKI%XP_RESA, zp_ta, zp_rhoa, slt%XEMISSIG_SLT, slt%XEMISRADIUS_SLT, &
1276  jpmode_slt, xdensity_slt, xmolarweight_slt, zconvertfacm0_slt, &
1277  zconvertfacm6_slt, zconvertfacm3_slt, lvarsig_slt, lrgfix_slt, &
1278  cvermod )
1279 
1280  CALL massflux2momentflux( &
1281  zp_sfts(:,im%CHI%SVI%NSV_SLTBEG:im%CHI%SVI%NSV_SLTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
1282  zp_rhoa, & !I [kg/m3] air density
1283  slt%XEMISRADIUS_SLT, &!I [um] emitted radius for the modes (max 3)
1284  slt%XEMISSIG_SLT, &!I [-] emitted sigma for the different modes (max 3)
1285  nsltmde, &
1286  zconvertfacm0_slt, &
1287  zconvertfacm6_slt, &
1288  zconvertfacm3_slt, &
1289  lvarsig_slt, lrgfix_slt )
1290 ENDIF !Check on CSLTYN
1291 !
1292 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1293 ! Inline diagnostics
1294 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1295 !
1296  CALL diag_inline_isba_n(im%DGEI, im%DGI, im%I, im%PKDI, &
1297  zp_ta, im%PKDI%XP_TS, zp_qa, zp_pa, zp_ps, zp_rhoa, zp_u, zp_v, &
1298  zp_zref, zp_uref, &
1299  im%PKDI%XP_CD, im%PKDI%XP_CDN, im%PKDI%XP_CH, im%PKDI%XP_RI, &
1300  im%PKDI%XP_HU, im%PKDI%XP_Z0_WITH_SNOW, &
1301  im%PKDI%XP_Z0H_WITH_SNOW, im%PKDI%XP_Z0EFF, &
1302  zp_sfth, zp_sftq, zp_sfu, zp_sfv, im%PKDI%XP_QS, &
1303  im%PKI%XP_DIR_ALB_WITH_SNOW, im%PKI%XP_SCA_ALB_WITH_SNOW, &
1304  zp_dir_sw, zp_sca_sw, zp_lw, im%PKDI%XP_RN )
1305 !
1306 !
1307 !-------------------------------------------------------------------------------
1308 !Physical properties see by the atmosphere in order to close the energy budget
1309 !between surfex and the atmosphere. All variables should be at t+1 but very
1310 !difficult to do. Maybe it will be done later. However, Ts can be at time t+1
1311 !-------------------------------------------------------------------------------
1312 !
1313 zp_tsurf(:) = im%PKDI%XP_TS (:)
1314 zp_z0(:) = im%PKDI%XP_Z0_WITH_SNOW (:)
1315 zp_z0h(:) = im%PKDI%XP_Z0H_WITH_SNOW(:)
1316 zp_qsurf(:) = im%PKDI%XP_QS (:)
1317 !
1318 !-------------------------------------------------------------------------------
1319 !
1320 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1321 ! Isba offline diagnostics for each patch
1322 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1323 !
1324  CALL diag_evap_isba_n(im%DGEI, im%DGI, im%I, im%PKDI, im%PKI, &
1325  im%I%CPHOTO,ptstep,kmask,ksize,jpatch,zp_rhoa)
1326 !
1327 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1328 ! Isba offline diagnostics for miscellaneous terms over each patch
1329 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1330 !
1331  CALL diag_misc_isba_n(im%DGMI, im%PKDI, &
1332  ptstep, im%I%CISBA, im%I%CPHOTO, im%I%TSNOW%SCHEME, lagrip, im%I%LTR_ML, &
1333  ptime, ksize, jpatch, kmask, im%PKI%XP_THRESHOLD, &
1334  im%PKI%XP_PSN, im%PKI%XP_PSNG, im%PKI%XP_PSNV, im%PKI%XP_FF, im%PKI%XP_FFG, im%PKI%XP_FFV, &
1335  im%PKI%XP_WG, im%PKI%XP_WGI, im%PKI%XP_WFC, im%PKI%XP_WWILT, im%PKI%XP_SNOWSWE, im%PKI%XP_SNOWRHO,&
1336  im%PKI%XP_FAPARC, im%PKI%XP_FAPIRC, im%PKI%XP_LAI_EFFC, im%PKI%XP_MUS, im%PKI%XP_FSAT, &
1337  im%PKI%XP_DG, im%PKI%XP_TG )
1338 !
1339 ! Unpack ISBA diagnostics (modd_diag_isban) for each patch:ISIZE_MAX = MAXVAL(NSIZE_NATURE_P)
1340 
1341 ! (MUST be done BEFORE UNPACK_ISBA_PATCH, because of XP_LE)
1342 !
1343  CALL unpack_diag_patch_n(im%DGI, im%GB, im%I, im%PKDI, im%PKI, &
1344  kmask,ksize,im%I%NPATCH,jpatch, &
1345  zcpl_drain,zcpl_runoff,zcpl_eflood,zcpl_pflood, &
1346  zcpl_iflood, zcpl_iceflux)
1347 !
1348 ! for chemical deposition
1349 !
1350 IF (im%CHI%SVI%NBEQ>0) THEN
1351  IF( im%CHI%CCH_DRY_DEP == "WES89") THEN
1352  CALL unpack_ch_isba_patch_n(im%CHI, im%PKCI, &
1353  kmask,ksize,im%I%NPATCH,jpatch)
1354  END IF
1355 END IF
1356 !
1357 ! Unpack ISBA variables (modd_isban) for each patch:
1358 !
1359  CALL unpack_isba_patch_n(im%AG, im%I, im%PKI, &
1360  kmask,ksize,jpatch)
1361 !
1362 !----------------------------------------------------------------------
1363 !
1364 ! for further chemical biogenic emissions
1365 !
1366 IF (im%CHI%SVI%NBEQ>0 .AND. im%CHI%LCH_BIO_FLUX) THEN
1367  !
1368  DO jj=1,ksize
1369  zsw_forbio(kmask(jj),jpatch) = 0.
1370  ENDDO
1371  !
1372  DO jswb=1,iswb
1373 !cdir nodep
1374 !cdir unroll=8
1375  DO jj=1,ksize
1376  zsw_forbio(kmask(jj),jpatch) = zsw_forbio(kmask(jj),jpatch) &
1377  + zp_dir_sw(jj,jswb) + zp_sca_sw(jj,jswb)
1378  ENDDO
1379  ENDDO
1380  !
1381 ENDIF
1382 !----------------------------------------------------------------------
1383 !
1384 ! Unpack output dummy arguments for each patch:
1385 !
1386 IF (im%I%NPATCH==1) THEN
1387  zsftq_tile(:,jpatch) = zp_sftq(:)
1388  zsfth_tile(:,jpatch) = zp_sfth(:)
1389  zsfts_tile(:,:,jpatch)= zp_sfts(:,:)
1390  zsfco2_tile(:,jpatch) = zp_sfco2(:)
1391  zsfu_tile(:,jpatch) = zp_sfu(:)
1392  zsfv_tile(:,jpatch) = zp_sfv(:)
1393  ztrad_tile(:,jpatch) = zp_trad(:)
1394  ztsurf_tile(:,jpatch) = zp_tsurf(:)
1395  zz0_tile(:,jpatch) = zp_z0(:)
1396  zz0h_tile(:,jpatch) = zp_z0h(:)
1397  zqsurf_tile(:,jpatch) = zp_qsurf(:)
1398 ELSE
1399 !cdir nodep
1400 !cdir unroll=8
1401  DO jj=1,ksize
1402  ji = kmask(jj)
1403  zsftq_tile(ji,jpatch) = zp_sftq(jj)
1404  zsfth_tile(ji,jpatch) = zp_sfth(jj)
1405  zsfco2_tile(ji,jpatch) = zp_sfco2(jj)
1406  zsfu_tile(ji,jpatch) = zp_sfu(jj)
1407  zsfv_tile(ji,jpatch) = zp_sfv(jj)
1408  ztrad_tile(ji,jpatch) = zp_trad(jj)
1409  ztsurf_tile(ji,jpatch) = zp_tsurf(jj)
1410  zz0_tile(ji,jpatch) = zp_z0(jj)
1411  zz0h_tile(ji,jpatch) = zp_z0h(jj)
1412  zqsurf_tile(ji,jpatch) = zp_qsurf(jj)
1413  ENDDO
1414 !
1415 !cdir nodep
1416 !cdir unroll=8
1417  DO jk=1,SIZE(zp_sfts,2)
1418  DO jj=1,ksize
1419  ji=kmask(jj)
1420  zsfts_tile(ji,jk,jpatch)= zp_sfts(jj,jk)
1421  ENDDO
1422  ENDDO
1423 ENDIF
1424 !
1425 !----------------------------------------------------------------------
1426 !
1427 ! Get output dust flux if we are calculating dust
1428 IF (ndstmde .GE. 1) imoment = int(idst / ndstmde)
1429 IF (im%CHI%SVI%NDSTEQ>0) THEN
1430  DO jsv = 1,ndstmde
1431  IF (imoment == 1) THEN
1432  dst%XSFDST(:,jsv,jpatch)=zsfts_tile(:,ndst_mdebeg+jsv-1,jpatch)
1433  ELSE
1434  dst%XSFDST(:,jsv,jpatch)=zsfts_tile(:,ndst_mdebeg+(jsv-1)*imoment+1,jpatch)
1435  END IF
1436 
1437  dst%XSFDSTM(:,jsv,jpatch)=dst%XSFDSTM(:,jsv,jpatch) + dst%XSFDST(:,jsv,jpatch) * ptstep
1438  ENDDO
1439 ENDIF
1440 !
1441 IF (lhook) CALL dr_hook('COUPLING_ISBA_n:TREAT_PATCH',1,zhook_handle)
1442 !
1443 END SUBROUTINE treat_patch
1444 !==========================================================================================
1445 END SUBROUTINE coupling_isba_n
subroutine pack_isba_patch_get_size_n(I, PKI, KPATCH)
subroutine isba_budget(DGEI, HISBA, HSNOW_ISBA, OGLACIER, PTSTEP, PWG, PWGI, PWR, PSNOWSWE, PDG, PDZG, PWG_INI, PWGI_INI, PWR_INI, PSWE_INI, PRAIN, PSNOW, PEVAP, PDRAIN, PRUNOFF, PIFLOOD, PPFLOOD, PLE_FLOOD, PLEI_FLOOD, PICEFLUX, PIRRIG_FLUX, PSNDRIFT, PLVTT, PLSTT, PDWG, PDWGI, PDWR, PDSWE, PWATBUD)
Definition: isba_budget.F90:6
subroutine deepsoil_update(I, KMONTH)
subroutine coupling_surf_topd(DGEI, DGMI, IG, I, UG, U, HPROGRAM, KI)
subroutine isba_flood_properties(PLAI, PFFLOOD, PFFROZEN, PZ0FLOOD, PFFG_NOSNOW, PFFV_NOSNOW)
subroutine average_diag_misc_isba_n(DGMI, I)
subroutine diag_evap_isba_n(DGEI, DGI, I, PKDI, PKI, HPHOTO, PTSTEP, KMASK, KSIZE, KPATCH, PRHOA)
subroutine unpack_ch_isba_patch_n(CHI, PKCI, KMASK, KSIZE, KNPATCH, KPATCH)
subroutine treat_patch(KSIZE, KMASK)
subroutine diag_misc_isba_n(DGMI, PKDI, PTSTEP, HISBA, HPHOTO, HSNOW, OAGRIP, OTR_ML, PTIME, KSIZE, KPATCH, KMASK, PSEUIL, PPSN, PPSNG, PPSNV, PFF, PFFG, PFFV, PWG, PWGI, PWFC, PWWILT, PWSNOW, PRSNOW, PFAPARC, PFAPIRC, PLAI_EFFC, PMUS, PFSAT, PDG, PTG)
subroutine soilemisno_n(GB, I, PUA, PVA)
Definition: soilemisnon.F90:7
subroutine albedo_veg_update(DTCO, DTI, IG, I, PTSTEP, TTIME, PCOVER, OCOVER, HISBA, OECOCLIMAP, HPHOTO, OAGRIP, OTR_ML, HSFTYPE, PVEG, PALBNIR, PALBVIS, PALBUV, HALBEDO, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL)
subroutine pack_diag_patch_n(DGEI, DGI, DGMI, I, PKDI, KSIZE, KSW, KPATCH)
subroutine update_rad_isba_n(I, OFLOOD, HSNOW, PZENITH, PSW_BANDS, PVEG, PLAI, PZ0, OMEB_PATCH, PLAIGV, PGNDLITTER, PZ0LITTER, PH_VEG, PALBNIR, PALBVIS, PALBUV, PEMIS, PDIR_ALB_WITH_SNOW, PSCA_ALB_WITH_SNOW, PEMIST, PDIR_SW, PSCA_SW, PALBNIR_VEG, PALBNIR_SOIL, PALBVIS_VEG, PALBVIS_SOIL)
subroutine average_diag_isba_n(DGEI, DGI, I, PHW, PHT, PSFCO2, PTRAD)
subroutine ch_bvocem_n(CHI, GB, I, PSW_FORBIO, PRHOA, PSFTS)
Definition: ch_bvocemn.F90:6
subroutine coupling_isba_n(DTCO, UG, U, USS, IM, DTGD, DTGR, TGRO, DST, 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 isba_sgh_update(IG, I, HISBA, HRUNOFF, HRAIN, PRAIN, PMUF, PFSAT, PTOPQS)
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
Definition: ch_aer_dep.F90:6
subroutine unpack_diag_patch_n(DGI, GB, I, PKDI, PKI, KMASK, KSIZE, KNPATCH, KPATCH, PCPL_DRAIN, PCPL_RUNOFF, PCPL_EFLOOD, PCPL_PFLOOD, PCPL_IFLOOD, PCPL_ICEFLUX)
subroutine pack_isba_patch_n(AG, IG, I, PKI, KMASK, KSIZE, KPATCH)
subroutine coupling_dst_n(DST, PKI, HPROGRAM, KI, KDST, KPATCH, PCLAY, PPS, PTS, PQA, PRA, PRHOA, PSAND, PPA, PTA, PTG, PU, PUREF, PV, PWG, PWSAT, PZREF, PCD, PCDN, PCH, PRI, PZ0H_WITH_SNOW, PSFDST)
subroutine carbon_spinup(KMONTH, KDAY, PTIME, OSPINUPCARBS, OSPINUPCARBW, PSPINMAXS, PSPINMAXW, KNBYEARSPINS, KNBYEARSPINW, KNBYEARSOLD, HPHOTO, HRESPSL, KSPINS, KSPINW)
subroutine vegetation_update(DTCO, DTI, DTGD, DTGR, IG, I, TGRO, PTSTEP, TTIME, PCOVER, OCOVER, HISBA, OECOCLIMAP, HPHOTO, OAGRIP, OTR_ML, HSFTYPE, PLAI, PVEG, PZ0, PALBNIR, PALBVIS, PALBUV, PEMIS, PRSMIN, PGAMMA, PWRMAX_CF, PRGL, PCV, PGMES, PBSLAI, PLAIMIN, PSEFOLD, PGC, PDMAX, PF2I, OSTRESS, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, HALBEDO, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PCE_NITRO, PCF_NITRO, PCNA_NITRO, TPSEED, TPREAP, PWATSUP, PIRRIG, PGNDLITTER, PRGLGV, PGAMMAGV, PRSMINGV, PWRMAX_CFGV, PH_VEG, PLAIGV, PZ0LITTER, ODUPDATED, OABSENT)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine average_phy(PFRAC_TILE, PTSURF_TILE, PZ0_TILE, PZ0H_TILE, PQSURF_TILE, PUREF, PZREF, PTSURF, PZ0, PZ0H, PQSURF)
Definition: average_phy.F90:6
subroutine pack_diag_patch_get_size_n(DGEI, DGI, DGMI, I, PKDI, KPATCH)
subroutine hydro_glacier(I, PTSTEP, PSR, PSNOWRHO, PSNOWSWE, PGLASTO, PICEFLUX)
subroutine average_rad(PFRAC_TILE, PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD)
Definition: average_rad.F90:6
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
subroutine isba_albedo(HSNOW, OTR_ML, OMEB, PDIR_SW, PSCA_SW, PSW_BANDS, KSW, PALBNIR, PALBVIS, PALBUV, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PFALB, PFFV, PFFG, PGLOBAL_SW, PSNOWFREE_ALB, PSNOWFREE_ALB_VEG, PSNOWFREE_ALB_SOIL, PMEB_SCA_SW, PALBNIR_TVEG, PALBVIS_TVEG, PALBNIR_TSOIL, PALBVIS_TSOIL)
Definition: isba_albedo.F90:6
subroutine dslt_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF, PEMISSIG, PEMISRADIUS, KPMODE, PDENSITY, PMOLARWEIGHT, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, HVERMOD)
Definition: dslt_dep.F90:6
subroutine average_flux(PFRAC_TILE, PSFTH_TILE, PSFTQ_TILE, PSFTS_TILE, PSFCO2_TILE, PSFU_TILE, PSFV_TILE, PSFTH, PSFTQ, PSFTS, PSFCO2, PSFU, PSFV)
Definition: average_flux.F90:6
subroutine unpack_isba_patch_n(AG, I, PKI, KMASK, KSIZE, KPATCH)
subroutine isba_budget_init(DGEI, HISBA, HSNOW_ISBA, PWG, PWGI, PWR, PSNOWSWE, PDG, PDZG, PWG_INI, PWGI_INI, PWR_INI, PSWE_INI)
subroutine average_diag_evap_isba_n(DGEI, I, PTSTEP, PRAIN, PSNOW)
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 pack_ch_isba_patch_n(CHI, PKCI, KMASK, KSIZE, KNPATCH, KPATCH)
subroutine diag_cpl_esm_isba(I, PTSTEP, PCPL_DRAIN, PCPL_RUNOFF, PCPL_EFLOOD, PCPL_PFLOOD, PCPL_IFLOOD, PCPL_ICEFLUX)
subroutine add_forecast_to_date_surf(KYEAR, KMONTH, KDAY, PSEC)
subroutine isba(HISBA, HPHOTO, OTR_ML, HRUNOFF, HKSAT, HRAIN, HHORT, HC1DRY, HSCOND, HSNOW_ISBA, HSNOWRES, HCPSURF, HSOILFRZ, HDIFSFCOND, TPTIME, OFLOOD, OTEMP_ARP, OGLACIER, OMEB, OFORC_MEASURE, OMEB_LITTER, OMEB_GNDRES, PTSTEP, HIMPLICIT_WIND, OAGRI_TO_GRASS, OSNOWDRIFT, OSNOWDRIFT_SUBLIM, OSNOW_ABS_ZENITH, HSNOWMETAMO, HSNOWRAD, PCGMAX, PZREF, PUREF, PDIRCOSZW, PTA, PQA, PEXNA, PRHOA, PPS, PEXNS, PRR, PSR, PZENITH, PSCA_SW, PSW_RAD, PLW_RAD, PVMOD, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PRSMIN, PRGL, PGAMMA, PCV, PRUNOFFD, PSOILWGHT, KLAYER_HORT, KLAYER_DUN, PALBNIR_TVEG, PALBVIS_TVEG, PALBNIR_TSOIL, PALBVIS_TSOIL, PALB, PWRMAX_CF, PVEG, PLAI, PEMIS, PZ0_WITH_SNOW, PZ0H_WITH_SNOW, PVEGTYPE, PZ0EFF, PRGLCV, PGAMMACV, PRSMINCV, PROOTFRACCV, PWRMAX_CFCV, PLAIV, PBSLAI, PLAIMIN, PH_VEG, PPALPHAN, PZ0G_WITHOUT_SNOW, PZ0_MEBV, PZ0H_MEBV, PZ0EFF_MEBV, PZ0_MEBN, PZ0H_MEBN, PZ0EFF_MEBN, PGNDLITTER, PRUNOFFB, PCGSAT, PC1SAT, PC2REF, PC3, PC4B, PC4REF, PACOEF, PPCOEF, PTAUICE, PWDRAIN, PTDEEP_A, PTDEEP_B, PGAMMAT, PPSN, PPSNG, PPSNV, PPSNV_A, PSNOWFREE_ALB_VEG, PSNOWFREE_ALB_SOIL, PIRRIG, PWATSUP, PTHRESHOLD, LIRRIGATE, LIRRIDAY, OSTRESSDEF, PGC, PF2I, PDMAX, PAH, PBH, PCSP, PGMES, PPOI, PFZERO, PEPSO, PGAMM, PQDGAMM, PQDGMES, PT1GMES, PT2GMES, PAMAX, PQDAMAX, PT1AMAX, PT2AMAX, PABC, PD_G, PDZG, PDZDIF, KWG_LAYER, PROOTFRAC, PWFC, PWWILT, PWSAT, PBCOEF, PCONDSAT, PMPOTSAT, PHCAPSOIL, PCONDDRY, PCONDSLD, PD_ICE, PKSAT_ICE, PMUF, PFF, PFFG, PFFV, PFFG_NOSNOW, PFFV_NOSNOW, PFFROZEN, PFALB, PFEMIS, PFFLOOD, PPIFLOOD, PIFLOOD, PPFLOOD, PLE_FLOOD, PLEI_FLOOD, PSODELX, PLAT, PLON, PTG, PWG, PWGI, PCPS, PLVTT, PLSTT, PWR, PWRL, PWRLI, PWRVN, PTV, PTL, PRESA, PANFM, PFSAT, PSNOWALB, PSNOWALBVIS, PSNOWALBNIR, PSNOWALBFIR, PSNOWSWE, PSNOWHEAT, PSNOWRHO, PSNOWGRAN1, PSNOWGRAN2, PSNOWHIST, PSNOWAGE, PGRNDFLUX, PHPSNOW, PSNOWHMASS, PRNSNOW, PHSNOW, PGFLUXSNOW, PUSTARSNOW, PSRSFC, PRRSFC, PLESL, PEMISNOW, PCDSNOW, PCHSNOW, PTS_RAD, PTS, PHV, PQS, PSNOWTEMP, PSNOWLIQ, PSNOWDZ, PCG, PC1, PC2, PWGEQ, PCT, PCH, PCD, PCDN, PRI, PHU, PHUG, PEMIST, PALBT, PRS, PLE, PRN, PH, PLEI, PLEGI, PLEG, PLEV, PLES, PLER, PLETR, PEVAP, PGFLUX, PRESTORE, PUSTAR, PDRAIN, PRUNOFF, PMELT, PMELTADV, PTC, PQC, PRN_ISBA, PH_ISBA, PLEG_ISBA, PLEGI_ISBA, PLEV_ISBA, PLETR_ISBA, PUSTAR_ISBA, PLER_ISBA, PLE_ISBA, PLEI_ISBA, PGFLUX_ISBA, PHORT, PDRIP, PRRVEG, PAC_AGG, PHU_AGG, PFAPARC, PFAPIRC, PMUS, PLAI_EFFC, PAN, PANDAY, PRESP_BIOMASS_INST, PIACAN, PANF, PGPP, PFAPAR, PFAPIR, PFAPAR_BS, PFAPIR_BS, PIRRIG_FLUX, PDEEP_FLUX, PSWNET_V, PSWNET_G, PSWNET_N, PSWNET_NS, PLWNET_V, PLWNET_G, PLWNET_N, PLEV_V_C, PLES_V_C, PH_V_C, PH_G_C, PLETR_G_C, PLETR_V_C, PLER_G_C, PLELITTER, PLELITTERI, PDRIPLIT, PRRLIT, PLER_V_C, PH_C_A, PH_N_C, PLE_C_A, PLE_V_C, PLE_G_C, PLE_N_C, PEVAP_N_C, PEVAP_G_C, PSR_GN, PMELTCV, PFRZCV, PSWDOWN_GN, PLWDOWN_GN, PIRRIG_GR, PTOPQS, PQSB, PSUBL, PFWTD, PWTD, PSNDRIFT)
Definition: isba.F90:6
subroutine ch_dep_isba(PUSTAR, PHU, PPSN, PVEG, PLAI, PSAND, PCLAY, PRESA, PRS, PZ0, PTA, PPA, PTRAD, PNO, PROCK, HSV, PSOILRC_SO2, PSOILRC_O3, PDEP)
Definition: ch_dep_isba.F90:6
subroutine irrigation_update(AG, PIRRIG, PTSTEP, KMONTH, KDAY, PTIME, TSEEDMONTH, TSEEDDAY, TREAPMONTH, TREAPDAY)
subroutine vegetation_evol(HISBA, HPHOTO, HRESPSL, HALBEDO, OAGRIP, OTR_ML, ONITRO_DILU, OAGRI_TO_GRASS, OIMP_VEG, OIMP_Z0, OIMP_EMIS, PTSTEP, KMONTH, KDAY, KSPINW, PTIME, PLAT, PRHOA, PDG, PDZG, KWG_LAYER, PTG, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PVEGTYPE, PSEFOLD, PANMAX, PH_TREE, PBSLAI, PLAIMIN, P_CO2, PCE_NITRO, PCF_NITRO, PCNA_NITRO, PBSLAI_NITRO, PGMES, PTAU_WOOD, TPSEED, TPREAP, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PLAI, PVEG, PZ0, PALBNIR, PALBVIS, PALBUV, PEMIS, PANFM, PANDAY, PBIOMASS, PRESP_BIOMASS, PRESP_BIOMASS_INST, PINCREASE, PTURNOVER, PSWDIR)
subroutine z0eff(I, HROUGH, OMEB, PALFA, PZREF, PUREF, PZ0, PZ0REL, PPSN, PPALPHAN, PZ0LITTER, PWSNOW, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PFF, PZ0_FLOOD, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0_O_Z0H, PZ0_WITH_SNOW, PZ0H_WITH_SNOW, PZ0EFF, PZ0G_WITHOUT_SNOW, PZ0_MEBV, PZ0H_MEBV, PZ0EFF_MEBV, PZ0_MEBN, PZ0H_MEBN, PZ0EFF_MEBN)
Definition: z0eff.F90:6
subroutine carbon_evol(HISBA, HRESPSL, HPHOTO, PTSTEP, KSPINS, PRHOA, PTG, PWG, PWFC, PWWILT, PWSAT, PSAND, PDG, PDZG, KWG_LAYER, PRE25, PLAI, PRESP_BIOMASS_INST, PTURNOVER, PLITTER, PLIGNIN_STRUC, PSOILCARB, PRESP_AUTO, PRESP_ECO)
Definition: carbon_evol.F90:6