5 SUBROUTINE extrapol_fields (DTCO, DTV, KDIM, IO, S, UG, U, HPROGRAM,KLUOUT)
49 USE modd_agri
, ONLY : lagrip
56 USE modd_data_cover_par
, ONLY : nvegtype, nvt_no, nvt_rock, nvt_snow, jpcover
68 USE modi_ini_var_from_vegtype_data
81 INTEGER,
INTENT(IN) :: KDIM
87 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
88 INTEGER,
INTENT(IN) :: KLUOUT
94 TYPE(
date_time),
DIMENSION(:,:),
ALLOCATABLE :: TPWORK
95 REAL,
DIMENSION (SIZE(XDATA_GROUND_DEPTH,1),NVEGTYPE) :: ZDATA_GROUND_DEPTH
97 CHARACTER(LEN=3) :: YTREE, YNAT, YVEG, YDIF, YROOT, YBAR
98 REAL,
DIMENSION(KDIM,36,NVEGTYPE) :: ZWORK
99 REAL,
DIMENSION(NVEGTYPE) :: ZDEF
101 INTEGER :: JTIME, JVEGTYPE, JCOVER
103 REAL(KIND=JPRB) :: ZHOOK_HANDLE
106 IF (
lhook)
CALL dr_hook(
'EXTRAPOL_FIELDS',0,zhook_handle)
119 IF (.NOT.any(dtv%LDATA_LAI).AND.io%CPHOTO/=
'NIT'.AND.io%CPHOTO/=
'NCB')
THEN 121 ALLOCATE(dtv%XPAR_LAI (kdim,dtv%NTIME,nvegtype))
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)
128 WHERE (dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) zwork(:,jtime,jvegtype) = 0.
132 DO jvegtype=1,nvegtype
133 IF (any(dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) .AND. all(zwork(:,jtime,jvegtype)==
xundef))
THEN 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)
147 hprogram,kluout,
'LAI: leaf area index',zwork(:,jtime,:),pdef=zdef)
153 dtv%LDATA_LAI(:)=.true.
159 IF (.NOT.any(dtv%LDATA_H_TREE) .AND. ((io%CPHOTO/=
'NON'.OR.
ltreedrag) .OR. .NOT.any(dtv%LDATA_Z0)))
THEN 161 ALLOCATE(dtv%XPAR_H_TREE (kdim,nvegtype))
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)
173 hprogram,kluout,
'H_TREE: height of trees',dtv%XPAR_H_TREE,pdef=zdef)
175 dtv%LDATA_H_TREE(:)=.true.
183 IF (.NOT.any(dtv%LDATA_DG) .AND. .NOT.any(dtv%LDATA_ROOT_DEPTH))
THEN 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)
191 DO jvegtype=1,nvegtype
192 IF (any(dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) .AND. all(dtv%XPAR_ROOT_DEPTH(:,jvegtype)==
xundef))
THEN 194 DO jcover = 1,jpcover
195 IF (dtco%XDATA_VEGTYPE(jcover,jvegtype)>zfrac)
THEN 197 zfrac = dtco%XDATA_VEGTYPE(jcover,jvegtype)
205 hprogram,kluout,
'ROOTDEPTH', dtv%XPAR_ROOT_DEPTH(:,:),pdef=zdef)
206 dtv%LDATA_ROOT_DEPTH(:) = .true.
210 IF (.NOT.any(dtv%LDATA_DG) .AND. io%CISBA/=
'2-L' .AND. .NOT.any(dtv%LDATA_GROUND_DEPTH))
THEN 212 IF(io%CISBA==
'DIF'.AND.
cdgdif==
'ROOT')
THEN 213 DO jvegtype=1,nvegtype
214 IF(jvegtype==nvt_no)
THEN 218 ELSEIF(jvegtype/=nvt_rock.AND.jvegtype/=nvt_snow)
THEN 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)
230 DO jvegtype=1,nvegtype
231 IF (any(dtv%XPAR_VEGTYPE(:,jvegtype)/=0.) .AND. all(dtv%XPAR_GROUND_DEPTH(:,jvegtype)==
xundef))
THEN 233 DO jcover = 1,jpcover
234 IF (dtco%XDATA_VEGTYPE(jcover,jvegtype)>zfrac)
THEN 236 zfrac = dtco%XDATA_VEGTYPE(jcover,jvegtype)
244 hprogram,kluout,
'GROUNDDEPTH', dtv%XPAR_GROUND_DEPTH(:,:),pdef=zdef)
245 dtv%LDATA_GROUND_DEPTH(:) = .true.
248 IF (io%CALBEDO==
'CM13')
THEN 250 IF (.NOT.any(dtv%LDATA_ALBNIR_VEG))
THEN 251 ALLOCATE(dtv%XPAR_ALBNIR_VEG(kdim,dtv%NTIME,nvegtype))
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)
259 hprogram,kluout,
'ALBNIR_VEG',zwork(:,jtime,:),pdef=zdef)
261 CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBNIR_VEG)
262 dtv%LDATA_ALBNIR_VEG(:)=.true.
265 IF (.NOT.any(dtv%LDATA_ALBVIS_VEG))
THEN 266 ALLOCATE(dtv%XPAR_ALBVIS_VEG(kdim,dtv%NTIME,nvegtype))
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)
274 hprogram,kluout,
'ALBVIS_VEG',zwork(:,jtime,:),pdef=zdef)
276 CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBVIS_VEG)
277 dtv%LDATA_ALBVIS_VEG(:)=.true.
280 IF (.NOT.any(dtv%LDATA_ALBNIR_SOIL))
THEN 281 ALLOCATE(dtv%XPAR_ALBNIR_SOIL(kdim,dtv%NTIME,nvegtype))
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)
289 hprogram,kluout,
'ALBNIR_SOIL',zwork(:,jtime,:),pdef=zdef)
291 CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBNIR_SOIL)
292 dtv%LDATA_ALBNIR_SOIL(:)=.true.
295 IF (.NOT.any(dtv%LDATA_ALBVIS_SOIL))
THEN 296 ALLOCATE(dtv%XPAR_ALBVIS_SOIL(kdim,dtv%NTIME,nvegtype))
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)
304 hprogram,kluout,
'ALBVIS_SOIL',zwork(:,jtime,:),pdef=zdef)
306 CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_ALBVIS_SOIL)
307 dtv%LDATA_ALBVIS_SOIL(:)=.true.
312 IF(io%CPHOTO==
'NIT' .OR. io%CPHOTO==
'NCB')
THEN 318 IF (.NOT.any(dtv%LDATA_IRRIG))
THEN 320 ALLOCATE(dtv%XPAR_IRRIG (kdim,dtv%NTIME,nvegtype))
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)
327 hprogram,kluout,
'IRRIG ', zwork(:,jtime,:), pdef=zdef)
330 CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_IRRIG)
332 dtv%LDATA_IRRIG(:)=.true.
338 IF (.NOT.any(dtv%LDATA_WATSUP))
THEN 340 ALLOCATE(dtv%XPAR_WATSUP (kdim,dtv%NTIME,nvegtype))
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)
347 hprogram,kluout,
'WATSUP ', zwork(:,jtime,:), pdef=zdef)
350 CALL goto_ntime(dtv%NTIME,zwork,dtv%XPAR_WATSUP)
352 dtv%LDATA_WATSUP(:)=.true.
355 ALLOCATE(tpwork(kdim,nvegtype))
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)
366 hprogram,kluout,
'SEED_M', dtv%XPAR_SEED_M(:,:), pdef=zdef)
369 hprogram,kluout,
'SEED_D', dtv%XPAR_SEED_D(:,:), pdef=zdef)
372 dtv%LDATA_SEED_M(:) = .true.
373 dtv%LDATA_SEED_D(:) = .true.
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)
384 hprogram,kluout,
'REAP_M', dtv%XPAR_REAP_M(:,:), pdef=zdef)
387 hprogram,kluout,
'REAP_D', dtv%XPAR_REAP_D(:,:), pdef=zdef)
390 dtv%LDATA_REAP_M(:) = .true.
391 dtv%LDATA_REAP_D(:) = .true.
399 IF (
lhook)
CALL dr_hook(
'EXTRAPOL_FIELDS',1,zhook_handle)
405 INTEGER,
INTENT(IN) :: KTIME
406 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PWORK
407 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: PPAR_DATA
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 416 ppar_data(:,jtime,:) =
sum(pwork(:,(jtime-1)*3+1:jtime*3,:),2)/3.
418 ELSEIF (ktime==36)
THEN 419 ppar_data(:,:,:) = pwork(:,:,:)
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
subroutine ini_var_from_vegtype_data(DTCO, DTV, UG, U, HPROGRAM, ILUOUT, HNAME, PFIELD
type(date_time), dimension(:,:), pointer tdata_reap
real, dimension(:,:,:), allocatable xdata_alb_veg_nir
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
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