SURFEX v8.1
General documentation of Surfex
extrapol_fields.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 SUBROUTINE extrapol_fields (DTCO, DTV, KDIM, IO, S, UG, U, HPROGRAM,KLUOUT)
6 !!
7 !! PURPOSE
8 !! -------
9 !! parameters defined by cover need to be extrapolated if LDATA_ISBATYPE and NOT LDATA_"PARAM"
10 !! all ten-day periods are calculated one time for all, then written in PGD.txt
11 !!
12 !! METHOD
13 !! ------
14 !! these parameters are: LAI, HT, DG, ROOTFRAC, IRRIG, WATSUP
15 !! Parameters are calculated as in ecoclimap, by vegtype, and then extrapolated
16 !
17 !! EXTERNAL
18 !! --------
19 !!
20 !! IMPLICIT ARGUMENTS
21 !! ------------------
22 !!
23 !! REFERENCE
24 !! ---------
25 !!
26 !! AUTHOR
27 !! ------
28 !!
29 !! S. Faroux Meteo-France
30 !!
31 !! MODIFICATION
32 !! ------------
33 !!
34 !! Original 16/11/10
35 !! R. Alkama 04/12 : add 6 new tree vegtype (9 instead 3)
36 !!
37 !! DECLARATIONS
38 !!
39 !
40 !
42 USE modd_data_isba_n, ONLY : data_isba_t
44 USE modd_isba_n, ONLY : isba_s_t
46 USE modd_surf_atm_n, ONLY : surf_atm_t
47 !
49 USE modd_agri, ONLY : lagrip
50 USE modd_treedrag, ONLY : ltreedrag
51 !
52 USE modd_surf_par, ONLY : xundef
53 !
54 USE modd_reprod_oper, ONLY : cdgdif, cdgavg
55 !
56 USE modd_data_cover_par, ONLY : nvegtype, nvt_no, nvt_rock, nvt_snow, jpcover
57 !
66 !
67 USE modi_av_pgd
68 USE modi_ini_var_from_vegtype_data
69 !
70 USE yomhook ,ONLY : lhook, dr_hook
71 USE parkind1 ,ONLY : jprb
72 !
73 IMPLICIT NONE
74 !
75 !* 0.1 Declaration of arguments
76 ! ------------------------
77 !
78 !
79 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
80 TYPE(data_isba_t), INTENT(INOUT) :: DTV
81 INTEGER, INTENT(IN) :: KDIM
82 TYPE(isba_options_t), INTENT(INOUT) :: IO
83 TYPE(isba_s_t), INTENT(INOUT) :: S
84 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
85 TYPE(surf_atm_t), INTENT(INOUT) :: U
86 !
87  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! host program
88 INTEGER, INTENT(IN) :: KLUOUT
89 !
90 !
91 !* 0.2 Declaration of local variables
92 ! ------------------------------
93 !
94 TYPE(date_time), DIMENSION(:,:), ALLOCATABLE :: TPWORK
95 REAL, DIMENSION (SIZE(XDATA_GROUND_DEPTH,1),NVEGTYPE) :: ZDATA_GROUND_DEPTH
96 !
97  CHARACTER(LEN=3) :: YTREE, YNAT, YVEG, YDIF, YROOT, YBAR
98 REAL, DIMENSION(KDIM,36,NVEGTYPE) :: ZWORK
99 REAL, DIMENSION(NVEGTYPE) :: ZDEF
100 REAL :: ZFRAC
101 INTEGER :: JTIME, JVEGTYPE, JCOVER
102 !
103 REAL(KIND=JPRB) :: ZHOOK_HANDLE
104 !
105 !----------------------------------------------------------------------------
106 IF (lhook) CALL dr_hook('EXTRAPOL_FIELDS',0,zhook_handle)
107 !
108 ynat ='NAT'
109 ytree='TRE'
110 yveg ='VEG'
111 ydif ='DVG'
112 ybar='BAR'
113 !
114 ! 2. Extrapolations for land use or user
115 ! --------------------------------------
116 !
117 ! LAI
118 ! ---
119 IF (.NOT.any(dtv%LDATA_LAI).AND.io%CPHOTO/='NIT'.AND.io%CPHOTO/='NCB') THEN
120 !
121  ALLOCATE(dtv%XPAR_LAI (kdim,dtv%NTIME,nvegtype))
122  DO jtime=1,36
123 !
124 ! ECOCLIMAP spatial distribution field
125  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
126  CALL av_pgd(dtco,zwork(:,jtime,:),s%XCOVER,xdata_lai(:,jtime,:),yveg,'ARI',s%LCOVER,kdecade=jtime)
127  DO jvegtype=1,3
128  WHERE (dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) zwork(:,jtime,jvegtype) = 0.
129  ENDDO
130  !
131  zdef(:) = xundef
132  DO jvegtype=1,nvegtype
133  IF (any(dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) .AND. all(zwork(:,jtime,jvegtype)==xundef)) THEN
134  zfrac = 0.
135  DO jcover = 1,jpcover
136  IF (dtco%XDATA_VEGTYPE(jcover,jvegtype)>zfrac) THEN
137  zdef(jvegtype) = xdata_lai(jcover,jtime,jvegtype)
138  zfrac = dtco%XDATA_VEGTYPE(jcover,jvegtype)
139  IF (zfrac==1.) EXIT
140  ENDIF
141  ENDDO
142  ENDIF
143  ENDDO
144  !
145 ! Extrapolation toward new vegtype distribution field from updated land-use map or user
146  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
147  hprogram,kluout,'LAI: leaf area index',zwork(:,jtime,:),pdef=zdef)
148 !
149  ENDDO
150 !
151  CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_LAI)
152 !
153  dtv%LDATA_LAI(:)=.true.
154 !
155 ENDIF
156 !
157 ! H_TREE
158 ! ------
159 IF (.NOT.any(dtv%LDATA_H_TREE) .AND. ((io%CPHOTO/='NON'.OR.ltreedrag) .OR. .NOT.any(dtv%LDATA_Z0))) THEN
160 !
161  ALLOCATE(dtv%XPAR_H_TREE (kdim,nvegtype))
162  zdef(:)=1.
163  zdef(4:6)=10.
164  zdef(13:17)=10.
165  zdef(19)=1.
166 !
167 ! ECOCLIMAP spatial distribution field
168  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
169  CALL av_pgd(dtco,dtv%XPAR_H_TREE,s%XCOVER,xdata_h_tree,ytree,'ARI',s%LCOVER,kdecade=1)
170 !
171 ! Extrapolation toward new vegtype distribution field from updated land-use map or user
172  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
173  hprogram,kluout,'H_TREE: height of trees',dtv%XPAR_H_TREE,pdef=zdef)
174 !
175  dtv%LDATA_H_TREE(:)=.true.
176 !
177 ENDIF
178 !
179 ! DG
180 ! --
181 !
182 !ROOT_DEPTH is needed for DIF, 2-L, 3-L
183 IF (.NOT.any(dtv%LDATA_DG) .AND. .NOT.any(dtv%LDATA_ROOT_DEPTH)) THEN
184  yroot=ynat
185  IF(io%CISBA=='DIF')yroot=ydif
186  ALLOCATE(dtv%XPAR_ROOT_DEPTH (kdim,nvegtype))
187  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
188  CALL av_pgd(dtco,dtv%XPAR_ROOT_DEPTH(:,:),s%XCOVER,xdata_root_depth(:,:),ynat,cdgavg,s%LCOVER,kdecade=1)
189 
190  zdef(:) = xundef
191  DO jvegtype=1,nvegtype
192  IF (any(dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) .AND. all(dtv%XPAR_ROOT_DEPTH(:,jvegtype)==xundef)) THEN
193  zfrac = 0.
194  DO jcover = 1,jpcover
195  IF (dtco%XDATA_VEGTYPE(jcover,jvegtype)>zfrac) THEN
196  zdef(jvegtype) = xdata_root_depth(jcover,jvegtype)
197  zfrac = dtco%XDATA_VEGTYPE(jcover,jvegtype)
198  IF (zfrac==1.) EXIT
199  ENDIF
200  ENDDO
201  ENDIF
202  ENDDO
203 
204  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
205  hprogram,kluout,'ROOTDEPTH', dtv%XPAR_ROOT_DEPTH(:,:),pdef=zdef)
206  dtv%LDATA_ROOT_DEPTH(:) = .true.
207 ENDIF
208 !
209 !GROUND_DEPTH is needed for DIF and 3-L
210 IF (.NOT.any(dtv%LDATA_DG) .AND. io%CISBA/='2-L' .AND. .NOT.any(dtv%LDATA_GROUND_DEPTH)) THEN
211  zdata_ground_depth(:,:)=xdata_ground_depth(:,:)
212  IF(io%CISBA=='DIF'.AND.cdgdif=='ROOT')THEN
213  DO jvegtype=1,nvegtype
214  IF(jvegtype==nvt_no)THEN
215  WHERE(xdata_ground_depth(:,jvegtype)/=xundef)
216  zdata_ground_depth(:,jvegtype) = min(1.0,xdata_ground_depth(:,jvegtype))
217  ENDWHERE
218  ELSEIF(jvegtype/=nvt_rock.AND.jvegtype/=nvt_snow)THEN
219  zdata_ground_depth(:,jvegtype) = max(1.0,xdata_root_depth(:,jvegtype))
220  ELSE
221  zdata_ground_depth(:,jvegtype) = xdata_root_depth(:,jvegtype)
222  ENDIF
223  ENDDO
224  ENDIF
225  ALLOCATE(dtv%XPAR_GROUND_DEPTH (kdim,nvegtype))
226  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
227  CALL av_pgd(dtco,dtv%XPAR_GROUND_DEPTH(:,:),s%XCOVER,zdata_ground_depth(:,:),ynat,cdgavg,s%LCOVER,kdecade=1)
228 
229  zdef(:) = xundef
230  DO jvegtype=1,nvegtype
231  IF (any(dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) .AND. all(dtv%XPAR_GROUND_DEPTH(:,jvegtype)==xundef)) THEN
232  zfrac = 0.
233  DO jcover = 1,jpcover
234  IF (dtco%XDATA_VEGTYPE(jcover,jvegtype)>zfrac) THEN
235  zdef(jvegtype) = xdata_ground_depth(jcover,jvegtype)
236  zfrac = dtco%XDATA_VEGTYPE(jcover,jvegtype)
237  IF (zfrac==1.) EXIT
238  ENDIF
239  ENDDO
240  ENDIF
241  ENDDO
242 
243  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
244  hprogram,kluout,'GROUNDDEPTH', dtv%XPAR_GROUND_DEPTH(:,:),pdef=zdef)
245  dtv%LDATA_GROUND_DEPTH(:) = .true.
246 ENDIF
247 !
248 IF (io%CALBEDO=='CM13') THEN
249 !
250  IF (.NOT.any(dtv%LDATA_ALBNIR_VEG)) THEN
251  ALLOCATE(dtv%XPAR_ALBNIR_VEG(kdim,dtv%NTIME,nvegtype))
252  DO jtime=1,36
253 ! ECOCLIMAP spatial distribution field
254  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
255  CALL av_pgd(dtco,zwork(:,jtime,:),s%XCOVER,xdata_alb_veg_nir(:,jtime,:),yveg,'ARI',s%LCOVER,kdecade=jtime)
256 
257 ! Extrapolation toward new vegtype distribution field from updated land-use map or user
258  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
259  hprogram,kluout,'ALBNIR_VEG',zwork(:,jtime,:),pdef=zdef)
260  ENDDO
261  CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBNIR_VEG)
262  dtv%LDATA_ALBNIR_VEG(:)=.true.
263  ENDIF
264 !
265  IF (.NOT.any(dtv%LDATA_ALBVIS_VEG)) THEN
266  ALLOCATE(dtv%XPAR_ALBVIS_VEG(kdim,dtv%NTIME,nvegtype))
267  DO jtime=1,36
268 ! ECOCLIMAP spatial distribution field
269  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
270  CALL av_pgd(dtco,zwork(:,jtime,:),s%XCOVER,xdata_alb_veg_vis(:,jtime,:),yveg,'ARI',s%LCOVER,kdecade=jtime)
271 
272 ! Extrapolation toward new vegtype distribution field from updated land-use map or user
273  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
274  hprogram,kluout,'ALBVIS_VEG',zwork(:,jtime,:),pdef=zdef)
275  ENDDO
276  CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBVIS_VEG)
277  dtv%LDATA_ALBVIS_VEG(:)=.true.
278  ENDIF
279 !
280  IF (.NOT.any(dtv%LDATA_ALBNIR_SOIL)) THEN
281  ALLOCATE(dtv%XPAR_ALBNIR_SOIL(kdim,dtv%NTIME,nvegtype))
282  DO jtime=1,36
283 ! ECOCLIMAP spatial distribution field
284  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
285  CALL av_pgd(dtco,zwork(:,jtime,:),s%XCOVER,xdata_alb_soil_nir(:,jtime,:),ybar,'ARI',s%LCOVER,kdecade=jtime)
286 
287 ! Extrapolation toward new vegtype distribution field from updated land-use map or user
288  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
289  hprogram,kluout,'ALBNIR_SOIL',zwork(:,jtime,:),pdef=zdef)
290  ENDDO
291  CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBNIR_SOIL)
292  dtv%LDATA_ALBNIR_SOIL(:)=.true.
293  ENDIF
294 !
295  IF (.NOT.any(dtv%LDATA_ALBVIS_SOIL)) THEN
296  ALLOCATE(dtv%XPAR_ALBVIS_SOIL(kdim,dtv%NTIME,nvegtype))
297  DO jtime=1,36
298 ! ECOCLIMAP spatial distribution field
299  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
300  CALL av_pgd(dtco,zwork(:,jtime,:),s%XCOVER,xdata_alb_soil_vis(:,jtime,:),ybar,'ARI',s%LCOVER,kdecade=jtime)
301 
302 ! Extrapolation toward new vegtype distribution field from updated land-use map or user
303  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
304  hprogram,kluout,'ALBVIS_SOIL',zwork(:,jtime,:),pdef=zdef)
305  ENDDO
306  CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBVIS_SOIL)
307  dtv%LDATA_ALBVIS_SOIL(:)=.true.
308  ENDIF
309 !
310 ENDIF
311 !
312 IF(io%CPHOTO=='NIT' .OR. io%CPHOTO=='NCB') THEN
313  !
314  IF (lagrip) THEN
315  !
316  ! IRRIG
317  ! -----
318  IF (.NOT.any(dtv%LDATA_IRRIG)) THEN
319  zdef(:)=0.
320  ALLOCATE(dtv%XPAR_IRRIG (kdim,dtv%NTIME,nvegtype))
321  DO jtime=1,36
322  ! ECOCLIMAP spatial distribution field
323  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
324  CALL av_pgd(dtco,zwork(:,jtime,:),s%XCOVER,xdata_irrig,yveg,'ARI',s%LCOVER,kdecade=jtime)
325  ! Extrapolation toward new vegtype distribution field from updated land-use map or user
326  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
327  hprogram,kluout,'IRRIG ', zwork(:,jtime,:), pdef=zdef)
328  ENDDO
329  !
330  CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_IRRIG)
331  !
332  dtv%LDATA_IRRIG(:)=.true.
333  !
334  ENDIF
335  !
336  ! WATSUP
337  ! ------
338  IF (.NOT.any(dtv%LDATA_WATSUP)) THEN
339  zdef(:)=0.
340  ALLOCATE(dtv%XPAR_WATSUP (kdim,dtv%NTIME,nvegtype))
341  DO jtime=1,36
342  ! ECOCLIMAP spatial distribution field
343  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
344  CALL av_pgd(dtco,zwork(:,jtime,:),s%XCOVER,xdata_watsup,yveg,'ARI',s%LCOVER,kdecade=jtime)
345  ! Extrapolation toward new vegtype distribution field from updated land-use map or user
346  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
347  hprogram,kluout,'WATSUP ', zwork(:,jtime,:), pdef=zdef)
348  ENDDO
349  !
350  CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_WATSUP)
351  !
352  dtv%LDATA_WATSUP(:)=.true.
353  ENDIF
354  !
355  ALLOCATE(tpwork(kdim,nvegtype))
356  !
357  IF (.NOT.any(dtv%LDATA_SEED_M).OR..NOT.any(dtv%LDATA_SEED_D)) THEN
358  ALLOCATE(dtv%XPAR_SEED_M(kdim,nvegtype))
359  ALLOCATE(dtv%XPAR_SEED_D(kdim,nvegtype))
360  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
361  CALL av_pgd(tpwork(:,:),s%XCOVER,tdata_seed(:,:),yveg,'MAJ',s%LCOVER,kdecade=1)
362  dtv%XPAR_SEED_M(:,:) = float(tpwork(:,:)%TDATE%MONTH)
363  dtv%XPAR_SEED_D(:,:) = float(tpwork(:,:)%TDATE%DAY)
364  zdef(:)=5.
365  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
366  hprogram,kluout,'SEED_M', dtv%XPAR_SEED_M(:,:), pdef=zdef)
367  zdef(:)=10.
368  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
369  hprogram,kluout,'SEED_D', dtv%XPAR_SEED_D(:,:), pdef=zdef)
370  ENDIF
371  !
372  dtv%LDATA_SEED_M(:) = .true.
373  dtv%LDATA_SEED_D(:) = .true.
374  !
375  IF (.NOT.any(dtv%LDATA_REAP_M).OR..NOT.any(dtv%LDATA_REAP_D)) THEN
376  ALLOCATE(dtv%XPAR_REAP_M(kdim,nvegtype))
377  ALLOCATE(dtv%XPAR_REAP_D(kdim,nvegtype))
378  IF (ASSOCIATED(dtco%XDATA_WEIGHT)) DEALLOCATE(dtco%XDATA_WEIGHT)
379  CALL av_pgd(tpwork(:,:),s%XCOVER,tdata_reap(:,:),yveg,'MAJ',s%LCOVER,kdecade=1)
380  dtv%XPAR_REAP_M(:,:) = float(tpwork(:,:)%TDATE%MONTH)
381  dtv%XPAR_REAP_D(:,:) = float(tpwork(:,:)%TDATE%DAY)
382  zdef(:)=8.
383  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
384  hprogram,kluout,'REAP_M', dtv%XPAR_REAP_M(:,:), pdef=zdef)
385  zdef(:)=1.
386  CALL ini_var_from_vegtype_data(dtco, dtv, ug, u, &
387  hprogram,kluout,'REAP_D', dtv%XPAR_REAP_D(:,:), pdef=zdef)
388  ENDIF
389  !
390  dtv%LDATA_REAP_M(:) = .true.
391  dtv%LDATA_REAP_D(:) = .true.
392  !
393  DEALLOCATE(tpwork)
394  !
395  ENDIF
396  !
397 ENDIF
398 !
399 IF (lhook) CALL dr_hook('EXTRAPOL_FIELDS',1,zhook_handle)
400 !
401 CONTAINS
402 !
403 SUBROUTINE goto_ntime(KTIME,PWORK,PPAR_DATA)
404 !
405 INTEGER, INTENT(IN) :: KTIME
406 REAL, DIMENSION(:,:,:), INTENT(IN) :: PWORK
407 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPAR_DATA
408 !
409 IF (ktime==1) THEN
410  ppar_data(:,1,:) = sum(pwork(:,:,:),2)/36.
411 ELSEIF (ktime==2) THEN
412  ppar_data(:,1,:) = (sum(pwork(:,1:8,:),2) + sum(pwork(:,27:36,:),2))/18.
413  ppar_data(:,2,:) = sum(pwork(:,9:26,:),2)/18.
414 ELSEIF (ktime==12) THEN
415  DO jtime=1,12
416  ppar_data(:,jtime,:) = sum(pwork(:,(jtime-1)*3+1:jtime*3,:),2)/3.
417  ENDDO
418 ELSEIF (ktime==36) THEN
419  ppar_data(:,:,:) = pwork(:,:,:)
420 ENDIF
421 !
422 END SUBROUTINE goto_ntime
423 !
424 !-------------------------------------------------------------------------------
425 END SUBROUTINE extrapol_fields
real, dimension(:,:), allocatable xdata_irrig
real, dimension(:,:), allocatable xdata_root_lin
type(date_time), dimension(:,:), pointer tdata_seed
real, dimension(:,:,:), allocatable xdata_alb_soil_nir
real, dimension(:,:), allocatable xdata_root_depth
real, parameter xundef
subroutine ini_var_from_vegtype_data(DTCO, DTV, UG, U, HPROGRAM, ILUOUT, HNAME, PFIELD
type(date_time), dimension(:,:), pointer tdata_reap
integer, parameter jprb
Definition: parkind1.F90:32
character(len=4) cdgdif
subroutine extrapol_fields(DTCO, DTV, KDIM, IO, S, UG, U, HPROGRAM, KLUOUT)
real, dimension(:,:,:), allocatable xdata_alb_veg_nir
character(len=3) cdgavg
subroutine goto_ntime(KTIME, PWORK, PPAR_DATA)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
real, dimension(:,:), allocatable xdata_h_tree
real, dimension(:,:,:), allocatable xdata_alb_veg_vis
real, dimension(:,:,:), allocatable xdata_lai
real, dimension(:), allocatable xdata_garden
real, dimension(:,:), allocatable xdata_watsup
real, dimension(:,:), allocatable xdata_ground_depth
real, dimension(:,:,:), allocatable xdata_alb_soil_vis
real, dimension(:), allocatable xdata_nature
real, dimension(:,:), allocatable xdata_root_extinction