SURFEX v8.1
General documentation of Surfex
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, NAG, CHI, NCHI, DTI, ID, NGB, GB, &
7  ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, &
8  HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, &
9  KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PZREF, PUREF, PZS, &
10  PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, &
11  PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, &
12  PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, &
13  PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, &
14  PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST )
15 ! ###############################################################################
16 !
17 !!**** *COUPLING_ISBA_n * - Driver for ISBA time step
18 !!
19 !! PURPOSE
20 !! -------
21 !
22 !!** METHOD
23 !! ------
24 !!
25 !! First, all actions dependant on each patch is donbe independantly
26 !! (loop on patches)
27 !! Second, actions common to all patches (e.g. prescription of new vegetation)
28 !! Third, energy fluxes are averaged
29 !!
30 !! Nota that chemical fluxes are also treated.
31 !!
32 !! REFERENCE
33 !! ---------
34 !!
35 !!
36 !! AUTHOR
37 !! ------
38 !! V. Masson
39 !!
40 !! MODIFICATIONS
41 !! -------------
42 !! Original 01/2004
43 !! P Le Moigne 11/2004 add new diagnostics for isba
44 !! A.Bogatchev 09/2005 EBA snow option
45 !! P Le Moigne 09/2005 AGS modifs of L. Jarlan
46 !! P Le Moigne 02/2006 z0h with snow
47 !! P.Le Moigne 06/2006 seeding and irrigation
48 !! B. Decharme 2008 reset the subgrid topographic effect on the forcing
49 !! PSNV allways <= PSNG
50 !! News diag
51 !! Flooding scheme and allows TRIP variables coupling
52 !! A.L. Gibelin 04/2009 : Add respiration diagnostics
53 !! A.L. Gibelin 04/2009 : BIOMASS and RESP_BIOMASS arrays
54 !! A.L. Gibelin 04/2009 : TAU_WOOD for NCB option
55 !! A.L. Gibelin 05/2009 : Add carbon spinup
56 !! A.L. Gibelin 06/2009 : Soil carbon variables for CNT option
57 !! A.L. Gibelin 07/2009 : Suppress RDK and transform GPP as a diagnostic
58 !! A.L. Gibelin 07/2009 : Suppress PPST and PPSTF as outputs
59 !! S.Lafont 01/2011 : add PTSTEP as arg of diag_misc
60 !! B.Decharme 09/2012 : Bug in hydro_glacier calculation with ES or Crocus
61 !! New wind implicitation
62 !! New soil carbon spinup and diag
63 !! Isba budget
64 !! F. Bouttier 01/2013 : Apply random perturbations for ensembles
65 !! B. Decharme 04/2013 new coupling variables
66 !! Subsurface runoff if SGH (DIF option only)
67 !! 07/2013 Surface / Water table depth coupling
68 !! P Samuelsson 10/2014 : MEB
69 !! P. LeMoigne 12/2014 EBA scheme update
70 !! R. Seferian 05/2015 : Add coupling fiels to vegetation_evol call
71 !!-------------------------------------------------------------------
72 !
75 USE modd_surf_atm_n, ONLY : surf_atm_t
76 !
77 USE modd_agri_n, ONLY : agri_np_t
79 USE modd_data_isba_n, ONLY : data_isba_t
80 USE modd_surfex_n, ONLY : isba_diag_t
82 USE modd_sso_n, ONLY : sso_t, sso_np_t
83 USE modd_sfx_grid_n, ONLY : grid_t, grid_np_t
86 !
87 USE modd_dst_n, ONLY : dst_np_t
88 USE modd_slt_n, ONLY : slt_t
89 !
91 !
92 USE modd_csts, ONLY : xrd, xrv, xp00, xcpd, xpi, xavogadro, xmd
93 USE modd_co2v_par, ONLY : xmco2, xspin_co2
94 !
95 USE modd_surf_par, ONLY : xundef
96 USE modd_snow_par, ONLY : xz0sn
98 !
99 USE modd_surf_atm, ONLY : lnosof
100 !
101 USE modd_dst_surf
102 USE modd_slt_surf
103 USE mode_dslt_surf
104 USE mode_meb
105 !
106 USE modd_agri, ONLY : lagrip
107 USE modd_deepsoil, ONLY : ldeepsoil
108 !
109 #ifdef TOPD
111 #endif
112 !
113 USE modi_irrigation_update
114 USE modi_add_forecast_to_date_surf
115 USE modi_z0eff
116 USE modi_isba
117 USE modi_average_flux
118 USE modi_average_phy
119 USE modi_average_rad
120 USE modi_average_diag_isba_n
121 USE modi_vegetation_evol
122 USE modi_vegetation_update
123 USE modi_carbon_evol
124 USE modi_subscale_z0eff
125 USE modi_soil_albedo
126 USE modi_albedo
127 USE modi_diag_inline_isba_n
128 USE modi_diag_evap_cumul_isba_n
129 USE modi_diag_misc_isba_n
130 USE modi_reproj_diag_isba_n
131 !
132 USE modi_update_rad_isba_n
133 USE modi_deepsoil_update
134 USE modi_isba_sgh_update
135 USE modi_isba_flood_properties
136 USE modi_diag_cpl_esm_isba
137 USE modi_hydro_glacier
138 USE modi_isba_albedo
139 USE modi_carbon_spinup
140 USE modi_ch_aer_dep
141 USE modi_abor1_sfx
142 USE modi_average_diag_evap_isba_n
143 USE modi_average_diag_misc_isba_n
144 USE modi_ch_bvocem_n
145 USE modi_soilemisno_n
146 USE modi_ch_dep_isba
147 USE modi_dslt_dep
148 USE modi_coupling_dst_n
149 USE modi_coupling_surf_topd
150 USE modi_isba_budget_init
151 USE modi_isba_budget
152 USE modi_unpack_diag_patch_n
153 !
154 USE yomhook ,ONLY : lhook, dr_hook
155 USE parkind1 ,ONLY : jprb
156 !
157 IMPLICIT NONE
158 !
159 !* 0.1 declarations of arguments
160 !
161 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
162 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
163 TYPE(surf_atm_t), INTENT(INOUT) :: U
164 TYPE(sso_t), INTENT(INOUT) :: USS
165 !
166 TYPE(agri_np_t), INTENT(INOUT) :: NAG
167 TYPE(ch_isba_t), INTENT(INOUT) :: CHI
168 TYPE(ch_isba_np_t), INTENT(INOUT) :: NCHI
169 TYPE(data_isba_t), INTENT(INOUT) :: DTI
170 TYPE(isba_diag_t), INTENT(INOUT) :: ID
171 TYPE(gr_biog_np_t), INTENT(INOUT) :: NGB
172 TYPE(gr_biog_t), INTENT(INOUT) :: GB
173 TYPE(sso_t), INTENT(INOUT) :: ISS
174 TYPE(sso_np_t), INTENT(INOUT) :: NISS
175 TYPE(grid_t), INTENT(INOUT) :: IG
176 TYPE(grid_np_t), INTENT(INOUT) :: NIG
177 TYPE(isba_options_t), INTENT(INOUT) :: IO
178 TYPE(isba_s_t), INTENT(INOUT) :: S
179 TYPE(isba_k_t), INTENT(INOUT) :: K
180 TYPE(isba_nk_t), INTENT(INOUT) :: NK
181 TYPE(isba_np_t), INTENT(INOUT) :: NP
182 TYPE(isba_npe_t), INTENT(INOUT) ::NPE
183 !
184 TYPE(dst_np_t), INTENT(INOUT) :: NDST
185 TYPE(slt_t), INTENT(INOUT) :: SLT
186 !
187  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
188  CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling
189  ! 'E' : explicit
190  ! 'I' : implicit
191 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
192 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
193 INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
194 REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s)
195 INTEGER, INTENT(IN) :: KI ! number of points
196 INTEGER, INTENT(IN) :: KSV ! number of scalars
197 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
198 REAL, DIMENSION(KI), INTENT(IN) :: PTSUN ! solar time (s from midnight)
199 REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s)
200 REAL, DIMENSION(KI), INTENT(IN) :: PZREF ! height of T,q forcing (m)
201 REAL, DIMENSION(KI), INTENT(IN) :: PUREF ! height of wind forcing (m)
202 !
203 REAL, DIMENSION(KI), INTENT(IN) :: PTA ! air temperature forcing (K)
204 REAL, DIMENSION(KI), INTENT(IN) :: PQA ! air humidity forcing (kg/m3)
205 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3)
206 REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV ! scalar variables
207 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
208 !
209  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV ! name of all scalar variables!
210 REAL, DIMENSION(KI), INTENT(IN) :: PU ! zonal wind (m/s)
211 REAL, DIMENSION(KI), INTENT(IN) :: PV ! meridian wind (m/s)
212 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.)
213 ! ! (W/m2)
214 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
215 ! ! (W/m2)
216 REAL, DIMENSION(KSW),INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m)
217 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle at t (radian from the vertical)
218 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH2 ! zenithal angle at t+1(radian from the vertical)
219 REAL, DIMENSION(KI), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
220 ! ! (W/m2)
221 REAL, DIMENSION(KI), INTENT(IN) :: PPS ! pressure at atmospheric model surface (Pa)
222 REAL, DIMENSION(KI), INTENT(IN) :: PPA ! pressure at forcing level (Pa)
223 REAL, DIMENSION(KI), INTENT(IN) :: PZS ! atmospheric model orography (m)
224 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration in the air (kg_CO2/m3)
225 REAL, DIMENSION(KI), INTENT(IN) :: PSNOW ! snow precipitation (kg/m2/s)
226 REAL, DIMENSION(KI), INTENT(IN) :: PRAIN ! liquid precipitation (kg/m2/s)
227 !
228 !
229 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH ! flux of heat (W/m2)
230 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ ! flux of water vapor (kg/m2/s)
231 REAL, DIMENSION(KI), INTENT(OUT) :: PSFU ! zonal momentum flux (Pa)
232 REAL, DIMENSION(KI), INTENT(OUT) :: PSFV ! meridian momentum flux (Pa)
233 REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2 ! flux of CO2 positive toward the atmosphere (m/s*kg_CO2/kg_air)
234 REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS ! flux of scalar var. (kg/m2/s)
235 !
236 REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD ! radiative temperature (K)
237 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band (-)
238 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
239 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity (-)
240 !
241 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
242 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0 ! roughness length for momentum (m)
243 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0H ! roughness length for heat (m)
244 REAL, DIMENSION(KI), INTENT(OUT) :: PQSURF ! specific humidity at surface (kg/kg)
245 !
246 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients
247 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I'
248 REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
249 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
250 REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
251 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
252  CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
253 !
254 !
255 !* 0.2 declarations of local variables
256 !
257 !* forcing variables
258 !
259 TYPE(isba_k_t), POINTER :: KK
260 TYPE(isba_p_t), POINTER :: PK
261 TYPE(isba_pe_t), POINTER :: PEK
262 TYPE(sso_t), POINTER :: ISSK
263 !
264 REAL, DIMENSION(KI) :: ZWIND ! lowest atmospheric level wind speed (m/s)
265 REAL, DIMENSION(KI) :: ZDIR ! wind direction (rad from N clockwise)
266 REAL, DIMENSION(KI) :: ZEXNA ! Exner function at lowest atmospheric level (-)
267 REAL, DIMENSION(KI) :: ZEXNS ! Exner function at surface (-)
268 REAL, DIMENSION(KI) :: ZALFA ! Wind direction (-)
269 REAL, DIMENSION(KI) :: ZQA ! specific humidity (kg/kg)
270 REAL, DIMENSION(KI) :: ZCO2 ! CO2 concentration (kg/kg)
271 REAL :: ZSPINCO2 ! CO2 concentration (ppmv)
272 REAL, DIMENSION(KI) :: ZPEQ_A_COEF ! specific humidity implicit
273 REAL, DIMENSION(KI) :: ZPEQ_B_COEF ! coefficients (hum. in kg/kg)
274 !
275 INTEGER ::ISPINEND
276 !
277 ! Patch outputs:
278 !
279 REAL, DIMENSION(KI,IO%NPATCH) :: ZSFTH_TILE ! surface heat flux (W/m2)
280 REAL, DIMENSION(KI,IO%NPATCH) :: ZSFTQ_TILE ! surface vapor flux (kg/m2/s)
281 REAL, DIMENSION(KI,IO%NPATCH) :: ZSFCO2_TILE ! surface CO2 flux positive toward the atmosphere (m/s*kg_CO2/kg_air)
282 REAL, DIMENSION(KI,IO%NPATCH) :: ZSFU_TILE ! zonal momentum flux
283 REAL, DIMENSION(KI,IO%NPATCH) :: ZSFV_TILE ! meridian momentum flux
284 REAL, DIMENSION(KI,IO%NPATCH) :: ZTRAD_TILE ! radiative surface temperature
285 REAL, DIMENSION(KI,IO%NPATCH) :: ZEMIS_TILE ! emissivity
286 REAL, DIMENSION(KI,IO%NPATCH) :: ZTSURF_TILE ! surface effective temperature
287 REAL, DIMENSION(KI,IO%NPATCH) :: ZZ0_TILE ! roughness length for momentum
288 REAL, DIMENSION(KI,IO%NPATCH) :: ZZ0H_TILE ! roughness length for heat
289 REAL, DIMENSION(KI,IO%NPATCH) :: ZQSURF_TILE ! specific humidity at surface
290 REAL, DIMENSION(KI,KSW,IO%NPATCH) :: ZDIR_ALB_TILE ! direct albedo
291 REAL, DIMENSION(KI,KSW,IO%NPATCH) :: ZSCA_ALB_TILE ! diffuse albedo
292 REAL, DIMENSION(KI,KSV,IO%NPATCH) :: ZSFTS_TILE ! scalar surface flux
293 !
294 REAL, DIMENSION(KI, IO%NPATCH) :: ZCPL_DRAIN ! For the coupling with TRIP
295 REAL, DIMENSION(KI, IO%NPATCH) :: ZCPL_RUNOFF ! For the coupling with TRIP
296 REAL, DIMENSION(KI, IO%NPATCH) :: ZCPL_EFLOOD ! For the coupling with TRIP
297 REAL, DIMENSION(KI, IO%NPATCH) :: ZCPL_PFLOOD ! For the coupling with TRIP
298 REAL, DIMENSION(KI, IO%NPATCH) :: ZCPL_IFLOOD ! For the coupling with TRIP
299 REAL, DIMENSION(KI, IO%NPATCH) :: ZCPL_ICEFLUX
300 !
301 ! for chemical computations
302 !
303 REAL, DIMENSION(KI, IO%NPATCH) :: ZSW_FORBIO
304 !
305 REAL :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST
306 REAL :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST
307 REAL :: ZCONVERTFACM6_SLT, ZCONVERTFACM6_DST
308 !
309 ! dimensions and loop counters
310 !
311 INTEGER :: ISWB ! number of spectral shortwave bands
312 INTEGER :: JSWB ! loop on number of spectral shortwave bands
313 INTEGER :: JP ! loop on patches
314 INTEGER :: JSV, IDST, IMOMENT, II, IMASK, JI
315 INTEGER :: JLAYER, JMODE, JSV_IDX
316 !
317 ! logical units
318 !
319 INTEGER :: JJ, IBEG, IEND, ISIZE
320 LOGICAL :: GUPDATED, GALB ! T if VEGETATION_UPDATE has reset fields
321 !
322 REAL(KIND=JPRB) :: ZHOOK_HANDLE
323 !
324 ! --------------------------------------------------------------------------------------
325 IF (lhook) CALL dr_hook('COUPLING_ISBA_N',0,zhook_handle)
326 IF (htest/='OK') THEN
327  CALL abor1_sfx('COUPLING_ISBAN: FATAL ERROR DURING ARGUMENT TRANSFER')
328 END IF
329 ! --------------------------------------------------------------------------------------
330 !
331 !* 1. Initializations
332 !
333 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
334 ! Allocations:
335 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
336 !
337 zsfth_tile(:,:) = xundef
338 zsftq_tile(:,:) = xundef
339 zsfco2_tile(:,:) = xundef
340 zsfu_tile(:,:) = xundef
341 zsfv_tile(:,:) = xundef
342 ztrad_tile(:,:) = xundef
343 zemis_tile(:,:) = xundef
344 zdir_alb_tile(:,:,:) = xundef
345 zsca_alb_tile(:,:,:) = xundef
346 ztsurf_tile(:,:) = xundef
347 zz0_tile(:,:) = xundef
348 zz0h_tile(:,:) = xundef
349 zqsurf_tile(:,:) = xundef
350 !
351 zsfts_tile(:,:,:) = 0.
352 !
353 zcpl_drain(:,:) = 0.0
354 zcpl_runoff(:,:) = 0.0
355 zcpl_eflood(:,:) = 0.0
356 zcpl_pflood(:,:) = 0.0
357 zcpl_iflood(:,:) = 0.0
358 zcpl_iceflux(:,:) = 0.0
359 !
360 zsw_forbio(:,:) = xundef
361 !
362 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
363 ! Forcing Modifications:
364 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
365 !
366 zdir=0.
367 !
368 DO jj=1,SIZE(pqa)
369 ! specific humidity (conversion from kg/m3 to kg/kg)
370 !
371  zqa(jj) = pqa(jj) / prhoa(jj)
372  zpeq_a_coef(jj) = ppeq_a_coef(jj) / prhoa(jj)
373  zpeq_b_coef(jj) = ppeq_b_coef(jj) / prhoa(jj)
374 !
375  zco2(jj) = pco2(jj) / prhoa(jj)
376 !
377 ! Other forcing variables depending on incoming forcing (argument list)JJ
378 !
379  zexns(jj) = (pps(jj)/xp00)**(xrd/xcpd)
380  zexna(jj) = (ppa(jj)/xp00)**(xrd/xcpd)
381 !
382 !* wind strength
383 !
384  zwind(jj) = sqrt(pu(jj)**2+pv(jj)**2)
385 !
386 !* wind direction
387 !
388  IF (zwind(jj)>0.) zdir(jj)=atan2(pu(jj),pv(jj))
389 !
390 !* angle between z0eff J axis and wind direction (rad., clockwise)
391 !
392  zalfa(jj) = zdir(jj) - iss%XZ0EFFJPDIR(jj) * xpi/180.
393 
394  IF (zalfa(jj)<-xpi) zalfa(jj) = zalfa(jj) + 2.*xpi
395  IF (zalfa(jj)>=xpi) zalfa(jj) = zalfa(jj) - 2.*xpi
396 !
397 ENDDO
398 !
399 !* number of shortwave spectral bands
400 !
401 iswb = ksw
402 !
403 !* irrigation
404 !
405 IF (lagrip .AND. (io%CPHOTO=='NIT'.OR. io%CPHOTO=='NCB') ) THEN
406  CALL irrigation_update(nag, npe, io%NPATCH, ptstep, kmonth, kday, ptime )
407 ENDIF
408 !
409 !* Actualization of the SGH variable (Fmu, Fsat)
410 !
411  CALL isba_sgh_update(ig%XMESH_SIZE, io, s, k, nk, np, npe, prain )
412 !
413 !
414 !* Actualization of deep soil characteristics
415 !
416 IF (ldeepsoil) THEN
417  DO jp = 1,io%NPATCH
418  kk => nk%AL(jp)
419  CALL deepsoil_update(kk%XTDEEP, kk%XGAMMAT, s%TTIME%TDATE%MONTH)
420  ENDDO
421 ENDIF
422 !
423 !* Actualization of soil and wood carbon spinup
424 !
425 ! During soil carbon spinup with ISBA-CC:
426 ! (1) Atmospheric CO2 concentration fixed to Pre-industrial CO2 consentration XCO2_START
427 ! (2) Atmospheric CO2 concentration rampin up from XCO2_START to XCO2_END
428 !
429 IF(io%LSPINUPCARBS.OR.io%LSPINUPCARBW)THEN
430 !
431  ispinend = io%NNBYEARSPINS-nint(io%NNBYEARSPINS*xspin_co2)
432 !
433  io%LAGRI_TO_GRASS = .false.
434 !
435  IF ( io%LSPINUPCARBS .AND. (io%NNBYEARSOLD <= ispinend) ) THEN
436 !
437  io%LAGRI_TO_GRASS = .true.
438 !
439  zco2(:) = io%XCO2_START * 1.e-6 * xmco2 / xmd
440 !
441  ELSEIF(io%LSPINUPCARBS .AND. (io%NNBYEARSOLD > ispinend) .AND. (io%NNBYEARSOLD <= io%NNBYEARSPINS) )THEN
442 !
443  zspinco2 = io%XCO2_START + (io%XCO2_END-io%XCO2_START) * &
444  REAL(IO%NNBYEARSOLD - ISPINEND) / REAL(io%nnbyearspins - ispinend)
445 !
446  zco2(:) = zspinco2 * 1.e-6 * xmco2 / xmd
447 !
448  ENDIF
449 !
450  CALL carbon_spinup( s%TTIME, io )
451 !
452 ENDIF
453 !
454 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
455 ! Time evolution
456 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
457 !
458 s%TTIME%TIME = s%TTIME%TIME + ptstep
459  CALL add_forecast_to_date_surf(s%TTIME%TDATE%YEAR,s%TTIME%TDATE%MONTH,s%TTIME%TDATE%DAY,s%TTIME%TIME)
460 !
461 ! --------------------------------------------------------------------------------------
462 !
463 !* 2. Physical evolution
464 !
465 ! --------------------------------------------------------------------------------------
466 ! Patch Dependent Calculations
467 ! --------------------------------------------------------------------------------------
468 !
469 patch_loop: DO jp=1,io%NPATCH
470 
471  IF (np%AL(jp)%NSIZE_P == 0 ) cycle
472 !
473 ! Pack dummy arguments for each patch:
474 !
475 #ifdef TOPD
476  IF (lcoupl_topd) THEN
477  nmaskt_patch(:) = 0
478  nmaskt_patch(1:np%AL(jp)%NSIZE_P) = np%AL(jp)%NR_P(:)
479  ENDIF
480 #endif
481  CALL treat_patch(nk%AL(jp), np%AL(jp), npe%AL(jp), niss%AL(jp), nag%AL(jp), &
482  nig%AL(jp), nchi%AL(jp), ndst%AL(jp), id%ND%AL(jp), id%NDC%AL(jp), &
483  id%NDE%AL(jp), id%NDEC%AL(jp), id%NDM%AL(jp), ngb%AL(jp) )
484 !
485 ENDDO patch_loop
486 !
487 ! --------------------------------------------------------------------------------------
488 ! SFX - RRM coupling update if used :
489 ! --------------------------------------------------------------------------------------
490 !
491 IF(io%LCPL_RRM)THEN
492  CALL diag_cpl_esm_isba(io, s, nk, np, ptstep, zcpl_drain, zcpl_runoff, &
493  zcpl_eflood, zcpl_pflood, zcpl_iflood, zcpl_iceflux )
494 ENDIF
495 !
496 ! --------------------------------------------------------------------------------------
497 ! Vegetation update (in case of non-interactive vegetation):
498 ! Or
499 ! Vegetation albedo only update (in case of interactive vegetation):
500 ! --------------------------------------------------------------------------------------
501 !
502 gupdated=.false.
503 !
504 IF (io%LVEGUPD) THEN
505  galb = .false.
506  IF (io%CPHOTO=='NIT'.OR.io%CPHOTO=='NCB') galb = .true.
507  DO jp = 1,io%NPATCH
508  CALL vegetation_update(dtco, dti, ig%NDIM, io, nk%AL(jp), np%AL(jp), npe%AL(jp), jp, &
509  ptstep, s%TTIME, s%XCOVER, s%LCOVER, lagrip, &
510  'NAT', galb, niss%AL(jp), gupdated )
511  ENDDO
512 !
513 ENDIF
514 !
515 IF(io%LPERTSURF.AND.gupdated) THEN
516  DO jp = 1,io%NPATCH
517  pk => np%AL(jp)
518  pek => npe%AL(jp)
519  issk => niss%AL(jp)
520 
521  DO ji = 1,pk%NSIZE_P
522  imask = pk%NR_P(ji)
523  !
524  ! random perturbation for ensembles:
525  ! reset these fields to their original values, as in compute_isba_parameters
526  pek%XVEG(ji) = s%XPERTVEG(imask)
527  pek%XLAI(ji) = s%XPERTLAI(imask)
528  pek%XCV (ji) = s%XPERTCV (imask)
529  ! reapply original perturbation patterns
530  IF(pek%XALBNIR(ji)/=xundef) pek%XALBNIR(ji) = pek%XALBNIR(ji) *( 1.+ s%XPERTALB(imask) )
531  IF(pek%XALBVIS(ji)/=xundef) pek%XALBVIS(ji) = pek%XALBVIS(ji) *( 1.+ s%XPERTALB(imask) )
532  IF(pek%XALBUV(ji)/=xundef) pek%XALBUV (ji) = pek%XALBUV (ji) *( 1.+ s%XPERTALB(imask) )
533  IF(pek%XZ0(ji)/=xundef) pek%XZ0(ji) = pek%XZ0(ji) *( 1.+ s%XPERTZ0(imask) )
534  IF(issk%XZ0EFFIP(ji)/=xundef) issk%XZ0EFFIP(ji) = issk%XZ0EFFIP(ji)*( 1.+ s%XPERTZ0(imask) )
535  IF(issk%XZ0EFFIM(ji)/=xundef) issk%XZ0EFFIM(ji) = issk%XZ0EFFIM(ji)*( 1.+ s%XPERTZ0(imask) )
536  IF(issk%XZ0EFFJP(ji)/=xundef) issk%XZ0EFFJP(ji) = issk%XZ0EFFJP(ji)*( 1.+ s%XPERTZ0(imask) )
537  IF(issk%XZ0EFFJM(ji)/=xundef) issk%XZ0EFFJM(ji) = issk%XZ0EFFJM(ji)*( 1.+ s%XPERTZ0(imask) )
538  ENDDO
539  ENDDO
540 ENDIF
541 !
542 ! --------------------------------------------------------------------------------------
543 ! Outputs for the atmospheric model or update the snow/flood fraction at time t+1
544 ! --------------------------------------------------------------------------------------
545 ! Grid box average fluxes/properties: Arguments and standard diagnostics at time t+1
546 !
547  CALL average_flux(s%XPATCH, zsfth_tile, zsftq_tile, zsfts_tile, &
548  zsfco2_tile, zsfu_tile, zsfv_tile, psfth, psftq,&
549  psfts, psfco2, psfu, psfv )
550 !
551 !
552 !-------------------------------------------------------------------------------
553 !Physical properties see by the atmosphere in order to close the energy budget
554 !between surfex and the atmosphere. All variables should be at t+1 but very
555 !difficult to do. Maybe it will be done later. However, Ts is at time t+1
556 !-------------------------------------------------------------------------------
557 !
558  CALL average_phy(s%XPATCH, ztsurf_tile, zz0_tile, zz0h_tile, &
559  zqsurf_tile, puref, pzref, ptsurf, pz0, pz0h, pqsurf )
560 !
561 !-------------------------------------------------------------------------------------
562 !Radiative properties at time t+1 (see by the atmosphere) in order to close
563 !the energy budget between surfex and the atmosphere
564 !-------------------------------------------------------------------------------------
565 !
566 DO jp = 1,io%NPATCH
567  CALL update_rad_isba_n(io, s, nk%AL(jp), np%AL(jp), npe%AL(jp), jp, pzenith2, psw_bands, &
568  zdir_alb_tile(:,:,jp), zsca_alb_tile(:,:,jp), &
569  zemis_tile(:,jp), pdir_sw, psca_sw )
570 ENDDO
571 !
572  CALL average_rad(s%XPATCH, zdir_alb_tile, zsca_alb_tile, zemis_tile, &
573  ztrad_tile, pdir_alb, psca_alb, s%XEMIS_NAT, s%XTSRAD_NAT )
574 !
575 pemis = s%XEMIS_NAT
576 ptrad = s%XTSRAD_NAT
577 !
578 !-------------------------------------------------------------------------------------
579 !
580 ! Any additional diagnostics (stored in MODD_DIAG_ISBA_n)
581 !
582  CALL average_diag_isba_n(id%O, id%D, id%DC, id%ND, id%NDC, np, io%NPATCH, &
583  id%O%LSURF_BUDGETC, io%LCANOPY, puref, pzref, psfco2, ptrad)
584 !
585 ! Cumulated diagnostics (stored in MODD_DIAG_EVAP_ISBA_n)
586 !
587  CALL average_diag_evap_isba_n(id%O%LSURF_BUDGETC, id%DE, id%DEC, id%NDE, id%NDEC, np, &
588  io%NPATCH, io%LGLACIER, io%LMEB_PATCH, ptstep, prain, psnow)
589 !
590 ! Miscellaneous diagnostics (stored in MODD_DIAG_MISC_ISBA_n)
591 !
592  CALL average_diag_misc_isba_n(id%DM, id%NDM, io, np, npe)
593 !
594 !--------------------------------------------------------------------------------------
595 !
596  CALL coupling_surf_topd(id%DE, id%DEC, id%DC, id%DM, ig, &
597  io, s, k, nk, np, npe, ug, u, hprogram, u%NDIM_FULL)
598 !
599 ! --------------------------------------------------------------------------------------
600 ! Snow/Flood fractions, albedo and emissivity update :
601 ! --------------------------------------------------------------------------------------
602 !
603 ! --------------------------------------------------------------------------------------
604 ! Chemical fluxes :
605 ! --------------------------------------------------------------------------------------
606 !
607 IF (chi%SVI%NBEQ>0 .AND. chi%LCH_BIO_FLUX) THEN
608  CALL ch_bvocem_n(chi%SVI, ngb, gb, io, s, np, npe, zsw_forbio, prhoa, psfts)
609 ENDIF
610 !
611 !SOILNOX
612 IF (chi%LCH_NO_FLUX) THEN
613  CALL soilemisno_n(gb, s, k, np, npe, pu, pv)
614 ENDIF
615 !
616 !==========================================================================================
617 !
618 IF (lhook) CALL dr_hook('COUPLING_ISBA_N',1,zhook_handle)
619 CONTAINS
620 !
621 !=======================================================================================
622 SUBROUTINE treat_patch(KK, PK, PEK, ISSK, AGK, GK, CHIK, DSTK, DK, DCK, DEK, DECK, DMK, GBK )
623 !
625 USE modd_sfx_grid_n, ONLY : grid_t
626 USE modd_sso_n, ONLY : sso_t
627 USE modd_agri_n, ONLY : agri_t
628 USE modd_ch_isba_n, ONLY : ch_isba_t
629 USE modd_dst_n, ONLY : dst_t
630 USE modd_diag_n, ONLY : diag_t
633 USE modd_gr_biog_n, ONLY : gr_biog_t
634 !
635 IMPLICIT NONE
636 !
637 TYPE(isba_k_t), INTENT(INOUT) :: KK
638 TYPE(isba_p_t), INTENT(INOUT) :: PK
639 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
640 TYPE(sso_t), INTENT(INOUT) :: ISSK
641 TYPE(agri_t), INTENT(INOUT) :: AGK
642 TYPE(grid_t), INTENT(INOUT) :: GK
643 TYPE(ch_isba_t), INTENT(INOUT) :: CHIK
644 TYPE(dst_t), INTENT(INOUT) :: DSTK
645 TYPE(diag_t), INTENT(INOUT) :: DK
646 TYPE(diag_t), INTENT(INOUT) :: DCK
647 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEK
648 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DECK
649 TYPE(diag_misc_isba_t), INTENT(INOUT) :: DMK
650 TYPE(gr_biog_t), INTENT(INOUT) :: GBK
651 !
652 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ZREF ! height of T,q forcing (m)
653 REAL, DIMENSION(PK%NSIZE_P) :: ZP_UREF ! height of wind forcing (m)
654 REAL, DIMENSION(PK%NSIZE_P) :: ZP_U ! zonal wind (m/s)
655 REAL, DIMENSION(PK%NSIZE_P) :: ZP_V ! meridian wind (m/s)
656 REAL, DIMENSION(PK%NSIZE_P) :: ZP_WIND ! wind (m/s)
657 REAL, DIMENSION(PK%NSIZE_P) :: ZP_DIR ! wind direction (rad from N clockwise)
658 REAL, DIMENSION(PK%NSIZE_P) :: ZP_QA ! air specific humidity forcing (kg/kg)
659 REAL, DIMENSION(PK%NSIZE_P) :: ZP_TA ! air temperature forcing (K)
660 REAL, DIMENSION(PK%NSIZE_P) :: ZP_CO2 ! CO2 concentration in the air (kg/kg)
661 REAL, DIMENSION(PK%NSIZE_P,KSV) :: ZP_SV ! scalar concentration in the air (kg/kg)
662 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ZENITH ! zenithal angle radian from the vertical)
663 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PEW_A_COEF ! implicit coefficients
664 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PEW_B_COEF ! needed if HCOUPLING='I'
665 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PET_A_COEF
666 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PET_B_COEF
667 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PEQ_A_COEF
668 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PEQ_B_COEF
669 REAL, DIMENSION(PK%NSIZE_P) :: ZP_RAIN ! liquid precipitation (kg/m2/s)
670 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SNOW ! snow precipitation (kg/m2/s)
671 REAL, DIMENSION(PK%NSIZE_P) :: ZP_LW ! longwave radiation (W/m2)
672 REAL, DIMENSION(PK%NSIZE_P,ISWB) :: ZP_DIR_SW ! direct solar radiation (W/m2)
673 REAL, DIMENSION(PK%NSIZE_P,ISWB) :: ZP_SCA_SW ! diffuse solar radiation (W/m2)
674 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PS ! pressure at atmospheric model surface (Pa)
675 REAL, DIMENSION(PK%NSIZE_P) :: ZP_PA ! pressure at forcing level (Pa)
676 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ZS ! atmospheric model orography (m)
677 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SFTQ ! flux of water vapor <w'q'> (kg.m-2.s-1)
678 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SFTH ! flux of temperature <w'T'> (W/m2)
679 REAL, DIMENSION(PK%NSIZE_P,KSV) :: ZP_SFTS ! flux of scalar <w'sv'> (mkg/kg/s)
680 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SFCO2 ! flux of CO2 positive toward the atmosphere (m/s*kg_CO2/kg_air)
681 REAL, DIMENSION(PK%NSIZE_P) :: ZP_USTAR ! friction velocity (m/s)
682 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SFU ! zonal momentum flux (pa)
683 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SFV ! meridian momentum flux (pa)
684 REAL, DIMENSION(PK%NSIZE_P) :: ZP_TRAD ! radiative temperature (K)
685 REAL, DIMENSION(PK%NSIZE_P) :: ZP_TSURF ! surface effective temperature (K)
686 REAL, DIMENSION(PK%NSIZE_P) :: ZP_Z0 ! roughness length for momentum (m)
687 REAL, DIMENSION(PK%NSIZE_P) :: ZP_Z0H ! roughness length for heat (m)
688 REAL, DIMENSION(PK%NSIZE_P) :: ZP_QSURF ! specific humidity at surface (kg/kg)
689 !
690 !* other forcing variables (packed for each patch)
691 !
692 REAL, DIMENSION(PK%NSIZE_P) :: ZP_RHOA ! lowest atmospheric level air density (kg/m3)
693 REAL, DIMENSION(PK%NSIZE_P) :: ZP_EXNA ! Exner function at lowest atmospheric level (-)
694 REAL, DIMENSION(PK%NSIZE_P) :: ZP_EXNS ! Exner function at surface (-)
695 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ALFA ! Wind direction (-)
696 !
697 !* working variables (packed for each patch)
698 !
699 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ALBNIR_TVEG ! total vegetation albedo in ir
700 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ALBNIR_TSOIL ! total soil albedo in ir
701 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ALBVIS_TVEG ! total vegetation albedo in vis
702 REAL, DIMENSION(PK%NSIZE_P) :: ZP_ALBVIS_TSOIL ! total soil albedo in vis
703 REAL, DIMENSION(PK%NSIZE_P) :: ZP_EMIS ! emissivity
704 REAL, DIMENSION(PK%NSIZE_P) :: ZP_GLOBAL_SW ! global incoming SW rad.
705 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SLOPE_COS ! typical slope in the grid cosine
706 !
707 REAL, DIMENSION(PK%NSIZE_P) :: ZP_Z0FLOOD !Floodplain
708 REAL, DIMENSION(PK%NSIZE_P) :: ZP_FFGNOS !Floodplain fraction over the ground without snow
709 REAL, DIMENSION(PK%NSIZE_P) :: ZP_FFVNOS !Floodplain fraction over vegetation without snow
710 !
711 REAL, DIMENSION(PK%NSIZE_P,IO%NNBIOMASS) :: ZP_RESP_BIOMASS_INST ! instantaneous biomass respiration (kgCO2/kgair m/s)
712 !
713 !* Aggregated coeffs for evaporative flux calculations
714 !
715 REAL, DIMENSION(PK%NSIZE_P) :: ZP_AC_AGG ! aggregated aerodynamic resistance
716 REAL, DIMENSION(PK%NSIZE_P) :: ZP_HU_AGG ! aggregated relative humidity
717 !
718 !* For multi-energy balance
719 !
720 REAL, DIMENSION(PK%NSIZE_P) :: ZPALPHAN ! snow/canopy transition coefficient
721 REAL, DIMENSION(PK%NSIZE_P) :: ZSNOWDEPTH ! total snow depth
722 REAL, DIMENSION(PK%NSIZE_P) :: ZZ0G_WITHOUT_SNOW ! roughness length for momentum at snow-free canopy floor
723 REAL, DIMENSION(PK%NSIZE_P) :: ZZ0_MEBV ! roughness length for momentum over MEB vegetation part of patch
724 REAL, DIMENSION(PK%NSIZE_P) :: ZZ0H_MEBV ! roughness length for heat over MEB vegetation part of path
725 REAL, DIMENSION(PK%NSIZE_P) :: ZZ0EFF_MEBV ! roughness length for momentum over MEB vegetation part of patch
726 REAL, DIMENSION(PK%NSIZE_P) :: ZZ0_MEBN ! roughness length for momentum over MEB snow part of patch
727 REAL, DIMENSION(PK%NSIZE_P) :: ZZ0H_MEBN ! roughness length for heat over MEB snow part of path
728 REAL, DIMENSION(PK%NSIZE_P) :: ZZ0EFF_MEBN ! roughness length for momentum over MEB snow part of patch
729 ! Temporary
730 REAL, DIMENSION(PK%NSIZE_P) :: ZP_MEB_SCA_SW ! diffuse incoming SW rad.
731 !
732 !* ISBA water and energy budget
733 !
734 REAL, DIMENSION(PK%NSIZE_P) :: ZP_WG_INI
735 REAL, DIMENSION(PK%NSIZE_P) :: ZP_WGI_INI
736 REAL, DIMENSION(PK%NSIZE_P) :: ZP_WR_INI
737 REAL, DIMENSION(PK%NSIZE_P) :: ZP_SWE_INI
738 !
739 ! miscellaneous
740 !
741 REAL, DIMENSION(PK%NSIZE_P) :: ZP_DEEP_FLUX ! Flux at the bottom of the soil
742 REAL, DIMENSION(PK%NSIZE_P) :: ZP_TDEEP_A ! coefficient for implicitation of Tdeep
743 REAL, DIMENSION(PK%NSIZE_P) :: ZIRRIG_GR ! green roof ground irrigation rate
744 !
745 ! For multi-energy balance
746 LOGICAL :: GMEB ! True if multi-energy balance should be used for the specific patch
747 !
748 INTEGER :: JJ, JI, JK
749 REAL(KIND=JPRB) :: ZHOOK_HANDLE
750 !
751 IF (lhook) CALL dr_hook('COUPLING_ISBA_n:TREAT_PATCH',0,zhook_handle)
752 !
753 !--------------------------------------------------------------------------------------
754 !
755 ! Pack isba forcing outputs
756 !
757 IF (io%NPATCH==1) THEN
758  zp_zenith(:) = pzenith(:)
759  zp_zref(:) = pzref(:)
760  zp_uref(:) = puref(:)
761  zp_wind(:) = zwind(:)
762  zp_u(:) = pu(:)
763  zp_v(:) = pv(:)
764  zp_dir(:) = zdir(:)
765  zp_qa(:) = zqa(:)
766  zp_ta(:) = pta(:)
767  zp_co2(:) = zco2(:)
768  zp_sv(:,:) = psv(:,:)
769  zp_pew_a_coef(:) = ppew_a_coef(:)
770  zp_pew_b_coef(:) = ppew_b_coef(:)
771  zp_pet_a_coef(:) = ppet_a_coef(:)
772  zp_pet_b_coef(:) = ppet_b_coef(:)
773  zp_peq_a_coef(:) = zpeq_a_coef(:)
774  zp_peq_b_coef(:) = zpeq_b_coef(:)
775  zp_rain(:) = prain(:)
776  zp_snow(:) = psnow(:)
777  zp_lw(:) = plw(:)
778  zp_dir_sw(:,:) = pdir_sw(:,:)
779  zp_sca_sw(:,:) = psca_sw(:,:)
780  zp_ps(:) = pps(:)
781  zp_pa(:) = ppa(:)
782  zp_zs(:) = pzs(:)
783 !
784  zp_rhoa(:) = prhoa(:)
785  zp_exna(:) = zexna(:)
786  zp_exns(:) = zexns(:)
787  zp_alfa(:) = zalfa(:)
788 ELSE
789 !cdir nodep
790 !cdir unroll=8
791  DO jj=1,pk%NSIZE_P
792  ji = pk%NR_P(jj)
793  zp_zenith(jj) = pzenith(ji)
794  zp_zref(jj) = pzref(ji)
795  zp_uref(jj) = puref(ji)
796  zp_wind(jj) = zwind(ji)
797  zp_u(jj) = pu(ji)
798  zp_v(jj) = pv(ji)
799  zp_dir(jj) = zdir(ji)
800  zp_qa(jj) = zqa(ji)
801  zp_ta(jj) = pta(ji)
802  zp_co2(jj) = zco2(ji)
803  zp_pew_a_coef(jj) = ppew_a_coef(ji)
804  zp_pew_b_coef(jj) = ppew_b_coef(ji)
805  zp_pet_a_coef(jj) = ppet_a_coef(ji)
806  zp_pet_b_coef(jj) = ppet_b_coef(ji)
807  zp_peq_a_coef(jj) = zpeq_a_coef(ji)
808  zp_peq_b_coef(jj) = zpeq_b_coef(ji)
809  zp_rain(jj) = prain(ji)
810  zp_snow(jj) = psnow(ji)
811  zp_lw(jj) = plw(ji)
812  zp_ps(jj) = pps(ji)
813  zp_pa(jj) = ppa(ji)
814  zp_zs(jj) = pzs(ji)
815 !
816  zp_rhoa(jj) = prhoa(ji)
817  zp_exna(jj) = zexna(ji)
818  zp_exns(jj) = zexns(ji)
819  zp_alfa(jj) = zalfa(ji)
820  ENDDO
821 !
822  DO jk=1,ksv
823 !cdir nodep
824 !cdir unroll=8
825  DO jj=1,pk%NSIZE_P
826  ji=pk%NR_P(jj)
827  zp_sv(jj,jk) = psv(ji,jk)
828  ENDDO
829  ENDDO
830 !
831  DO jk=1,SIZE(pdir_sw,2)
832 !cdir nodep
833 !cdir unroll=8
834  DO jj=1,pk%NSIZE_P
835  ji=pk%NR_P(jj)
836  zp_dir_sw(jj,jk) = pdir_sw(ji,jk)
837  zp_sca_sw(jj,jk) = psca_sw(ji,jk)
838  ENDDO
839  ENDDO
840 !
841 ENDIF
842 !
843 !--------------------------------------------------------------------------------------
844 !
845 ! For multi-energy balance
846 gmeb = io%LMEB_PATCH(jp)
847 !
848 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
849 ! Cosine of the slope typically encoutered in the grid mesh (including subgrid orography)
850 ! and orientation of this slope
851 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
852 !
853 zp_slope_cos(:) = 1./sqrt(1.+issk%XSSO_SLOPE(:)**2)
854 IF(lnosof) zp_slope_cos(:) = 1.0
855 !
856 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
857 ! Snow fractions
858 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
859 ! now caculated at the initialization and at the end of the time step
860 ! (see update_frac_alb_emis_isban.f90) in order to close the energy budget
861 ! between surfex and the atmosphere. This fact do not change the offline runs.
862 !
863 !
864 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
865 ! No implicitation of Tdeep
866 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
867 zp_tdeep_a = 0.
868 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
869 ! Flood properties
870 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
871 !
872 IF(io%LFLOOD)THEN
873  CALL isba_flood_properties(pek%XLAI, kk%XFFLOOD, kk%XFFROZEN, zp_z0flood, zp_ffgnos, zp_ffvnos)
874 ELSE
875  zp_z0flood = xundef
876  zp_ffgnos = 0.0
877  zp_ffvnos = 0.0
878 ENDIF
879 !
880 ! For multi-energy balance
881  IF(gmeb)THEN
882  zsnowdepth(:) = sum(pek%TSNOW%WSNOW(:,:)/pek%TSNOW%RHO(:,:),2)
883  zpalphan(:) =mebpalphan(zsnowdepth,pek%XH_VEG(:))
884  ENDIF
885 !
886 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
887 ! Surface Roughness lengths (m):
888 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
889 !
890 !* effective roughness
891 !
892  CALL z0eff(pek%TSNOW%SCHEME, gmeb, zp_alfa, zp_zref, zp_uref, &
893  pek%XZ0, issk%XZ0REL, pek%XPSN, zpalphan, pek%XZ0LITTER, &
894  pek%TSNOW%WSNOW(:,1), issk, kk%XFF, zp_z0flood, pk%XZ0_O_Z0H, &
895  dk%XZ0, dk%XZ0H, dk%XZ0EFF, zz0g_without_snow, &
896  zz0_mebv, zz0h_mebv, zz0eff_mebv, zz0_mebn, zz0h_mebn, zz0eff_mebn )
897 !
898 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
899 ! Shortwave computations for outputs (albedo for radiative scheme)
900 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
901 ! now caculated at the initialization and at the end of the time step
902 ! (see update_frac_alb_emis_isban.f90) in order to close the energy budget
903 ! between surfex and the atmosphere. This fact do not change the offline runs.
904 !
905 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
906 ! Shortwave computations for ISBA inputs (global snow-free albedo)
907 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
908 !
909 ! ISBA needs global incoming solar radiation: it currently does
910 ! not distinguish between the scattered and direct components,
911 ! or between different wavelengths.
912 !
913 !
914 !* Snow-free surface albedo for each wavelength
915 !
916  CALL isba_albedo(pek, io%LTR_ML, gmeb, zp_dir_sw, zp_sca_sw, &
917  psw_bands, iswb, kk%XALBF, kk%XFFV, kk%XFFG, zp_global_sw, &
918  zp_meb_sca_sw, zp_albnir_tveg, zp_albvis_tveg, &
919  zp_albnir_tsoil, zp_albvis_tsoil )
920 !
921 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
922 ! Intialize computation of ISBA water and energy budget
923 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
924 !
925  CALL isba_budget_init(id%DE%LWATER_BUDGET, io%CISBA, pek, pk%XDG, pk%XDZG, &
926  zp_wg_ini, zp_wgi_ini, zp_wr_ini, zp_swe_ini )
927 !
928 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
929 ! Over Natural Land Surfaces:
930 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
931 zirrig_gr(:)= 0.
932 !
933  CALL isba(io, kk, pk, pek, gk, agk, dk, dek, dmk, &
934  s%TTIME, s%XPOI, s%XABC, gbk%XIACAN, gmeb, ptstep, cimplicit_wind, &
935  zp_zref, zp_uref, zp_slope_cos, zp_ta, zp_qa, zp_exna, zp_rhoa, &
936  zp_ps, zp_exns, zp_rain, zp_snow, zp_zenith, zp_meb_sca_sw, zp_global_sw, zp_lw, &
937  zp_wind, zp_pew_a_coef, zp_pew_b_coef, zp_pet_a_coef, zp_peq_a_coef, &
938  zp_pet_b_coef, zp_peq_b_coef, zp_albnir_tveg, zp_albvis_tveg, zp_albnir_tsoil, &
939  zp_albvis_tsoil, zpalphan, zz0g_without_snow, zz0_mebv, zz0h_mebv, zz0eff_mebv, &
940  zz0_mebn, zz0h_mebn, zz0eff_mebn, zp_tdeep_a, zp_co2, zp_ffgnos, zp_ffvnos, &
941  zp_emis, zp_ustar, zp_ac_agg, zp_hu_agg, zp_resp_biomass_inst, zp_deep_flux, &
942  zirrig_gr )
943 !
944 zp_trad = dk%XTSRAD
945 dk%XLE = pek%XLE
946 !
947 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
948 ! Glacier : ice runoff flux (especally for Earth System Model)
949 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
950 !
951 IF(io%LGLACIER) CALL hydro_glacier(ptstep, zp_snow, pek, dek%XICEFLUX)
952 !
953 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
954 ! Calculation of ISBA water and energy budget (and time tendencies of each reservoir)
955 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
956 !
957  CALL isba_budget(io, pk, pek, dek, id%DE%LWATER_BUDGET, ptstep, zp_wg_ini, zp_wgi_ini, &
958  zp_wr_ini, zp_swe_ini, zp_rain, zp_snow, dk%XEVAP )
959 !
960 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
961 ! Evolution of soil albedo, when depending on surface soil wetness:
962 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
963 !
964 IF (io%CALBEDO=='EVOL' .AND. io%LECOCLIMAP) THEN
965  CALL soil_albedo(io%CALBEDO, kk%XWSAT(:,1),pek%XWG(:,1), kk, pek, "ALL")
966  !
967  CALL albedo(io%CALBEDO, pek )
968 END IF
969 !
970 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
971 ! Vegetation evolution for interactive LAI
972 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
973 !
974 IF (io%CPHOTO=='NIT' .OR. io%CPHOTO=='NCB') THEN
975  CALL vegetation_evol(io, dti, pk, pek, lagrip, ptstep, kmonth, kday, ptime, gk%XLAT, &
976  zp_rhoa, zp_co2, issk, zp_resp_biomass_inst, &
977  ! add optional for accurate dependency to nitrogen
978  ! limitation
979  pswdir=zp_global_sw )
980 END IF
981 !
982 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
983 ! Diagnostic of respiration carbon fluxes and soil carbon evolution
984 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
985 !ii
986 zp_sfco2(:) = 0.
987 dek%XRESP_ECO (:) = 0.
988 dek%XRESP_AUTO(:) = 0.
989 !
990 IF ( io%CPHOTO/='NON' .AND. io%CRESPSL/='NON' .AND. any(pek%XLAI(:)/=xundef) ) THEN
991  CALL carbon_evol(io, kk, pk, pek, dek, ptstep, zp_rhoa, zp_resp_biomass_inst )
992  ! calculation of vegetation CO2 flux
993  ! Positive toward the atmosphere
994  zp_sfco2(:) = dek%XRESP_ECO(:) - dek%XGPP(:)
995 END IF
996 !
997 IF ( io%CPHOTO/='NON') THEN
998  dek%XGPP(:) = dek%XGPP(:) * zp_rhoa(:)
999  dek%XRESP_ECO(:) = dek%XRESP_ECO(:) * zp_rhoa(:)
1000  dek%XRESP_AUTO(:) = dek%XRESP_AUTO(:) * zp_rhoa(:)
1001 ENDIF
1002 !
1003 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1004 ! Reset effecitve roughness lentgh to its nominal value when snow has just disappeared
1005 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1006 !
1007  CALL subscale_z0eff(issk,pek%XZ0(:),.false.,omask=(pek%TSNOW%WSNOW(:,1)==0. .AND. pek%XPSN(:)>0.) )
1008 !
1009 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1010 ! Turbulent fluxes
1011 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1012 !
1013 zp_sfth(:) = dk%XH(:)
1014 zp_sftq(:) = dk%XEVAP(:)
1015 
1016 zp_sfu(:) = 0.
1017 zp_sfv(:) = 0.
1018 WHERE (zp_wind>0.)
1019  zp_sfu(:) = - zp_u(:)/zp_wind(:) * zp_ustar(:)**2 * zp_rhoa(:)
1020  zp_sfv(:) = - zp_v(:)/zp_wind(:) * zp_ustar(:)**2 * zp_rhoa(:)
1021 END WHERE
1022 !
1023 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1024 ! Scalar fluxes
1025 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1026 !
1027 zp_sfts(:,:) = 0.
1028 !
1029 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1030 !
1031 ! --------------------------------------------------------------------------------------
1032 ! Chemical dry deposition :
1033 ! --------------------------------------------------------------------------------------
1034 IF (chi%SVI%NBEQ>0) THEN
1035  IF( chi%CCH_DRY_DEP == "WES89") THEN
1036 
1037  ibeg = chi%SVI%NSV_CHSBEG
1038  iend = chi%SVI%NSV_CHSEND
1039  isize = iend - ibeg + 1
1040 
1041  CALL ch_dep_isba(kk, pk, pek, dk, dmk, chik, &
1042  zp_ustar, zp_ta, zp_pa, zp_trad(:), isize )
1043 
1044  zp_sfts(:,ibeg:iend) = - zp_sv(:,ibeg:iend) * chik%XDEP(:,1:chi%SVI%NBEQ)
1045 
1046  IF (chi%SVI%NAEREQ > 0 ) THEN
1047 
1048  ibeg = chi%SVI%NSV_AERBEG
1049  iend = chi%SVI%NSV_AEREND
1050  CALL ch_aer_dep(zp_sv(:,ibeg:iend), zp_sfts(:,ibeg:iend), zp_ustar, pek%XRESA, zp_ta, zp_rhoa)
1051  END IF
1052  ELSE
1053 
1054  ibeg = chi%SVI%NSV_AERBEG
1055  iend = chi%SVI%NSV_AEREND
1056  zp_sfts(:,ibeg:iend) = 0.
1057  zp_sfts(:,ibeg:iend) = 0.
1058 
1059  ENDIF
1060 ENDIF
1061 !
1062 ! --------------------------------------------------------------------------------------
1063 ! Dust deposition and emission:
1064 ! --------------------------------------------------------------------------------------
1065 !
1066 IF(chi%SVI%NDSTEQ>0)THEN
1067 
1068  ibeg = chi%SVI%NSV_DSTBEG
1069  iend = chi%SVI%NSV_DSTEND
1070  idst = iend - ibeg + 1
1071 
1072  CALL coupling_dst_n(dstk, kk, pk, pek, dk, &
1073  hprogram, &!I [char] Name of program
1074  pk%NSIZE_P, &!I [nbr] number of points in patch
1075  idst, &!I [nbr] number of dust emissions variables
1076  zp_ps, &!I [Pa] surface pressure
1077  zp_qa, &!I [kg/kg] specific humidity
1078  zp_rhoa, &!I [kg/m3] atmospheric density
1079  zp_pa, &!I [K] Atmospheric pressure
1080  zp_ta, &!I [K] Atmospheric temperature
1081  zp_u, &!I [m/s] zonal wind at atmospheric height
1082  zp_uref, &!I [m] reference height of wind
1083  zp_v, &!I [m/s] meridional wind at atmospheric height
1084  zp_zref, &!I [m] reference height of wind
1085  zp_sfts(:,ibeg:iend) &!O [kg/m2/sec] flux of dust
1086  )
1087 !
1088  IF (chi%SVI%NSV_AEREND > 0) THEN ! case of dust/ anthropogenic aerosols coupling
1089 
1090  DO jmode=1,ndstmde
1091  !
1092  !Make index which is 0 for first mode, 3 for second, 6 for third etc
1093  IF (lvarsig_dst) THEN
1094  jsv_idx = (jmode-1)*3
1095  ELSE IF (lrgfix_dst) THEN
1096  jsv_idx = jmode-2
1097  ELSE
1098  jsv_idx = (jmode-1)*2
1099  END IF
1100  !
1101  DO jsv=1, size(hsv)
1102  IF ((trim(hsv(jsv)) == "@DSTI").AND.(jmode==3)) THEN
1103  ! add dust flux and conversion kg/m2/s into molec.m2/s
1104  zp_sfts(:,jsv) = zp_sfts(:,jsv) + zp_sfts(:,ibeg-1+jsv_idx+2)*xavogadro/xmolarweight_dst
1105  END IF
1106  IF ( (trim(hsv(jsv)) == "@DSTJ").AND.(jmode==2)) THEN
1107  ! add dust flux and conversion kg/m2/sec into molec.m2/s
1108  zp_sfts(:,jsv) = zp_sfts(:,jsv) + zp_sfts(:,ibeg-1+jsv_idx+2)*xavogadro/xmolarweight_dst
1109  END IF
1110  END DO
1111  !
1112  END DO
1113  END IF
1114 !
1115 !Modify fluxes due to dry deposition, we introduce a negative flux where dust is lost
1116  CALL dslt_dep(zp_sv(:,ibeg:iend), zp_sfts(:,ibeg:iend), zp_ustar, pek%XRESA, &
1117  zp_ta, zp_rhoa, dstk%XEMISSIG_DST, dstk%XEMISRADIUS_DST, jpmode_dst, &
1118  xdensity_dst, xmolarweight_dst, zconvertfacm0_dst, zconvertfacm6_dst, &
1119  zconvertfacm3_dst, lvarsig_dst, lrgfix_dst, cvermod )
1120 !
1121 !Transfer these fluxes to fluxes understandable by all moments
1122  CALL massflux2momentflux( &
1123  zp_sfts(:,ibeg:iend), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
1124  zp_rhoa, & !I [kg/m3] air density
1125  dstk%XEMISRADIUS_DST, & !I [um] emitted radius for the modes (max 3)
1126  dstk%XEMISSIG_DST, & !I [-] emitted sigma for the different modes (max 3)
1127  ndstmde, &
1128  zconvertfacm0_dst, &
1129  zconvertfacm6_dst, &
1130  zconvertfacm3_dst, &
1132 !
1133 ENDIF !Check on CDSTYN
1134 !
1135 ! --------------------------------------------------------------------------------------
1136 ! Sea Salt deposition
1137 ! --------------------------------------------------------------------------------------
1138 !
1139 IF (chi%SVI%NSLTEQ>0) THEN
1140  !
1141  ibeg = chi%SVI%NSV_SLTBEG
1142  iend = chi%SVI%NSV_SLTEND
1143  !
1144  CALL dslt_dep(zp_sv(:,ibeg:iend), zp_sfts(:,ibeg:iend), zp_ustar, pek%XRESA, &
1145  zp_ta, zp_rhoa, slt%XEMISSIG_SLT, slt%XEMISRADIUS_SLT, jpmode_slt, &
1146  xdensity_slt, xmolarweight_slt, zconvertfacm0_slt, zconvertfacm6_slt, &
1147  zconvertfacm3_slt, lvarsig_slt, lrgfix_slt, cvermod )
1148 
1149  CALL massflux2momentflux( &
1150  zp_sfts(:,ibeg:iend), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
1151  zp_rhoa, & !I [kg/m3] air density
1152  slt%XEMISRADIUS_SLT, & !I [um] emitted radius for the modes (max 3)
1153  slt%XEMISSIG_SLT, & !I [-] emitted sigma for the different modes (max 3)
1154  nsltmde, &
1155  zconvertfacm0_slt, &
1156  zconvertfacm6_slt, &
1157  zconvertfacm3_slt, &
1159 ENDIF !Check on CSLTYN
1160 !
1161 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1162 ! Inline diagnostics
1163 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1164 !
1165  CALL diag_inline_isba_n(id%O, kk, dk, io%LCANOPY, zp_ta, zp_qa, zp_pa, &
1166  zp_ps, zp_rhoa, zp_u, zp_v, zp_zref, zp_uref, zp_sfth, &
1167  zp_sftq, zp_sfu, zp_sfv, zp_dir_sw, zp_sca_sw, zp_lw )
1168 !
1169 !
1170 !-------------------------------------------------------------------------------
1171 !Physical properties see by the atmosphere in order to close the energy budget
1172 !between surfex and the atmosphere. All variables should be at t+1 but very
1173 !difficult to do. Maybe it will be done later. However, Ts can be at time t+1
1174 !-------------------------------------------------------------------------------
1175 !
1176 zp_tsurf(:) = dk%XTS (:)
1177 zp_z0(:) = dk%XZ0 (:)
1178 zp_z0h(:) = dk%XZ0H(:)
1179 zp_qsurf(:) = dk%XQS (:)
1180 !
1181 !-------------------------------------------------------------------------------
1182 !
1183 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1184 ! Isba offline diagnostics for each patch
1185 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1186 !
1187  CALL diag_evap_cumul_isba_n(id%O%LSURF_BUDGETC, id%DE, deck, dck, dek, dk, pek, &
1188  io, ptstep, pk%NSIZE_P, jp, zp_rhoa)
1189 !
1190 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1191 ! Isba offline diagnostics for miscellaneous terms over each patch
1192 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1193 !
1194  CALL diag_misc_isba_n(dmk, kk, pk, pek, agk, io, id%DM%LSURF_MISC_BUDGET, &
1195  id%DM%LVOLUMETRIC_SNOWLIQ, ptstep, lagrip, ptime, pk%NSIZE_P )
1196 !
1197  CALL reproj_diag_isba_n(dk, dek, dmk, pek, id%O%LSURF_BUDGET, id%DE%LSURF_EVAP_BUDGET, &
1198  id%DE%LWATER_BUDGET, id%DM%LSURF_MISC_BUDGET, id%DM%LPROSNOW, &
1199  io%LMEB_PATCH(jp), zp_slope_cos)
1200 !
1201 ! Unpack ISBA diagnostics (modd_diag_isban) for each patch:ISIZE_MAX = MAXVAL(NSIZE_NATURE_P)
1202 
1203 ! (MUST be done BEFORE UNPACK_ISBA_PATCH, because of XP_LE)
1204 !
1205 IF (pek%TSNOW%SCHEME=='3-L'.OR.pek%TSNOW%SCHEME=='CRO') THEN
1206  pek%TSNOW%TEMP(:,:) = dmk%XSNOWTEMP(:,:)
1207  pek%TSNOW%TS (:) = dmk%XSNOWTEMP(:,1)
1208 ENDIF
1209 !
1210 
1211  CALL unpack_diag_patch_n(io, dek, pk, pk%NR_P, pk%NSIZE_P, io%NPATCH, jp, &
1212  zcpl_drain, zcpl_runoff, zcpl_eflood, zcpl_pflood, &
1213  zcpl_iflood, zcpl_iceflux)
1214 !
1215 !----------------------------------------------------------------------
1216 !
1217 ! for further chemical biogenic emissions
1218 !
1219 IF (chi%SVI%NBEQ>0 .AND. chi%LCH_BIO_FLUX) THEN
1220  !
1221  DO jj=1,pk%NSIZE_P
1222  zsw_forbio(pk%NR_P(jj),jp) = 0.
1223  ENDDO
1224  !
1225  DO jswb=1,iswb
1226 !cdir nodep
1227 !cdir unroll=8
1228  DO jj=1,pk%NSIZE_P
1229  zsw_forbio(pk%NR_P(jj),jp) = zsw_forbio(pk%NR_P(jj),jp) + zp_dir_sw(jj,jswb) + zp_sca_sw(jj,jswb)
1230  ENDDO
1231  ENDDO
1232  !
1233 ENDIF
1234 !----------------------------------------------------------------------
1235 !
1236 ! Unpack output dummy arguments for each patch:
1237 !
1238 IF (io%NPATCH==1) THEN
1239  zsftq_tile(:,jp) = zp_sftq(:)
1240  zsfth_tile(:,jp) = zp_sfth(:)
1241  zsfts_tile(:,:,jp)= zp_sfts(:,:)
1242  zsfco2_tile(:,jp) = zp_sfco2(:)
1243  zsfu_tile(:,jp) = zp_sfu(:)
1244  zsfv_tile(:,jp) = zp_sfv(:)
1245  ztrad_tile(:,jp) = zp_trad(:)
1246  ztsurf_tile(:,jp) = zp_tsurf(:)
1247  zz0_tile(:,jp) = zp_z0(:)
1248  zz0h_tile(:,jp) = zp_z0h(:)
1249  zqsurf_tile(:,jp) = zp_qsurf(:)
1250 ELSE
1251 !cdir nodep
1252 !cdir unroll=8
1253  DO jj=1,pk%NSIZE_P
1254  ji = pk%NR_P(jj)
1255  zsftq_tile(ji,jp) = zp_sftq(jj)
1256  zsfth_tile(ji,jp) = zp_sfth(jj)
1257  zsfco2_tile(ji,jp) = zp_sfco2(jj)
1258  zsfu_tile(ji,jp) = zp_sfu(jj)
1259  zsfv_tile(ji,jp) = zp_sfv(jj)
1260  ztrad_tile(ji,jp) = zp_trad(jj)
1261  ztsurf_tile(ji,jp) = zp_tsurf(jj)
1262  zz0_tile(ji,jp) = zp_z0(jj)
1263  zz0h_tile(ji,jp) = zp_z0h(jj)
1264  zqsurf_tile(ji,jp) = zp_qsurf(jj)
1265  ENDDO
1266 !
1267 !cdir nodep
1268 !cdir unroll=8
1269  DO jk=1,SIZE(zp_sfts,2)
1270  DO jj=1,pk%NSIZE_P
1271  ji=pk%NR_P(jj)
1272  zsfts_tile(ji,jk,jp)= zp_sfts(jj,jk)
1273  ENDDO
1274  ENDDO
1275 ENDIF
1276 !
1277 !----------------------------------------------------------------------
1278 !
1279 ! Get output dust flux if we are calculating dust
1280 IF (ndstmde .GE. 1) imoment = int(idst / ndstmde)
1281 IF (chi%SVI%NDSTEQ>0) THEN
1282  DO jsv = 1,ndstmde
1283  IF (imoment == 1) THEN
1284  dstk%XSFDST(:,jsv) = zsfts_tile(:,ndst_mdebeg+jsv-1,jp)
1285  ELSE
1286  dstk%XSFDST(:,jsv) = zsfts_tile(:,ndst_mdebeg+(jsv-1)*imoment+1,jp)
1287  END IF
1288 
1289  dstk%XSFDSTM(:,jsv) = dstk%XSFDSTM(:,jsv) + dstk%XSFDST(:,jsv) * ptstep
1290  ENDDO
1291 ENDIF
1292 !
1293 IF (lhook) CALL dr_hook('COUPLING_ISBA_n:TREAT_PATCH',1,zhook_handle)
1294 !
1295 END SUBROUTINE treat_patch
1296 !==========================================================================================
1297 END SUBROUTINE coupling_isba_n
subroutine coupling_dst_n(DSTK, KK, PK, PEK, DK, HPROGRAM, KI, KDST, PPS, PQA, PRHOA, PPA, PTA, PU, PUREF, PV, PZREF, PSFDST)
subroutine isba_albedo(PEK, OTR_ML, OMEB, PDIR_SW, PSCA_SW, PSW_BA
Definition: isba_albedo.F90:7
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
subroutine isba_flood_properties(PLAI, PFFLOOD, PFFROZEN, PZ0FLOOD, PFFG_NOSNOW, PFFV_NOSNOW)
real, save xmd
Definition: modd_csts.F90:61
subroutine isba_budget_init(OWATER_BUDGET, HISBA, PEK, PDG, PDZG, PWG_INI, PWGI_INI, PWR_INI, PSWE_INI)
integer ndst_mdebeg
character(len=3) cimplicit_wind
real, parameter xmolarweight_slt
subroutine treat_patch(KK, PK, PEK, ISSK, AGK, GK, CHIK, DSTK, DK, DCK, DEK, DECK, DMK, GBK)
real, save xcpd
Definition: modd_csts.F90:63
real, parameter xmolarweight_dst
subroutine carbon_spinup(TPTIME, IO)
logical lvarsig_dst
subroutine average_diag_evap_isba_n(OSURF_BUDGETC, DE, DEC, NDE, NDEC, NP, KNPATCH, OGLACIER, OMEB_PATCH, PTSTEP, PRAIN, PSNOW)
subroutine hydro_glacier(PTSTEP, PSR, PEK, PICEFLUX)
subroutine diag_misc_isba_n(DMK, KK, PK, PEK, AGK, IO, OSURF_MISC_BUDGET, OVOLUMETRIC_SNOWLIQ, PTSTEP, OAGRIP, PTIME, KSIZE)
subroutine coupling_isba_n(DTCO, UG, U, USS, NAG, CHI, NCHI, DTI, ID, NGB, GB, ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
real, parameter xdensity_dst
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
Definition: ch_aer_dep.F90:8
subroutine soilemisno_n(GB, S, K, NP, NPE, PUA, PVA)
Definition: soilemisnon.F90:8
real, save xpi
Definition: modd_csts.F90:43
subroutine ch_dep_isba(KK, PK, PEK, D, DM, CHIK, PUSTAR, PTA, PPA, PTRAD, KSIZE)
Definition: ch_dep_isba.F90:7
subroutine subscale_z0eff(ISSK, PZ0VEG, OZ0REL, OMASK)
integer jpmode_slt
subroutine vegetation_evol(IO, DTI, PK, PEK, OAGRIP, PTSTEP, KMONTH, KDAY, PTIME, PLAT, PRHOA, P_CO2, ISSK, PRESP_BIOMASS_INST, PSWDIR)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
real, save xrd
Definition: modd_csts.F90:62
logical lrgfix_dst
subroutine average_diag_isba_n(DGO, D, DC, ND, NDC, NP, KNPATCH,
subroutine coupling_surf_topd(DE, DEC, DC, DMI, G, IO, S, K, NK, NP, NPE, UG, U, HPROGRAM, KI)
subroutine diag_inline_isba_n(DGO, KK, DK, OCANOPY, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW)
subroutine diag_cpl_esm_isba(IO, S, NK, NP, PTSTEP, PCPL_DRAIN, P
subroutine average_phy(PFRAC_TILE, PTSURF_TILE, PZ0_TILE, PZ0H_TILE, PQSURF_TILE, PUREF, PZREF, PTSURF, PZ0, PZ0H, PQSURF)
Definition: average_phy.F90:11
integer, parameter jprb
Definition: parkind1.F90:32
subroutine isba_sgh_update(PMESH_SIZE, IO, S, K, NK, NP, NPE, PRA
subroutine reproj_diag_isba_n(DK, DEK, DMK, PEK, OSURF_BUDGET, OSURF_EVAP_BUDGET, OWATER_BUDGET, OSURF_MISC_BUDGET, OPROSNOW, OMEB_PATCH, PSLOPECOS)
logical lvarsig_slt
integer, dimension(:), allocatable nmaskt_patch
subroutine isba_budget(IO, PK, PEK, DEK, OWATER_BUDGET, PTSTEP, PWG_INI, PWGI_INI, PWR_INI, PSWE_INI, PRAIN, PSNOW, PEVAP)
Definition: isba_budget.F90:8
real, save xrv
Definition: modd_csts.F90:62
subroutine z0eff(HSNOW_SCHEME, OMEB, PALFA, PZREF, PUREF, PZ0, PZ0REL, PPSN, PPALPHAN, PZ0LITTER, PWSNOW, ISS, PFF, PZ0_FLOOD, 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:13
subroutine soil_albedo(HALBEDO, PWSAT, PWG1, KK, PEK, HBAND)
Definition: soil_albedo.F90:7
subroutine dslt_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF, PEMISSIG, PEMISRADIUS, KPMODE, PDENSITY, PMOLARWEIGHT, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, HVERMOD)
Definition: dslt_dep.F90:10
subroutine average_flux(PFRAC_TILE, PSFTH_TILE, PSFTQ_TILE, PSFTS_TILE, PSFCO2_TILE, PSFU_TILE, PSFV_TILE, PSFTH, PSFTQ, PSFTS, PSFCO2, PSFU, PSFV)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
integer jpmode_dst
subroutine diag_evap_cumul_isba_n(OSURF_BUDGETC, DE, DECK, DCK, DEK, DK, PEK, IO, PTSTEP, KSIZE, KPATCH, PRHOA)
subroutine vegetation_update(DTCO, DTV, KDIM, IO, KK, PK, PEK, KPATCH, PTSTEP, TTIME, PCOVER, OCOVER, OAGRIP, HSFTYPE, OALB, ISSK, ODUPDATED, OABSENT)
subroutine add_forecast_to_date_surf(KYEAR, KMONTH, KDAY, PSEC)
character(len=6) cvermod
subroutine isba(IO, KK, PK, PEK, G, AG, DK, DEK, DMK, TPTIME, PPOI
Definition: isba.F90:7
subroutine deepsoil_update(PTDEEP, PGAMMAT, KMONTH)
subroutine unpack_diag_patch_n(IO, DEK, PK, KMASK, KSIZE, KNPATCH, KPATCH, PCPL_DRAIN, PCPL_RUNOFF, PCPL_EFLOOD, PCPL_PFLOOD, PCPL_IFLOOD, PCPL_ICEFLUX)
subroutine carbon_evol(IO, KK, PK, PEK, DEK, PTSTEP, PRHOA, PRESP_BIOMASS_INST)
Definition: carbon_evol.F90:7
subroutine albedo(HALBEDO, PEK, PSNOW, OMASK)
Definition: albedo.F90:7
real, parameter xdensity_slt
subroutine irrigation_update(NAG, NPE, KPATCH, PTSTEP, KMONTH, KD
subroutine average_rad(PFRAC_TILE, PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE,
Definition: average_rad.F90:8
logical lrgfix_slt
real, save xavogadro
Definition: modd_csts.F90:52
real, save xp00
Definition: modd_csts.F90:57
subroutine average_diag_misc_isba_n(DM, NDM, IO, NP, NPE)
subroutine update_rad_isba_n(IO, S, KK, PK, PEK, KPATCH, PZENITH, PSW_BANDS, PDIR_ALB_WITH_SNOW, PSCA_ALB_WITH_SNOW, PEMIST, PDIR_SW, PSCA_SW)
subroutine ch_bvocem_n(SV, NGB, GB, IO, S, NP, NPE, PSW_FORBIO, PRHOA, PSFTS)
Definition: ch_bvocemn.F90:7