13 REAL,
INTENT(IN) :: PLAI
14 REAL,
INTENT(IN) :: PH_TREE
15 REAL,
DIMENSION(:),
INTENT(IN) :: PVEGTYPE
16 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
18 REAL,
DIMENSION(SIZE(PVEGTYPE)) :: PH_VEG
25 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
26 REAL,
DIMENSION(:),
INTENT(IN) :: PH_TREE
27 REAL,
DIMENSION(:,:),
INTENT(IN) :: PVEGTYPE
28 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
30 REAL,
DIMENSION(SIZE(PVEGTYPE,1),SIZE(PVEGTYPE,2)) :: PH_VEG
37 REAL,
DIMENSION(:,:),
INTENT(IN) :: PLAI
38 REAL,
DIMENSION(:,:),
INTENT(IN) :: PH_TREE
39 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PVEGTYPE
40 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
42 REAL,
DIMENSION(SIZE(PVEGTYPE,1),SIZE(PVEGTYPE,2),SIZE(PVEGTYPE,3)) :: PH_VEG
48 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
49 REAL,
DIMENSION(:),
INTENT(IN) :: PH_TREE
50 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
52 REAL,
DIMENSION(SIZE(PLAI)) :: PH_VEG
104 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
105 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
106 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
107 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
108 nvt_gras, nvt_bogr, nvt_trog, nvt_c3w, &
109 nvt_c3s, nvt_fltr, nvt_flgr
119 REAL,
INTENT(IN) :: PLAI
120 REAL,
INTENT(IN) :: PH_TREE
121 REAL,
DIMENSION(:),
INTENT(IN) :: PVEGTYPE
122 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
124 REAL,
DIMENSION(SIZE(PVEGTYPE)) :: PH_VEG
135 REAL(KIND=JPRB) :: ZHOOK_HANDLE
138 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_0D',0,zhook_handle)
143 IF ( pvegtype(nvt_no ) + pvegtype(nvt_rock) + pvegtype(nvt_snow) < 1.)
THEN 144 zlai = plai / (1.-pvegtype(nvt_no)-pvegtype(nvt_rock)-pvegtype(nvt_snow))
149 zallen_h = exp((zlai-3.5)/(1.3))
153 ph_veg(nvt_park) = zlai / 6.
154 ELSEIF (nvt_flgr>0)
THEN 155 ph_veg(nvt_flgr) = zlai / 6.
158 ph_veg(nvt_tebd) = zlai / 6.
159 ph_veg(nvt_bone) = zlai / 6.
160 ph_veg(nvt_trbe) = zlai / 6.
161 ph_veg(nvt_trbd) = zlai / 6.
162 ph_veg(nvt_tebe) = zlai / 6.
163 ph_veg(nvt_tene) = zlai / 6.
164 ph_veg(nvt_bobd) = zlai / 6.
165 ph_veg(nvt_bond) = zlai / 6.
166 ph_veg(nvt_shrb) = zlai / 6.
167 IF (nvt_fltr>0) ph_veg(nvt_fltr) = zlai / 6.
169 ph_veg(nvt_tebd) = ph_tree
170 ph_veg(nvt_bone) = ph_tree
171 ph_veg(nvt_trbe) = ph_tree
172 ph_veg(nvt_trbd) = ph_tree
173 ph_veg(nvt_tebe) = ph_tree
174 ph_veg(nvt_tene) = ph_tree
175 ph_veg(nvt_bobd) = ph_tree
176 ph_veg(nvt_bond) = ph_tree
177 ph_veg(nvt_shrb) = ph_tree
178 IF (nvt_fltr>0) ph_veg(nvt_fltr) = ph_tree
180 ph_veg(nvt_gras) = zlai / 6.
181 ph_veg(nvt_bogr) = zlai / 6.
182 ph_veg(nvt_trog) = zlai / 6.
183 IF(oagri_to_grass)
THEN 185 ph_veg(nvt_c3 ) = zlai / 6.
186 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 187 ph_veg(nvt_c3w ) = zlai / 6.
188 ph_veg(nvt_c3s ) = zlai / 6.
190 ph_veg(nvt_c4 ) = zlai / 6.
191 IF (nvt_irr>0) ph_veg(nvt_irr ) = zlai / 6.
194 ph_veg(nvt_c3 ) = min(1. , zallen_h )
195 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 196 ph_veg(nvt_c3w ) = min(1. , zallen_h )
197 ph_veg(nvt_c3s ) = min(1. , zallen_h )
199 ph_veg(nvt_c4 ) = min(2.5, zallen_h )
200 IF (nvt_irr>0) ph_veg(nvt_irr ) = min(2.5, zallen_h )
202 ph_veg(nvt_no ) = 0.1
203 ph_veg(nvt_rock) = 1.
204 ph_veg(nvt_snow) = 0.01
206 ph_veg(:) = max(ph_veg(:),0.001)
208 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_0D',1,zhook_handle)
255 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
256 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
257 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
258 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
259 nvt_gras, nvt_bogr, nvt_trog, nvt_c3w, &
260 nvt_c3s, nvt_fltr, nvt_flgr
270 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
271 REAL,
DIMENSION(:),
INTENT(IN) :: PH_TREE
272 REAL,
DIMENSION(:,:),
INTENT(IN) :: PVEGTYPE
273 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
275 REAL,
DIMENSION(SIZE(PVEGTYPE,1),SIZE(PVEGTYPE,2)) :: PH_VEG
279 REAL,
DIMENSION(SIZE(PLAI)) :: ZALLEN_H
280 REAL,
DIMENSION(SIZE(PLAI)) :: ZLAI
282 REAL,
DIMENSION(SIZE(PLAI)) :: ZAVG_H
286 REAL(KIND=JPRB) :: ZHOOK_HANDLE
289 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_1D',0,zhook_handle)
296 WHERE ( pvegtype(:,nvt_no ) + pvegtype(:,nvt_rock) + pvegtype(:,nvt_snow) < 1.)
297 zlai(:) = plai(:) / (1.-pvegtype(:,nvt_no)-pvegtype(:,nvt_rock)-pvegtype(:,nvt_snow))
302 zallen_h(:) = exp((zlai(:)-3.5)/(1.3))
307 ph_veg(:,nvt_park) = zlai(:) / 6.
308 ELSEIF (nvt_flgr>0)
THEN 309 ph_veg(:,nvt_flgr) = zlai(:) / 6.
313 ph_veg(:,nvt_tebd) = zlai(:) / 6.
314 ph_veg(:,nvt_bone) = zlai(:) / 6.
315 ph_veg(:,nvt_trbe) = zlai(:) / 6.
316 ph_veg(:,nvt_trbd) = zlai(:) / 6.
317 ph_veg(:,nvt_tebe) = zlai(:) / 6.
318 ph_veg(:,nvt_tene) = zlai(:) / 6.
319 ph_veg(:,nvt_bobd) = zlai(:) / 6.
320 ph_veg(:,nvt_bond) = zlai(:) / 6.
321 ph_veg(:,nvt_shrb) = zlai(:) / 6.
322 IF (nvt_fltr>0) ph_veg(:,nvt_fltr) = zlai(:) / 6.
324 ph_veg(:,nvt_tebd) = ph_tree(:)
325 ph_veg(:,nvt_bone) = ph_tree(:)
326 ph_veg(:,nvt_trbe) = ph_tree(:)
327 ph_veg(:,nvt_trbd) = ph_tree(:)
328 ph_veg(:,nvt_tebe) = ph_tree(:)
329 ph_veg(:,nvt_tene) = ph_tree(:)
330 ph_veg(:,nvt_bobd) = ph_tree(:)
331 ph_veg(:,nvt_bond) = ph_tree(:)
332 ph_veg(:,nvt_shrb) = ph_tree(:)
333 IF (nvt_fltr>0) ph_veg(:,nvt_fltr) = ph_tree(:)
335 ph_veg(:,nvt_gras) = zlai(:) / 6.
336 ph_veg(:,nvt_bogr) = zlai(:) / 6.
337 ph_veg(:,nvt_trog) = zlai(:) / 6.
338 IF(oagri_to_grass)
THEN 340 ph_veg(:,nvt_c3 ) = zlai(:) / 6.
341 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 342 ph_veg(:,nvt_c3w ) = zlai(:) / 6.
343 ph_veg(:,nvt_c3s ) = zlai(:) / 6.
345 ph_veg(:,nvt_c4 ) = zlai(:) / 6.
346 IF (nvt_irr>0) ph_veg(:,nvt_irr ) = zlai(:) / 6.
349 ph_veg(:,nvt_c3 ) = min(1. , zallen_h(:) )
350 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 351 ph_veg(:,nvt_c3w ) = min(1. , zallen_h(:) )
352 ph_veg(:,nvt_c3s ) = min(1. , zallen_h(:) )
354 ph_veg(:,nvt_c4 ) = min(2.5, zallen_h(:) )
355 IF (nvt_irr>0) ph_veg(:,nvt_irr ) = min(2.5, zallen_h(:) )
357 ph_veg(:,nvt_no ) = 0.1
358 ph_veg(:,nvt_rock) = 1.
359 ph_veg(:,nvt_snow) = 0.01
361 ph_veg(:,:) = max(ph_veg(:,:),0.001)
363 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_1D',1,zhook_handle)
409 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
410 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
411 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
412 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
413 nvt_gras, nvt_bogr, nvt_trog, nvt_c3w, &
414 nvt_c3s, nvt_fltr, nvt_flgr
425 REAL,
DIMENSION(:,:),
INTENT(IN) :: PLAI
426 REAL,
DIMENSION(:,:),
INTENT(IN) :: PH_TREE
427 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PVEGTYPE
428 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
430 REAL,
DIMENSION(SIZE(PVEGTYPE,1),SIZE(PVEGTYPE,2),SIZE(PVEGTYPE,3)) :: PH_VEG
435 REAL,
DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: ZALLEN_H
436 REAL,
DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: ZLAI
438 REAL,
DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: ZAVG_H
442 REAL(KIND=JPRB) :: ZHOOK_HANDLE
445 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_2D',0,zhook_handle)
451 zlai(:,:) = plai(:,:)
452 WHERE ( pvegtype(:,:,nvt_no ) + pvegtype(:,:,nvt_rock) + pvegtype(:,:,nvt_snow) < 1.)
453 zlai(:,:) = plai(:,:) / (1.-pvegtype(:,:,nvt_no)-pvegtype(:,:,nvt_rock)-pvegtype(:,:,nvt_snow))
458 zallen_h(:,:) = exp((zlai(:,:)-3.5)/(1.3))
463 ph_veg(:,:,nvt_park) = zlai(:,:) / 6.
464 ELSEIF (nvt_flgr>0)
THEN 465 ph_veg(:,:,nvt_flgr) = zlai(:,:) / 6.
469 ph_veg(:,:,nvt_tebd) = zlai(:,:) / 6.
470 ph_veg(:,:,nvt_bone) = zlai(:,:) / 6.
471 ph_veg(:,:,nvt_trbe) = zlai(:,:) / 6.
472 ph_veg(:,:,nvt_trbd) = zlai(:,:) / 6.
473 ph_veg(:,:,nvt_tebe) = zlai(:,:) / 6.
474 ph_veg(:,:,nvt_tene) = zlai(:,:) / 6.
475 ph_veg(:,:,nvt_bobd) = zlai(:,:) / 6.
476 ph_veg(:,:,nvt_bond) = zlai(:,:) / 6.
477 ph_veg(:,:,nvt_shrb) = zlai(:,:) / 6.
478 IF (nvt_fltr>0) ph_veg(:,:,nvt_fltr) = zlai(:,:) / 6.
480 ph_veg(:,:,nvt_tebd) = ph_tree(:,:)
481 ph_veg(:,:,nvt_bone) = ph_tree(:,:)
482 ph_veg(:,:,nvt_trbe) = ph_tree(:,:)
483 ph_veg(:,:,nvt_trbd) = ph_tree(:,:)
484 ph_veg(:,:,nvt_tebe) = ph_tree(:,:)
485 ph_veg(:,:,nvt_tene) = ph_tree(:,:)
486 ph_veg(:,:,nvt_bobd) = ph_tree(:,:)
487 ph_veg(:,:,nvt_bond) = ph_tree(:,:)
488 ph_veg(:,:,nvt_shrb) = ph_tree(:,:)
489 IF (nvt_fltr>0) ph_veg(:,:,nvt_fltr) = ph_tree(:,:)
491 ph_veg(:,:,nvt_gras) = zlai(:,:) / 6.
492 ph_veg(:,:,nvt_bogr) = zlai(:,:) / 6.
493 ph_veg(:,:,nvt_trog) = zlai(:,:) / 6.
494 IF(oagri_to_grass)
THEN 496 ph_veg(:,:,nvt_c3 ) = zlai(:,:) / 6.
497 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 498 ph_veg(:,:,nvt_c3w ) = zlai(:,:) / 6.
499 ph_veg(:,:,nvt_c3s ) = zlai(:,:) / 6.
501 ph_veg(:,:,nvt_c4 ) = zlai(:,:) / 6.
502 IF (nvt_irr>0) ph_veg(:,:,nvt_irr ) = zlai(:,:) / 6.
505 ph_veg(:,:,nvt_c3 ) = min(1. , zallen_h(:,:) )
506 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 507 ph_veg(:,:,nvt_c3w ) = min(2.5, zallen_h(:,:) )
508 ph_veg(:,:,nvt_c3s ) = min(2.5, zallen_h(:,:) )
510 ph_veg(:,:,nvt_c4 ) = min(2.5, zallen_h(:,:) )
511 IF (nvt_irr>0) ph_veg(:,:,nvt_irr ) = min(2.5, zallen_h(:,:) )
513 ph_veg(:,:,nvt_no ) = 0.1
514 ph_veg(:,:,nvt_rock) = 1.
515 ph_veg(:,:,nvt_snow) = 0.01
517 ph_veg(:,:,:) = max(ph_veg(:,:,:),0.001)
519 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_2D',1,zhook_handle)
567 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
568 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
569 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
570 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
571 nvt_gras, nvt_bogr, nvt_trog, nvt_c3w, &
572 nvt_c3s, nvt_fltr, nvt_flgr
583 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
584 REAL,
DIMENSION(:),
INTENT(IN) :: PH_TREE
585 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
587 REAL,
DIMENSION(SIZE(PLAI)) :: PH_VEG
591 REAL,
DIMENSION(SIZE(PLAI)) :: ZALLEN_H
592 REAL(KIND=JPRB) :: ZHOOK_HANDLE
595 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_VEGTYPE',0,zhook_handle)
604 zallen_h(:) = exp((plai(:)-3.5)/(1.3))
609 IF (plai(nvt_park)/=
xundef) ph_veg(nvt_park) = plai(nvt_park) / 6.
610 ELSEIF (nvt_flgr>0)
THEN 611 IF (plai(nvt_flgr)/=
xundef) ph_veg(nvt_flgr) = plai(nvt_flgr) / 6.
614 IF (plai(nvt_tebd)/=
xundef) ph_veg(nvt_tebd) = plai(nvt_tebd) / 6.
615 IF (plai(nvt_bone)/=
xundef) ph_veg(nvt_bone) = plai(nvt_bone) / 6.
616 IF (plai(nvt_trbe)/=
xundef) ph_veg(nvt_trbe) = plai(nvt_trbe) / 6.
617 IF (plai(nvt_trbd)/=
xundef) ph_veg(nvt_trbd) = plai(nvt_trbd) / 6.
618 IF (plai(nvt_tebe)/=
xundef) ph_veg(nvt_tebe) = plai(nvt_tebe) / 6.
619 IF (plai(nvt_tene)/=
xundef) ph_veg(nvt_tene) = plai(nvt_tene) / 6.
620 IF (plai(nvt_bobd)/=
xundef) ph_veg(nvt_bobd) = plai(nvt_bobd) / 6.
621 IF (plai(nvt_bond)/=
xundef) ph_veg(nvt_bond) = plai(nvt_bond) / 6.
622 IF (plai(nvt_shrb)/=
xundef) ph_veg(nvt_shrb) = plai(nvt_shrb) / 6.
624 IF (plai(nvt_fltr)/=
xundef) ph_veg(nvt_fltr) = plai(nvt_fltr) / 6.
627 IF (ph_tree(nvt_tebd)/=
xundef) ph_veg(nvt_tebd) = ph_tree(nvt_tebd)
628 IF (ph_tree(nvt_bone)/=
xundef) ph_veg(nvt_bone) = ph_tree(nvt_bone)
629 IF (ph_tree(nvt_trbe)/=
xundef) ph_veg(nvt_trbe) = ph_tree(nvt_trbe)
630 IF (ph_tree(nvt_trbd)/=
xundef) ph_veg(nvt_trbd) = ph_tree(nvt_trbd)
631 IF (ph_tree(nvt_tebe)/=
xundef) ph_veg(nvt_tebe) = ph_tree(nvt_tebe)
632 IF (ph_tree(nvt_tene)/=
xundef) ph_veg(nvt_tene) = ph_tree(nvt_tene)
633 IF (ph_tree(nvt_bobd)/=
xundef) ph_veg(nvt_bobd) = ph_tree(nvt_bobd)
634 IF (ph_tree(nvt_bond)/=
xundef) ph_veg(nvt_bond) = ph_tree(nvt_bond)
635 IF (ph_tree(nvt_shrb)/=
xundef) ph_veg(nvt_shrb) = ph_tree(nvt_shrb)
637 IF (ph_tree(nvt_fltr)/=
xundef) ph_veg(nvt_fltr) = ph_tree(nvt_fltr)
640 IF (plai(nvt_gras)/=
xundef) ph_veg(nvt_gras) = plai(nvt_gras) / 6.
641 IF (plai(nvt_bogr)/=
xundef) ph_veg(nvt_bogr) = plai(nvt_bogr) / 6.
642 IF (plai(nvt_trog)/=
xundef) ph_veg(nvt_trog) = plai(nvt_trog) / 6.
643 IF(oagri_to_grass)
THEN 645 IF (plai(nvt_c3 )/=
xundef) ph_veg(nvt_c3 ) = plai(nvt_c3) / 6.
646 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 647 IF (plai(nvt_c3w )/=
xundef) ph_veg(nvt_c3w ) = plai(nvt_c3w) / 6.
648 IF (plai(nvt_c3s )/=
xundef) ph_veg(nvt_c3s ) = plai(nvt_c3s) / 6.
650 IF (plai(nvt_c4 )/=
xundef) ph_veg(nvt_c4 ) = plai(nvt_c4) / 6.
652 IF (plai(nvt_irr )/=
xundef) ph_veg(nvt_irr ) = plai(nvt_irr) / 6.
656 IF (zallen_h(nvt_c3 )/=
xundef) ph_veg(nvt_c3 ) = min(1. , zallen_h(nvt_c3) )
657 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 658 IF (zallen_h(nvt_c3w )/=
xundef) ph_veg(nvt_c3w ) = min(1. , zallen_h(nvt_c3w) )
659 IF (zallen_h(nvt_c3s )/=
xundef) ph_veg(nvt_c3s ) = min(1. , zallen_h(nvt_c3s) )
661 IF (zallen_h(nvt_c4 )/=
xundef) ph_veg(nvt_c4 ) = min(2.5, zallen_h(nvt_c4) )
663 IF (zallen_h(nvt_irr )/=
xundef) ph_veg(nvt_irr ) = min(2.5, zallen_h(nvt_irr) )
666 ph_veg(nvt_no ) = 0.1
667 ph_veg(nvt_rock) = 1.
668 ph_veg(nvt_snow) = 0.01
670 ph_veg(:) = max(ph_veg(:),0.001)
673 IF (
lhook)
CALL dr_hook(
'MODI_VEG_HEIGHT_FROM_LAI:VEG_HEIGHT_FROM_LAI_VEGTYPE',1,zhook_handle)
real function, dimension(size(plai)) veg_height_from_lai_vegtype(PLAI, PH_TREE, OAGRI_TO_GRASS)
real function, dimension(size(pvegtype, 1), size(pvegtype, 2)) veg_height_from_lai_1d(PLAI, PH_TREE, PVEGTYPE, OAGRI_TO_GRASS)
real function, dimension(size(pvegtype, 1), size(pvegtype, 2), size(pvegtype, 3)) veg_height_from_lai_2d(PLAI, PH_TREE, PVEGTYPE, OAGRI_TO_GRASS)
real function, dimension(size(pvegtype)) veg_height_from_lai_0d(PLAI, PH_TREE, PVEGTYPE, OAGRI_TO_GRASS)