SURFEX v8.1
General documentation of Surfex
convert_patch_isba.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 convert_patch_isba (DTCO, DTV, IO, KDEC, KDEC2, PCOVER, OCOVER,&
7  OAGRIP, HSFTYPE, KPATCH, KK, PK, PEK, OFIX, OTIME, &
8  OMEB, OIRR, OALB, OUPDATE_ALB, PSOILGRID, PWG1, PWSAT, PPERM )
9 ! ##############################################################
10 !
11 !!**** *CONVERT_PATCH_ISBA*
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !! METHOD
17 !! ------
18 !!
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !!
32 !! S. Faroux Meteo-France
33 !!
34 !! MODIFICATION
35 !! ------------
36 !!
37 !! Original 16/11/10
38 !! V. Masson 04/14 Garden and Greenroofs can only be initialized by ecoclimap
39 !! in this routine (not from user specified parameters from
40 !! the nature tile, as the number of points is not the same)
41 !! B. Decharme 04/2013 Add CDGAVG (method to average depth)
42 !! Soil depth = Root depth with ISBA-DF
43 !! except for bare soil pft (but limited to 1m)
44 !! With TR_ML (new radiative transfert) and modis
45 !! albedo, UV albedo not defined (conserv nrj when
46 !! coupled to atmosphere)
47 !! P Samuelsson 10/2014 MEB
48 !!
49 !----------------------------------------------------------------------------
50 !
51 !* 0. DECLARATION
52 ! -----------
53 !
54 !
56 USE modd_data_isba_n, ONLY : data_isba_t
58 !
60 !
61 USE modd_data_cover_par, ONLY : nvegtype, nvt_no, nvt_rock, nvt_snow
62 !
64 !
65 !
76  xdata_stress, &
87 !
88 !
89 USE modd_treedrag, ONLY : ltreedrag
90 !
91 USE modi_av_pgd_param
93 USE modi_soil_albedo
94 !
95 USE yomhook ,ONLY : lhook, dr_hook
96 USE parkind1 ,ONLY : jprb
97 !
98 IMPLICIT NONE
99 !
100 !* 0.1 Declaration of arguments
101 ! ------------------------
102 !
103 !
104 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
105 TYPE(data_isba_t), INTENT(INOUT) :: DTV
106 TYPE(isba_options_t), INTENT(INOUT) :: IO
107 !
108 INTEGER, INTENT(IN) :: KDEC
109 INTEGER, INTENT(IN) :: KDEC2
110 REAL, DIMENSION(:,:), INTENT(IN) :: PCOVER
111 LOGICAL, DIMENSION(:), INTENT(IN) :: OCOVER
112 LOGICAL, INTENT(IN) :: OAGRIP
113  CHARACTER(LEN=*), INTENT(IN) :: HSFTYPE ! nature / garden
114 INTEGER, INTENT(IN) :: KPATCH
115 !
116 TYPE(isba_k_t), INTENT(INOUT) :: KK
117 TYPE(isba_p_t), INTENT(INOUT) :: PK
118 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
119 !
120 LOGICAL, INTENT(IN) :: OFIX
121 LOGICAL, INTENT(IN) :: OTIME
122 LOGICAL, INTENT(IN) :: OMEB
123 LOGICAL, INTENT(IN) :: OIRR
124 LOGICAL, INTENT(IN) :: OALB
125 LOGICAL, INTENT(IN) :: OUPDATE_ALB
126 !
127 REAL, DIMENSION(:), OPTIONAL, INTENT(IN) :: PWG1
128 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PWSAT
129 REAL, DIMENSION(:), OPTIONAL, INTENT(IN) :: PPERM
130 !
131 REAL, DIMENSION(:) , OPTIONAL, INTENT(IN) :: PSOILGRID
132 !
133 !* 0.2 Declaration of local variables
134 ! ------------------------------
135 !
136 REAL, DIMENSION(:), ALLOCATABLE :: ZWORKI
137  CHARACTER(LEN=3) :: YTREE, YNAT, YLAI, YVEG, YBAR, YDIF
138 !
139 INTEGER :: JLAYER ! loop counter on layers
140 INTEGER :: JVEG ! loop counter on vegtypes
141 !
142 LOGICAL :: GDATA ! Flag where initialization can be done
143 ! ! either with ecoclimap of data fields specified
144 ! ! by user on the natural points (GDTA=T)
145 ! ! For fields in town, only ecoclimap option
146 ! ! is treated in this routine (GDATA=F)
147 INTEGER :: JJ ! loop counter
148 !
149 INTEGER :: ISIZE_LMEB_PATCH ! Number of patches with MEB=true
150 !
151 REAL, ALLOCATABLE, DIMENSION(:) :: ZH_VEG
152 !
153 !
154 !* 0.3 Declaration of namelists
155 ! ------------------------
156 !
157 REAL(KIND=JPRB) :: ZHOOK_HANDLE
158 !-------------------------------------------------------------------------------
159 !
160 !* 1. Initializations
161 ! ---------------
162 !
163 IF (lhook) CALL dr_hook('CONVERT_PATCH_ISBA',0,zhook_handle)
164 !
165 IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
166 !
167 IF (hsftype=='NAT') THEN
168  ynat='NAT'
169  ytree='TRE'
170  ylai='LAI'
171  yveg='VEG'
172  ybar='BAR'
173  ydif='DVG'
174  gdata=.true.
175  isize_lmeb_patch = count(io%LMEB_PATCH(:))
176 ELSEIF (hsftype=='GRD') THEN
177  ynat='GRD'
178  ytree='GRT'
179  ylai='GRL'
180  yveg='GRV'
181  ybar='GRB'
182  ydif='GDV'
183  gdata=.false.
184  isize_lmeb_patch = 0
185 ENDIF
186 !
187 IF (ofix) THEN
188  !
189  !* soil layers and root fraction
190 ! -----------------------------
191  !
192  ! compute soil layers (and root fraction if DIF)
193  !
194  CALL set_grid_param(SIZE(pk%XDG,1),SIZE(pk%XDG,2))
195 !
196 ! D ICE
197 ! -----
198 !
199  IF (io%CISBA/='DIF') THEN
200  IF (gdata .AND. any(dtv%LDATA_DICE)) THEN
201  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
202  pk%XD_ICE,dtv%XPAR_VEGTYPE,dtv%XPAR_DICE,ynat,'ARI',pk%NR_P,io%NPATCH,kpatch)
203  ELSE
204  CALL av_pgd_1p(dtco, pk%XD_ICE,pcover,xdata_dice(:,:),ynat,'ARI',ocover,&
205  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
206  ENDIF
207  ENDIF
208 !
209  IF (gdata .AND. any(dtv%LDATA_Z0_O_Z0H)) THEN
210  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
211  pk%XZ0_O_Z0H,dtv%XPAR_VEGTYPE,dtv%XPAR_Z0_O_Z0H,ynat,'ARI',pk%NR_P,io%NPATCH,kpatch)
212  ELSE
213  CALL av_pgd_1p(dtco, pk%XZ0_O_Z0H,pcover,xdata_z0_o_z0h,ynat,'ARI',ocover,&
214  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
215  ENDIF
216 !
217  IF (io%CPHOTO/='NON'.OR.ltreedrag) THEN
218  IF (gdata .AND. any(dtv%LDATA_H_TREE)) THEN
219  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
220  pk%XH_TREE,dtv%XPAR_VEGTYPE,dtv%XPAR_H_TREE,ytree,'ARI',pk%NR_P,io%NPATCH,kpatch)
221  ELSE
222  CALL av_pgd_1p(dtco, pk%XH_TREE,pcover,xdata_h_tree(:,:),ytree,'ARI',ocover,&
223  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
224  ENDIF
225  ENDIF
226 !
227  IF (io%CPHOTO/='NON') THEN
228  !
229  IF (SIZE(pk%XRE25)>0) THEN
230  IF (gdata .AND. any(dtv%LDATA_RE25)) THEN
231  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
232  pk%XRE25,dtv%XPAR_VEGTYPE,dtv%XPAR_RE25,ynat,'ARI',pk%NR_P,io%NPATCH,kpatch)
233  ELSE
234  CALL av_pgd_1p(dtco, pk%XRE25,pcover,xdata_re25,ynat,'ARI',ocover,&
235  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
236  ENDIF
237  ENDIF
238  !
239  IF (SIZE(pk%XDMAX)>0) THEN
240  IF (gdata .AND. any(dtv%LDATA_DMAX)) THEN
241  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
242  pk%XDMAX,dtv%XPAR_VEGTYPE,dtv%XPAR_DMAX,ytree,'ARI',pk%NR_P,io%NPATCH,kpatch)
243  ELSE
244  CALL av_pgd_1p(dtco, pk%XDMAX,pcover,xdata_dmax_st,ytree,'ARI',ocover,&
245  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
246  ENDIF
247  ENDIF
248  !
249  ENDIF
250 !
251 ENDIF
252 !
253 IF (otime) THEN
254 !
255  IF (.NOT.oupdate_alb) THEN
256 ! VEG
257 ! ----
258  IF (gdata .AND. any(dtv%LDATA_VEG)) THEN
259  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, pek%XVEG,dtv%XPAR_VEGTYPE,dtv%XPAR_VEG(:,kdec2,:),&
260  ynat,'ARI',pk%NR_P,io%NPATCH,kpatch)
261  ELSE
262  CALL av_pgd_1p(dtco, pek%XVEG,pcover,xdata_veg(:,kdec,:),ynat,'ARI',ocover,&
263  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
264  ENDIF
265 !
266 ! LAI
267 ! ----
268  IF (gdata .AND. any(dtv%LDATA_LAI)) THEN
269  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
270  pek%XLAI,dtv%XPAR_VEGTYPE,dtv%XPAR_LAI(:,kdec2,:),yveg,'ARI',&
271  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
272  ELSE
273  CALL av_pgd_1p(dtco, pek%XLAI,pcover,xdata_lai(:,kdec,:),yveg,'ARI',ocover,&
274  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
275  ENDIF
276 !
277 ! EMIS
278 ! ----
279 !emis needs VEG by vegtypes is changed at this step
280  IF (gdata .AND. any(dtv%LDATA_EMIS)) THEN
281  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
282  pek%XEMIS ,dtv%XPAR_VEGTYPE,dtv%XPAR_EMIS(:,kdec2,:),ynat,'ARI',&
283  pk%NR_P,io%NPATCH,kpatch)
284  ELSE
285  CALL av_pgd_1p(dtco, pek%XEMIS ,pcover ,xdata_emis_eco(:,kdec,:),ynat,'ARI',ocover,&
286  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
287  ENDIF
288 !
289 ! Z0V
290 ! ----
291  IF (gdata .AND. any(dtv%LDATA_Z0)) THEN
292  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
293  pek%XZ0,dtv%XPAR_VEGTYPE,dtv%XPAR_Z0(:,kdec2,:),ynat,'CDN',&
294  pk%NR_P,io%NPATCH,kpatch)
295  ELSE
296  CALL av_pgd_1p(dtco, pek%XZ0 ,pcover ,xdata_z0(:,kdec,:),ynat,'CDN',ocover,&
297  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
298  ENDIF
299 !
300  ENDIF
301 
302  IF (gdata .AND. any(dtv%LDATA_ALBNIR_VEG)) THEN
303  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
304  pek%XALBNIR_VEG,dtv%XPAR_VEGTYPE,dtv%XPAR_ALBNIR_VEG(:,kdec2,:),yveg,'ARI',&
305  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
306  ELSEIF (io%CALBEDO=='CM13') THEN
307  CALL av_pgd_1p(dtco, pek%XALBNIR_VEG,pcover,xdata_alb_veg_nir(:,kdec,:),yveg,'ARI', ocover,&
308  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
309  ELSE
310  CALL av_pgd_1p(dtco, pek%XALBNIR_VEG,pcover,xdata_albnir_veg,yveg,'ARI',ocover,&
311  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
312  ENDIF
313 !
314  IF (gdata .AND. any(dtv%LDATA_ALBVIS_VEG)) THEN
315  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
316  pek%XALBVIS_VEG,dtv%XPAR_VEGTYPE,dtv%XPAR_ALBVIS_VEG(:,kdec2,:),yveg,'ARI',&
317  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
318  ELSEIF (io%CALBEDO=='CM13') THEN
319  CALL av_pgd_1p(dtco, pek%XALBVIS_VEG,pcover,xdata_alb_veg_vis(:,kdec,:),yveg,'ARI',ocover,&
320  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
321  ELSE
322  CALL av_pgd_1p(dtco, pek%XALBVIS_VEG,pcover,xdata_albvis_veg,yveg,'ARI',ocover,&
323  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
324  ENDIF
325 !
326  IF ((io%CALBEDO=='CM13'.OR.io%LTR_ML)) THEN
327  pek%XALBUV_VEG(:)=pek%XALBVIS_VEG(:)
328  ELSEIF (gdata .AND. any(dtv%LDATA_ALBUV_VEG)) THEN
329  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
330  pek%XALBUV_VEG,dtv%XPAR_VEGTYPE,dtv%XPAR_ALBUV_VEG(:,kdec2,:),yveg,'ARI',&
331  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
332  ELSE
333  CALL av_pgd_1p(dtco, pek%XALBUV_VEG,pcover,xdata_albuv_veg,yveg,'ARI',ocover,&
334  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
335  ENDIF
336 !
337  IF (.NOT.oupdate_alb) THEN
338 ! Other parameters
339 ! ----------------
340  IF( SIZE(pek%XRSMIN)>0) THEN
341  IF (gdata .AND. any(dtv%LDATA_RSMIN)) THEN
342  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
343  pek%XRSMIN,dtv%XPAR_VEGTYPE,dtv%XPAR_RSMIN,ylai,'INV',&
344  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
345  ELSE
346  CALL av_pgd_1p(dtco, pek%XRSMIN,pcover,xdata_rsmin,ylai,'INV',&
347  ocover,pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
348  ENDIF
349  ENDIF
350 !
351  IF (gdata .AND. any(dtv%LDATA_GAMMA)) THEN
352  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
353  pek%XGAMMA,dtv%XPAR_VEGTYPE,dtv%XPAR_GAMMA,yveg,'ARI',&
354  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
355  ELSE
356  CALL av_pgd_1p(dtco, pek%XGAMMA,pcover,xdata_gamma,yveg,'ARI',ocover,&
357  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
358  ENDIF
359 !
360  IF (gdata .AND. any(dtv%LDATA_WRMAX_CF)) THEN
361  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
362  pek%XWRMAX_CF,dtv%XPAR_VEGTYPE,dtv%XPAR_WRMAX_CF,yveg,'ARI',&
363  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
364  ELSE
365  CALL av_pgd_1p(dtco, pek%XWRMAX_CF,pcover,xdata_wrmax_cf,yveg,'ARI',ocover,&
366  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
367  ENDIF
368 !
369  IF (gdata .AND. any(dtv%LDATA_RGL)) THEN
370  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
371  pek%XRGL,dtv%XPAR_VEGTYPE,dtv%XPAR_RGL,yveg,'ARI',&
372  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
373  ELSE
374  CALL av_pgd_1p(dtco, pek%XRGL,pcover,xdata_rgl,yveg,'ARI',ocover,&
375  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
376  ENDIF
377 !
378  IF (gdata .AND. any(dtv%LDATA_CV)) THEN
379  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
380  pek%XCV,dtv%XPAR_VEGTYPE,dtv%XPAR_CV,yveg,'INV',&
381  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
382  ELSE
383  CALL av_pgd_1p(dtco, pek%XCV,pcover,xdata_cv,yveg,'INV',ocover,&
384  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
385  ENDIF
386 !
387  IF (isize_lmeb_patch>0 .OR. io%CPHOTO/='NON') THEN
388 
389  IF( SIZE(pek%XBSLAI)>0) THEN
390  IF (gdata .AND. any(dtv%LDATA_BSLAI)) THEN
391  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
392  pek%XBSLAI,dtv%XPAR_VEGTYPE,dtv%XPAR_BSLAI,yveg,'ARI',&
393  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
394  ELSE
395  CALL av_pgd_1p(dtco, pek%XBSLAI,pcover,xdata_bslai_st,yveg,'ARI',ocover,&
396  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
397  ENDIF
398  ENDIF
399  ENDIF
400 !
401  IF (io%CPHOTO/='NON') THEN
402  !
403  IF (SIZE(pek%XLAIMIN)>0) THEN
404  IF (gdata .AND. any(dtv%LDATA_LAIMIN)) THEN
405  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
406  pek%XLAIMIN,dtv%XPAR_VEGTYPE,dtv%XPAR_LAIMIN,yveg,'ARI',&
407  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
408  ELSE
409  CALL av_pgd_1p(dtco, pek%XLAIMIN,pcover,xdata_laimin,yveg,'ARI',ocover,&
410  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
411  ENDIF
412  ENDIF
413  !
414  IF (SIZE(pek%XSEFOLD)>0) THEN
415  IF (gdata .AND. any(dtv%LDATA_SEFOLD)) THEN
416  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
417  pek%XSEFOLD,dtv%XPAR_VEGTYPE,dtv%XPAR_SEFOLD,yveg,'ARI',&
418  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
419  ELSE
420  CALL av_pgd_1p(dtco, pek%XSEFOLD,pcover,xdata_sefold_st,yveg,'ARI',ocover,&
421  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
422  ENDIF
423  ENDIF
424  !
425  IF ( SIZE(pek%XGMES)>0) THEN
426  IF (gdata .AND. any(dtv%LDATA_GMES)) THEN
427  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
428  pek%XGMES,dtv%XPAR_VEGTYPE,dtv%XPAR_GMES,yveg,'ARI',&
429  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
430  ELSE
431  CALL av_pgd_1p(dtco, pek%XGMES,pcover,xdata_gmes_st,yveg,'ARI',ocover,&
432  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
433  ENDIF
434  ENDIF
435  !
436  IF ( SIZE(pek%XGC)>0) THEN
437  IF (gdata .AND. any(dtv%LDATA_GC)) THEN
438  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
439  pek%XGC,dtv%XPAR_VEGTYPE,dtv%XPAR_GC,yveg,'ARI',&
440  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
441  ELSE
442  CALL av_pgd_1p(dtco, pek%XGC,pcover,xdata_gc_st,yveg,'ARI',ocover,&
443  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
444  ENDIF
445  ENDIF
446  !
447  IF (SIZE(pek%XF2I)>0) THEN
448  IF (gdata .AND. any(dtv%LDATA_F2I)) THEN
449  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
450  pek%XF2I,dtv%XPAR_VEGTYPE,dtv%XPAR_F2I,yveg,'ARI',&
451  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
452  ELSE
453  CALL av_pgd_1p(dtco, pek%XF2I,pcover,xdata_f2i,yveg,'ARI',ocover,&
454  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
455  ENDIF
456  ENDIF
457  !
458  IF (io%CPHOTO=='NIT' .OR. io%CPHOTO=='NCB') THEN
459  !
460  IF (SIZE(pek%XCE_NITRO)>0) THEN
461  IF (gdata .AND. any(dtv%LDATA_CE_NITRO)) THEN
462  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
463  pek%XCE_NITRO,dtv%XPAR_VEGTYPE,dtv%XPAR_CE_NITRO,yveg,'ARI',&
464  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
465  ELSE
466  CALL av_pgd_1p(dtco, pek%XCE_NITRO,pcover,xdata_ce_nitro,yveg,'ARI',ocover,&
467  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
468  ENDIF
469  ENDIF
470  !
471  IF (SIZE(pek%XCF_NITRO)>0) THEN
472  IF (gdata .AND. any(dtv%LDATA_CF_NITRO)) THEN
473  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
474  pek%XCF_NITRO,dtv%XPAR_VEGTYPE,dtv%XPAR_CF_NITRO,yveg,'ARI',&
475  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
476  ELSE
477  CALL av_pgd_1p(dtco, pek%XCF_NITRO,pcover,xdata_cf_nitro,yveg,'ARI',ocover,&
478  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
479  ENDIF
480  ENDIF
481  !
482  IF (SIZE(pek%XCNA_NITRO)>0) THEN
483  IF (gdata .AND. any(dtv%LDATA_CNA_NITRO)) THEN
484  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
485  pek%XCNA_NITRO,dtv%XPAR_VEGTYPE,dtv%XPAR_CNA_NITRO,yveg,'ARI',&
486  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
487  ELSE
488  CALL av_pgd_1p(dtco, pek%XCNA_NITRO,pcover,xdata_cna_nitro,yveg,'ARI',ocover,&
489  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
490  ENDIF
491  ENDIF
492  !
493  ENDIF
494  !
495  ENDIF
496 !
497 ! STRESS
498 ! --------
499  IF (SIZE(pek%LSTRESS)>0) THEN
500  CALL set_stress
501  ENDIF
502 !
503  ENDIF
504 !
505 ENDIF
506 !
507 IF (omeb .AND. .NOT.oupdate_alb) THEN
508  !
509 ! GNDLITTER
510 ! ---------
511  IF (gdata .AND. any(dtv%LDATA_GNDLITTER)) THEN
512  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, pek%XGNDLITTER,dtv%XPAR_VEGTYPE,&
513  dtv%XPAR_GNDLITTER(:,kdec2,:),ynat,'ARI',pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
514  ELSE
515  CALL av_pgd_1p(dtco, pek%XGNDLITTER,pcover,xdata_gndlitter(:,kdec,:),ynat,'ARI',ocover,&
516  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
517  ENDIF
518 !
519 ! H_VEG
520 ! -----
521  IF (gdata .AND. any(dtv%LDATA_H_VEG)) THEN
522  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
523  pek%XH_VEG,dtv%XPAR_VEGTYPE,dtv%XPAR_H_VEG(:,kdec2,:),yveg,'ARI',&
524  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
525  ELSE
526  CALL av_pgd_1p(dtco, pek%XH_VEG,pcover,xdata_h_veg(:,kdec,:),yveg,'ARI',ocover,&
527  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
528  ENDIF
529 ! In case of MEB, force 0<PH_VEG<XUNDEF for those patches where LMEB_PATCH=.T.
530  IF(io%LMEB_PATCH(kpatch))THEN
531  ALLOCATE(zh_veg(SIZE(pek%XH_VEG)))
532  zh_veg=pek%XH_VEG(:)
533  WHERE(zh_veg>1000.) zh_veg=0.
534  zh_veg=max(zh_veg,1.0e-3)
535  pek%XH_VEG(:)=zh_veg
536  DEALLOCATE(zh_veg)
537  ENDIF
538 !
539 ! Z0LITTER
540 ! --------
541  IF (gdata .AND. any(dtv%LDATA_Z0LITTER)) THEN
542  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
543  pek%XZ0LITTER,dtv%XPAR_VEGTYPE,dtv%XPAR_Z0LITTER(:,kdec2,:),ynat,'CDN',&
544  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
545  ELSE
546  CALL av_pgd_1p(dtco, pek%XZ0LITTER ,pcover ,xdata_z0litter(:,kdec,:),ynat,'CDN',ocover,&
547  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
548  ENDIF
549 !
550 ENDIF
551 !
552 IF (oirr .AND. .NOT.oupdate_alb) THEN
553 !
554  IF ((io%CPHOTO == 'NIT' .OR. io%CPHOTO=='NCB') .AND. oagrip) THEN
555  !
556  ! date of seeding
557  ! ---------------
558  !
559  ALLOCATE(zworki(SIZE(pek%TSEED,1)))
560  !
561  IF(SIZE(pek%TSEED)>0) THEN
562  IF (gdata .AND. any(dtv%LDATA_SEED_M) .AND. any(dtv%LDATA_SEED_D)) THEN
563  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
564  zworki,dtv%XPAR_VEGTYPE,dtv%XPAR_SEED_M(:,:),yveg,'MAJ',&
565  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
566  pek%TSEED(:)%TDATE%MONTH = nint(zworki(:))
567  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
568  zworki,dtv%XPAR_VEGTYPE,dtv%XPAR_SEED_D(:,:),yveg,'MAJ',&
569  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
570  pek%TSEED(:)%TDATE%DAY = nint(zworki(:))
571  ELSE
572  CALL av_pgd_1p (pek%TSEED,pcover,tdata_seed(:,:),yveg,'MAJ',ocover,&
573  pk%NR_P,io%NPATCH, kpatch, kdecade=kdec)
574  ENDIF
575  ENDIF
576  !
577  ! date of reaping
578  ! ---------------
579  !
580  IF (SIZE(pek%TREAP)>0) THEN
581  IF (gdata .AND. any(dtv%LDATA_REAP_M) .AND. any(dtv%LDATA_REAP_D)) THEN
582  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
583  zworki,dtv%XPAR_VEGTYPE,dtv%XPAR_REAP_M(:,:),yveg,'MAJ',&
584  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
585  pek%TREAP(:)%TDATE%MONTH = nint(zworki(:))
586  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
587  zworki,dtv%XPAR_VEGTYPE,dtv%XPAR_REAP_D(:,:),yveg,'MAJ',&
588  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
589  pek%TREAP(:)%TDATE%DAY = nint(zworki(:))
590  ELSE
591  CALL av_pgd_1p (pek%TREAP ,pcover,tdata_reap(:,:),yveg,'MAJ',ocover,&
592  pk%NR_P,io%NPATCH, kpatch, kdecade=kdec)
593  ENDIF
594  ENDIF
595  !
596  DEALLOCATE(zworki)
597  !
598  IF (SIZE(pek%XIRRIG)>0) THEN
599  IF (gdata .AND. any(dtv%LDATA_IRRIG)) THEN
600  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
601  pek%XIRRIG,dtv%XPAR_VEGTYPE,dtv%XPAR_IRRIG(:,kdec2,:),yveg,'ARI',&
602  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
603  ELSE
604  CALL av_pgd_1p(dtco, pek%XIRRIG,pcover,xdata_irrig,yveg,'ARI',ocover,&
605  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
606  ENDIF
607  ENDIF
608 !
609  IF (SIZE(pek%XWATSUP)>0) THEN
610  IF (gdata .AND. any(dtv%LDATA_WATSUP)) THEN
611  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
612  pek%XWATSUP,dtv%XPAR_VEGTYPE,dtv%XPAR_WATSUP(:,kdec2,:),yveg,'ARI',&
613  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
614  ELSE
615  CALL av_pgd_1p(dtco, pek%XWATSUP,pcover,xdata_watsup,yveg,'ARI',ocover,&
616  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
617  ENDIF
618  ENDIF
619  !
620  ENDIF
621 !
622 ENDIF
623 !
624 IF (oalb) THEN
625 !
626  IF (gdata .AND. any(dtv%LDATA_ALBNIR_SOIL)) THEN
627  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
628  pek%XALBNIR_SOIL,dtv%XPAR_VEGTYPE,dtv%XPAR_ALBNIR_SOIL(:,kdec2,:),ybar,'ARI',&
629  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
630  ELSEIF (io%CALBEDO=='CM13') THEN
631  CALL av_pgd_1p(dtco, pek%XALBNIR_SOIL,pcover,xdata_alb_soil_nir(:,kdec,:),ybar,'ARI',ocover,&
632  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
633  ELSE
634  CALL soil_albedo (io%CALBEDO, pwsat(:,1), pwg1, kk, pek, "NIR" )
635  ENDIF
636 !
637  IF (gdata .AND. any(dtv%LDATA_ALBVIS_SOIL)) THEN
638  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
639  pek%XALBVIS_SOIL,dtv%XPAR_VEGTYPE,dtv%XPAR_ALBVIS_SOIL(:,kdec2,:),ybar,'ARI',&
640  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
641  ELSEIF (io%CALBEDO=='CM13') THEN
642  CALL av_pgd_1p(dtco, pek%XALBVIS_SOIL,pcover,xdata_alb_soil_vis(:,kdec,:),ybar,'ARI',ocover,&
643  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
644  ELSE
645  CALL soil_albedo (io%CALBEDO, pwsat(:,1), pwg1, kk, pek, "VIS" )
646  ENDIF
647 !
648 
649  IF (io%CALBEDO=='CM13'.OR.io%LTR_ML) THEN
650  pek%XALBUV_SOIL(:)=pek%XALBVIS_SOIL(:)
651  ELSEIF (gdata .AND. any(dtv%LDATA_ALBUV_SOIL)) THEN
652  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
653  pek%XALBUV_SOIL,dtv%XPAR_VEGTYPE,dtv%XPAR_ALBUV_SOIL(:,kdec2,:),ynat,'ARI',&
654  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
655  ELSE
656  CALL soil_albedo (io%CALBEDO, pwsat(:,1), pwg1, kk, pek, "UV" )
657  ENDIF
658 !
659 ENDIF
660 !
661 IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
662 !
663 IF (lhook) CALL dr_hook('CONVERT_PATCH_ISBA',1,zhook_handle)
664 !
665 !-------------------------------------------------------------------------------
666 CONTAINS
667 !-------------------------------------------------------------------------------
668 !
669 SUBROUTINE set_stress
670 !
671 IMPLICIT NONE
672 !
673 REAL, DIMENSION(PK%NSIZE_P) :: ZWORK
674 REAL, DIMENSION(SIZE(DTV%LPAR_STRESS,1),NVEGTYPE) :: ZSTRESS
675 INTEGER :: JI
676 REAL(KIND=JPRB) :: ZHOOK_HANDLE
677 !
678 IF (lhook) CALL dr_hook('CONVERT_PATCH_ISBA:SET_STRESS',0,zhook_handle)
679 !
680 IF (gdata .AND. any(dtv%LDATA_STRESS)) THEN
681  zstress(:,:)=0.
682  DO jveg=1,nvegtype
683  DO ji = 1,pk%NSIZE_P
684  IF (dtv%LPAR_STRESS(ji,jveg)) zstress(pk%NR_P(ji),jveg) = 1.
685  ENDDO
686  ENDDO
687  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
688  zwork,dtv%XPAR_VEGTYPE,zstress,yveg,'ARI',pk%NR_P,io%NPATCH,kpatch,kdecade=kdec2)
689 ELSE
690  CALL av_pgd_1p(dtco, zwork,pcover,xdata_stress(:,:),yveg,'ARI',ocover,pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
691 ENDIF
692 !
693 WHERE (zwork(:)<0.5)
694  pek%LSTRESS(:) = .false.
695 ELSEWHERE
696  pek%LSTRESS(:) = .true.
697 END WHERE
698 !
699 IF (lhook) CALL dr_hook('CONVERT_PATCH_ISBA:SET_STRESS',1,zhook_handle)
700 END SUBROUTINE set_stress
701 !
702 !-------------------------------------------------------------------------------
703 SUBROUTINE set_grid_param(KNI,KGROUND)
704 !
705 USE modd_pgdwork, ONLY : xprec
706 !
707 USE modd_surf_par, ONLY : xundef, nundef
708 USE modd_isba_par, ONLY : xpermfrac
709 !
710 USE modd_reprod_oper, ONLY : cdgavg, cdgdif
711 !
712 USE modi_ini_data_rootfrac
713 USE modi_ini_data_soil
715 USE modi_abor1_sfx
716 !
717 IMPLICIT NONE
718 !
719 INTEGER, INTENT(IN) :: KNI
720 INTEGER, INTENT(IN) :: KGROUND
721 !
722 REAL, DIMENSION (SIZE(XDATA_GROUND_DEPTH,1),NVEGTYPE) :: ZDATA_GROUND_DEPTH
723 !
724 REAL, DIMENSION (KNI) :: ZDTOT, ZDG2, ZROOT_EXT, ZROOT_LIN
725 !
726 INTEGER :: JJ, JL
727 !
728 ! flags taking general surface type flag into account
729 LOGICAL :: GDATA_DG, GDATA_GROUND_DEPTH, GDATA_ROOT_DEPTH, GDATA_ROOTFRAC, &
730  GNOECO, GMEB
731 !-------------------------------------------------------------------------!
732 REAL(KIND=JPRB) :: ZHOOK_HANDLE
733 !
734 IF (lhook) CALL dr_hook('CONVERT_PATCH_ISBA:SET_GRID_PARAM',0,zhook_handle)
735 !
736 IF(io%CISBA=='DIF')THEN
737  IF(.NOT.ofix) CALL abor1_sfx('CONVERT_PATCH_ISBA: SET_GRID_PARAM: KWG_LAYER, PDROOT and PGD2 must be present with DIF')
738 
739 ENDIF
740 !
741 gmeb = (omeb .AND. (isize_lmeb_patch>0))
742 !
743 zdtot(:) = xundef
744 zdg2(:) = xundef
745 !
746 pk%NWG_LAYER(:) = nundef
747 pk%XROOTFRAC(:,:) = xundef
748 !
749 zdata_ground_depth(:,:) = xdata_ground_depth(:,:)
750 !
751 gdata_dg = gdata .AND. any(dtv%LDATA_DG)
752 gdata_ground_depth = gdata .AND. any(dtv%LDATA_GROUND_DEPTH)
753 gdata_root_depth = gdata .AND. any(dtv%LDATA_ROOT_DEPTH)
754 gdata_rootfrac = gdata .AND. any(dtv%LDATA_ROOTFRAC)
755 !
756 !####################################################################################
757 !
758 !CDGAVG : old for reprod = 'ARI' Arithmetic average for all depth
759 ! recommended = 'INV' Harmonic average for all depth (default)
760 !
761 !CDGDIF : old for reprod = 'SOIL' d3 soil depth from ecoclimap for isba-df
762 ! recommended = 'ROOT' d2 soil depth from ecoclimap for isba-df (default)
763 !
764 !####################################################################################
765 !n
766 !DG IN NAMELIST => GROUND_DEPTH KNOWN, ROOT_DEPTH UNKNOWN
767 IF (gdata_dg) THEN
768  !
769  DO jlayer=1,kground
770  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
771  pk%XDG(:,jlayer),dtv%XPAR_VEGTYPE,dtv%XPAR_DG(:,jlayer,:),ynat,cdgavg,&
772  pk%NR_P,io%NPATCH,kpatch)
773  ENDDO
774  !
775 ENDIF
776 !
777 IF(.NOT.gdata_ground_depth.AND.io%CISBA=='DIF'.AND.cdgdif=='ROOT')THEN
778  !
779  DO jveg=1,nvegtype
780  IF(jveg==nvt_no)THEN
781  WHERE(xdata_ground_depth(:,jveg)/=xundef)
782  zdata_ground_depth(:,jveg) = min(1.0,xdata_ground_depth(:,jveg))
783  ENDWHERE
784  ELSEIF(jveg/=nvt_rock.AND.jveg/=nvt_snow)THEN
785  zdata_ground_depth(:,jveg) = max(1.0,xdata_root_depth(:,jveg))
786  ELSE
787  zdata_ground_depth(:,jveg) = xdata_root_depth(:,jveg)
788  ENDIF
789  ENDDO
790  !
791 ENDIF
792 !
793 !CALCULATION OF GROUND_DEPTH IN ZDTOT : ECOCLMAP OR LDATA_GROUND_DEPTH
794 IF (io%CISBA/='2-L') THEN
795  !
796  IF (gdata_ground_depth .AND. (io%CISBA=='DIF' .OR. .NOT.gdata_dg)) THEN
797  !GROUND DEPTH IN NAMELIST
798  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
799  zdtot(:),dtv%XPAR_VEGTYPE,dtv%XPAR_GROUND_DEPTH(:,:),ynat,cdgavg,&
800  pk%NR_P,io%NPATCH,kpatch)
801  !Error Due to machine precision
802  WHERE(zdtot(:)/=xundef) zdtot(:)=nint(zdtot(:)*xprec)/xprec
803  !CONSISTENCY CHECK
804  IF (gdata_dg) zdtot(:) = min(zdtot(:),pk%XDG(:,kground))
805  ELSEIF (gdata_dg) THEN
806  !GROUND DEPTH FROM NAMELIST DG
807  zdtot(:) = pk%XDG(:,kground)
808  ELSE
809  !GROUND DEPTH FROM ECOCLMAP
810  CALL av_pgd_1p(dtco, zdtot(:),pcover,zdata_ground_depth(:,:),ynat,cdgavg,ocover,&
811  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
812  IF(io%CISBA=='DIF'.AND.cdgdif=='ROOT')zdg2(:)=zdtot(:)
813  ENDIF
814  !
815 ENDIF
816 !
817 !CALCULATION OF GROUND_DEPTH : Permafrost depth put to 12m
818 IF(io%CISBA=='DIF'.AND.io%LPERM) CALL permafrost_depth(pk%NSIZE_P,kpatch,pperm,zdtot)
819 !
820 !IN BOTH CASES, ROOT_DEPTH IS NEEDED: PUT IN DG2
821 IF (io%CISBA=='DIF' .OR. .NOT.gdata_dg) THEN
822  !
823  gnoeco=(gdata_root_depth .AND. .NOT.gdata_rootfrac)
824  IF (gnoeco) THEN
825  !ROOT_DEPTH IN NAMELIST
826  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
827  zdg2(:),dtv%XPAR_VEGTYPE,dtv%XPAR_ROOT_DEPTH(:,:),ynat,cdgavg,&
828  pk%NR_P,io%NPATCH,kpatch)
829  !Error Due to machine precision
830  WHERE(zdg2(:)/=xundef) zdg2(:)=nint(zdg2(:)*xprec)/xprec
831  !CONSISTENCY CHECKS
832  IF (any(dtv%LDATA_DG)) zdg2(:) = min(zdg2(:),pk%XDG(:,kground))
833  zdtot(:) = max(zdg2(:),zdtot(:))
834  IF (io%CISBA=='DIF') THEN
835  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
836  pk%XDROOT(:),dtv%XPAR_VEGTYPE,dtv%XPAR_ROOT_DEPTH(:,:),ydif,cdgavg,&
837  pk%NR_P,io%NPATCH,kpatch)
838  !error due to machine precision
839  WHERE(pk%XDROOT(:)/=xundef)
840  pk%XDROOT(:)=nint(pk%XDROOT(:)*xprec)/xprec
841  ENDWHERE
842  IF(cdgdif=='ROOT')THEN
843  WHERE(pk%XDROOT(:).NE.xundef) zdtot(:) = max(pk%XDROOT(:),zdtot(:))
844  WHERE(pk%XDROOT(:).NE.xundef) zdg2(:) = max(pk%XDROOT(:),zdg2(:))
845  ELSE
846  CALL av_pgd_1p(dtco, zdg2(:),pcover,xdata_root_depth(:,:),ynat,cdgavg,ocover,&
847  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
848  ENDIF
849  !consistency checks
850  IF (gdata_dg) WHERE (pk%XDROOT(:).NE.xundef) pk%XDROOT(:) = min(pk%XDROOT(:),pk%XDG(:,kground))
851  ENDIF
852  ELSE
853  !ROOT_DEPTH FROM ECOCLMAP
854  IF (io%CISBA=='DIF')THEN
855  CALL av_pgd_1p(dtco, pk%XDROOT(:),pcover,xdata_root_depth(:,:),ydif,cdgavg,ocover,&
856  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
857  IF(cdgdif=='ROOT')THEN
858  WHERE(pk%XDROOT(:).NE.xundef) zdtot(:) = max(pk%XDROOT(:),zdtot(:))
859  WHERE(pk%XDROOT(:).NE.xundef) zdg2(:) = max(pk%XDROOT(:),zdg2(:))
860  ELSE
861  CALL av_pgd_1p(dtco, zdg2(:),pcover,xdata_root_depth(:,:),ynat,cdgavg,ocover,&
862  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
863  ENDIF
864  ELSE
865  CALL av_pgd_1p(dtco, zdg2(:),pcover,xdata_root_depth(:,:),ynat,cdgavg,ocover,&
866  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
867  ENDIF
868  IF ( gdata_ground_depth .OR. gdata_dg ) THEN
869  zdg2(:) = min(zdg2(:),zdtot(:))
870  IF (io%CISBA=='DIF') WHERE (pk%XDROOT(:).NE.xundef) pk%XDROOT(:) = min(pk%XDROOT(:),zdtot(:))
871  ENDIF
872  ENDIF
873  !
874  !CALCULATION OF DG IF NOT IN NAMELIST
875  IF (.NOT.gdata_dg) THEN
876  !
877  IF (io%CISBA=='DIF') THEN
878  IF( maxval(zdtot,zdtot/=xundef)>psoilgrid(kground) ) THEN
879  CALL abor1_sfx('CONVERT_PATCH_ISBA: not enough soil layer with optimized grid')
880  ENDIF
881  ENDIF
882  !
883  WHERE(zdg2(:)==xundef.AND.zdtot(:)/=xundef) zdg2(:)=0.0 !No vegetation
884  !
885  !IF CISBA=DIF CALCULATES ALSO KWG_LAYER WITH USE OF SOILGRID $
886  CALL ini_data_soil(io%CISBA, pk%XDG,prootdepth=zdg2, psoildepth=zdtot,&
887  psoilgrid=psoilgrid, kwg_layer=pk%NWG_LAYER )
888  IF (io%CISBA=='DIF'.AND.cdgdif=='ROOT')THEN
889  DO jj=1,kni
890  IF(io%LPERM.AND.pk%NWG_LAYER(jj)/=nundef)THEN
891  IF(pperm(jj)<xpermfrac) zdg2(jj)=pk%XDG(jj,pk%NWG_LAYER(jj))
892  ELSEIF(pk%NWG_LAYER(jj)/=nundef)THEN
893  zdg2(jj)=pk%XDG(jj,pk%NWG_LAYER(jj))
894  ELSE
895  zdg2(jj)=xundef
896  ENDIF
897  ENDDO
898  ENDIF
899 
900  !
901  ELSEIF ( io%CISBA=='DIF') THEN
902  !
903  !CALCULATION OF KWG_LAYER IF DG IN NAMELIST
904  IF(gdata_ground_depth)THEN
905  DO jj=1,kni
906  DO jl=1,kground
907  IF( pk%XDG(jj,jl) <= zdtot(jj) .AND. zdtot(jj) < xundef ) &
908  pk%NWG_LAYER(jj) = jl
909  ENDDO
910  ENDDO
911  ELSE
912  pk%NWG_LAYER(:) = kground
913  ENDIF
914  !
915  ENDIF
916  !
917  ! DROOT AND DG2 LMITED BY KWG_LAYER
918  IF (io%CISBA=='DIF' .AND. .NOT.any(dtv%LDATA_ROOTFRAC)) THEN
919  !
920  DO jj=1,kni
921  IF(pk%NWG_LAYER(jj)/=nundef) THEN
922  jl = pk%NWG_LAYER(jj)
923  zdg2(jj)=min(zdg2(jj),pk%XDG(jj,jl))
924  IF (pk%XDROOT(jj)/=xundef) pk%XDROOT(jj)=min(pk%XDROOT(jj),pk%XDG(jj,jl))
925  ENDIF
926  ENDDO
927  !
928  ENDIF
929  !
930 ENDIF
931 !
932 !CALCULATION OF ROOTFRAC
933 IF (io%CISBA=='DIF') THEN
934  !
935  IF (gdata_rootfrac) THEN
936  !
937  !ROOTFRAC IN NAMELIST
938  DO jl=1,kground
939  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
940  pk%XROOTFRAC(:,jl),dtv%XPAR_VEGTYPE,dtv%XPAR_ROOTFRAC(:,jl,:),ynat,'ARI',&
941  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
942  ENDDO
943  !
944  zdg2(:)=0.0
945  pk%XDROOT(:)=0.0
946  DO jj=1,kni
947  !
948  !DROOT DEPENDS ON ROOTFRAC
949  DO jl=kground,1,-1
950  IF( pk%XROOTFRAC(jj,jl)>=1.0 )THEN
951  zdg2(jj) = pk%XDG(jj,jl)
952  pk%XDROOT(jj) = pk%XDG(jj,jl)
953  ELSEIF (jl<kground.AND.pk%XROOTFRAC(jj,jl)>0.0) THEN
954  IF (pk%NWG_LAYER(jj)<=jl) pk%NWG_LAYER(jj) = jl+1
955  EXIT
956  ENDIF
957  ENDDO
958  !
959  IF(pk%XDROOT(jj)==0.0.AND.zdg2(jj)==0.0)THEN
960  jl=pk%NWG_LAYER(jj)
961  zdg2(jj)=min(0.6,pk%XDG(jj,jl))
962  ENDIF
963  !
964  ENDDO
965  !
966  ELSE
967  !
968  !DEPENDS ON DROOT
969  IF (gdata .AND. any(dtv%LDATA_ROOT_LIN)) THEN
970  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
971  zroot_lin(:),dtv%XPAR_VEGTYPE,dtv%XPAR_ROOT_LIN(:,:),ydif,'ARI',&
972  pk%NR_P,io%NPATCH,kpatch)
973  ELSE
974  CALL av_pgd_1p(dtco, zroot_lin(:),pcover,xdata_root_lin(:,:),ydif,'ARI',ocover,&
975  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
976  ENDIF
977  !
978  IF (gdata .AND. any(dtv%LDATA_ROOT_EXTINCTION)) THEN
979  CALL av_pgd_param(dtv%XPAR_LAI, dtv%XPAR_VEG, &
980  zroot_ext(:),dtv%XPAR_VEGTYPE,dtv%XPAR_ROOT_EXTINCTION(:,:),ydif,'ARI',&
981  pk%NR_P,io%NPATCH,kpatch)
982  ELSE
983  CALL av_pgd_1p(dtco, zroot_ext(:),pcover,xdata_root_extinction(:,:),ydif,'ARI',ocover,&
984  pk%NR_P,io%NPATCH,kpatch,kdecade=kdec)
985  ENDIF
986  !
987  CALL ini_data_rootfrac(pk%XDG,pk%XDROOT,zroot_ext,zroot_lin,pk%XROOTFRAC)
988  ENDIF
989  !
990  WHERE(pk%XROOTFRAC(:,:)/=xundef) pk%XROOTFRAC(:,:)=nint(pk%XROOTFRAC(:,:)*xprec)/xprec
991  !
992  pk%XDG2(:) = zdg2(:)
993  !
994 ENDIF
995 !
996 IF (lhook) CALL dr_hook('CONVERT_PATCH_ISBA:SET_GRID_PARAM',1,zhook_handle)
997 !
998 END SUBROUTINE set_grid_param
999 !-------------------------------------------------------------------------------
1000 END SUBROUTINE convert_patch_isba
real, dimension(:,:), allocatable xdata_irrig
real, dimension(:,:), allocatable xdata_ce_nitro
real, dimension(:,:), allocatable xdata_albnir_veg
real, dimension(:,:), allocatable xdata_sefold_st
real, dimension(:,:), allocatable xdata_root_lin
real, dimension(:,:), allocatable xdata_albvis_veg
real, dimension(:,:,:), allocatable xdata_z0
real, dimension(:,:), allocatable xdata_rgl
subroutine convert_patch_isba(DTCO, DTV, IO, KDEC, KDEC2, PCOVER,
real, dimension(:,:), allocatable xdata_gc
real, dimension(:,:), allocatable xdata_dmax
type(date_time), dimension(:,:), pointer tdata_seed
real, dimension(:,:), allocatable xdata_gmes_st
real, dimension(:,:), allocatable xdata_albuv_veg
real, dimension(:,:,:), allocatable xdata_alb_soil_nir
real, dimension(:,:), allocatable xdata_gamma
real, parameter xprec
real, dimension(:,:), allocatable xdata_root_depth
real, dimension(:,:), allocatable xdata_laimin
real, dimension(:,:), allocatable xdata_gmes
subroutine ini_data_soil(HISBA, PDG_OUT, PSURF, PSURF2, PROOTDEPTH, PSOILDEPTH, PSOILGRID, KWG_LAYER)
real, dimension(:,:), allocatable xdata_cv
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
real, dimension(:,:), allocatable xdata_z0_o_z0h
real, dimension(:,:), allocatable xdata_bslai
real, dimension(:,:), allocatable xdata_dmax_st
type(date_time), dimension(:,:), pointer tdata_reap
real, dimension(:,:), allocatable xdata_rsmin
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:,:), allocatable xdata_bslai_st
character(len=4) cdgdif
real, dimension(:,:,:), allocatable xdata_alb_veg_nir
integer, parameter nundef
character(len=3) cdgavg
real, dimension(:,:), allocatable xdata_cf_nitro
real, dimension(:,:), allocatable xdata_wrmax_cf
subroutine soil_albedo(HALBEDO, PWSAT, PWG1, KK, PEK, HBAND)
Definition: soil_albedo.F90:7
real, dimension(:,:,:), allocatable xdata_veg
subroutine ini_data_rootfrac(PDG, PROOTDEPTH, PROOT_EXT, PROOT_LI
logical lhook
Definition: yomhook.F90:15
real, dimension(:,:), allocatable xdata_dice
subroutine set_grid_param(KNI, KGROUND)
real, dimension(:,:,:), allocatable xdata_h_veg
real, dimension(:,:), allocatable xdata_h_tree
real, dimension(:,:,:), allocatable xdata_alb_veg_vis
real, dimension(:,:,:), allocatable xdata_lai
real, dimension(:,:,:), allocatable xdata_z0litter
real, dimension(:,:), allocatable xdata_watsup
real, dimension(:,:), allocatable xdata_gc_st
real, dimension(:,:), allocatable xdata_re25
real, dimension(:,:), allocatable xdata_ground_depth
real, dimension(:,:), allocatable xdata_cna_nitro
real, dimension(:,:), allocatable xdata_stress
real, dimension(:,:), allocatable xdata_f2i
subroutine av_pgd_param(PLAI_IN, PVEG_IN, PFIELD, PVEGTYPE, PDATA, HSFTYPE, HATYPE, KMAS
Definition: av_pgd_param.F90:8
real, dimension(:,:,:), allocatable xdata_emis_eco
real, dimension(:,:), allocatable xdata_sefold
real, dimension(:,:,:), allocatable xdata_alb_soil_vis
real, dimension(:,:), allocatable xdata_root_extinction
subroutine set_stress
real, dimension(:,:,:), allocatable xdata_gndlitter
static int count
Definition: memory_hook.c:21