13 REAL,
INTENT(IN) :: PLAI
14 REAL,
DIMENSION(:),
INTENT(IN) :: PVEGTYPE
15 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
24 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
25 REAL,
DIMENSION(:,:),
INTENT(IN) :: PVEGTYPE
26 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
28 REAL,
DIMENSION(SIZE(PLAI)) :: PGREEN
35 REAL,
DIMENSION(:,:),
INTENT(IN) :: PLAI
36 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PVEGTYPE
37 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
39 REAL,
DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2))::PGREEN
46 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
47 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
49 REAL,
DIMENSION(SIZE(PLAI)) :: PGREEN
100 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
101 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
102 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
103 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
104 nvt_gras, nvt_bogr, nvt_trog
115 REAL,
INTENT(IN) :: PLAI
116 REAL,
DIMENSION(:),
INTENT(IN) :: PVEGTYPE
117 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
124 REAL(KIND=JPRB) :: ZHOOK_HANDLE
126 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_0D',0,zhook_handle)
129 IF ( pvegtype(nvt_no ) + pvegtype(nvt_rock)< 1.)
THEN 130 zlai = plai / (1.-pvegtype(nvt_no)-pvegtype(nvt_rock))
133 zagri=(1. - exp( -0.6 * zlai ))
134 IF(oagri_to_grass)zagri=min(zagri,0.95)
136 pgreen= zagri *(pvegtype(nvt_c4 ) + &
137 pvegtype(nvt_irr ) + &
138 pvegtype(nvt_c3 ) ) &
139 + min(1. - exp( -0.5 * zlai ),0.95) &
140 *(pvegtype(nvt_trbd) + &
141 pvegtype(nvt_tebe) + &
142 pvegtype(nvt_tebd) + &
143 pvegtype(nvt_tene) + &
144 pvegtype(nvt_bobd) + &
145 pvegtype(nvt_bone) + &
146 pvegtype(nvt_bone) + &
147 pvegtype(nvt_shrb) ) &
149 + min(1. - exp( -0.6 * zlai ),0.95) &
150 *(pvegtype(nvt_gras) + &
151 pvegtype(nvt_bogr) + &
152 pvegtype(nvt_trog) + &
153 pvegtype(nvt_park) ) &
154 + 0. * pvegtype(nvt_no ) &
155 + 0. * pvegtype(nvt_snow) &
156 + 0. * pvegtype(nvt_rock)
158 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_0D',1,zhook_handle)
205 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
206 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
207 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
208 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
209 nvt_gras, nvt_bogr, nvt_trog, nvt_c3w, &
210 nvt_c3s, nvt_fltr, nvt_flgr
221 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
222 REAL,
DIMENSION(:,:),
INTENT(IN) :: PVEGTYPE
223 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
225 REAL,
DIMENSION(SIZE(PLAI)) :: PGREEN
229 REAL,
DIMENSION(SIZE(PLAI)) :: ZLAI, ZAGRI
230 REAL :: ZSUM1, ZSUM2, ZSUM3
232 REAL(KIND=JPRB) :: ZHOOK_HANDLE
234 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_1D',0,zhook_handle)
237 WHERE ( pvegtype(:,nvt_no ) + pvegtype(:,nvt_rock) + pvegtype(:,nvt_snow) < 1.)
238 zlai(:) = plai(:) / (1.-pvegtype(:,nvt_no)-pvegtype(:,nvt_rock)-pvegtype(:,nvt_snow))
241 zagri(:)=(1. - exp( -0.6 * zlai(:) ))
242 IF(oagri_to_grass)zagri(:)=min(zagri(:),0.95)
244 DO jj = 1,
SIZE(pgreen)
246 zsum1 = pvegtype(jj,nvt_c4)
247 IF (nvt_c3/=0 .AND. nvt_irr/=0)
THEN 248 zsum1 = zsum1 + pvegtype(jj,nvt_c3) + pvegtype(jj,nvt_irr)
249 ELSEIF (nvt_c3w/=0 .AND. nvt_c3s/=0)
THEN 250 zsum1 = zsum1 + pvegtype(jj,nvt_c3w) + pvegtype(jj,nvt_c3s)
253 zsum2 = pvegtype(jj,nvt_trbd) + pvegtype(jj,nvt_tebe) + pvegtype(jj,nvt_tebd) + &
254 pvegtype(jj,nvt_tene) + pvegtype(jj,nvt_bobd) + pvegtype(jj,nvt_bone) + &
255 pvegtype(jj,nvt_bone) + pvegtype(jj,nvt_shrb)
256 IF (nvt_fltr/=0) zsum2 = zsum2 + pvegtype(jj,nvt_fltr)
258 zsum3 = pvegtype(jj,nvt_gras) + pvegtype(jj,nvt_bogr) + pvegtype(jj,nvt_trog)
259 IF (nvt_park/=0)
THEN 260 zsum3 = zsum3 + pvegtype(jj,nvt_park)
261 ELSEIF (nvt_flgr/=0)
THEN 262 zsum3 = zsum3 + pvegtype(jj,nvt_flgr)
265 pgreen(jj)= zagri(jj) * zsum1 &
266 + min(1. - exp( -0.5 * zlai(jj) ),0.95) * zsum2 &
268 + min(1. - exp( -0.6 * zlai(jj) ),0.95) * zsum3 &
269 + 0. * pvegtype(jj,nvt_no ) &
270 + 0. * pvegtype(jj,nvt_snow) &
271 + 0. * pvegtype(jj,nvt_rock)
275 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_1D',1,zhook_handle)
321 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
322 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
323 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
324 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
325 nvt_gras, nvt_bogr, nvt_trog, nvt_c3w, &
326 nvt_c3s, nvt_fltr, nvt_flgr
338 REAL,
DIMENSION(:,:),
INTENT(IN) :: PLAI
339 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PVEGTYPE
340 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
342 REAL,
DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2))::PGREEN
346 REAL,
DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: ZLAI, ZAGRI
347 REAL,
DIMENSION(SIZE(PLAI,2)) :: ZSUM1, ZSUM2, ZSUM3
349 REAL(KIND=JPRB) :: ZHOOK_HANDLE
351 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_2D',0,zhook_handle)
352 zlai(:,:) = plai(:,:)
353 WHERE ( pvegtype(:,:,nvt_no ) + pvegtype(:,:,nvt_rock) + pvegtype(:,:,nvt_snow) < 1.)
354 zlai(:,:) = plai(:,:) / (1.-pvegtype(:,:,nvt_no)-pvegtype(:,:,nvt_rock)-pvegtype(:,:,nvt_snow))
360 WHERE (plai(:,:) /=
xundef)
361 zagri(:,:)=(1. - exp( -0.6 * zlai(:,:) ))
363 IF(oagri_to_grass)zagri(:,:)=min(zagri(:,:),0.95)
366 DO jj = 1,
SIZE(pgreen)
368 zsum1(:) = pvegtype(jj,:,nvt_c4)
369 IF (nvt_c3/=0 .AND. nvt_irr/=0)
THEN 370 zsum1(:) = zsum1(:) + pvegtype(jj,:,nvt_c3) + pvegtype(jj,:,nvt_irr)
371 ELSEIF (nvt_c3w/=0 .AND. nvt_c3s/=0)
THEN 372 zsum1(:) = zsum1(:) + pvegtype(jj,:,nvt_c3w) + pvegtype(jj,:,nvt_c3s)
375 zsum2(:) = pvegtype(jj,:,nvt_trbd) + pvegtype(jj,:,nvt_tebe) + pvegtype(jj,:,nvt_tebd) + &
376 pvegtype(jj,:,nvt_tene) + pvegtype(jj,:,nvt_bobd) + pvegtype(jj,:,nvt_bone) + &
377 pvegtype(jj,:,nvt_bone) + pvegtype(jj,:,nvt_shrb)
378 IF (nvt_fltr/=0) zsum2(:) = zsum2(:) + pvegtype(jj,:,nvt_fltr)
380 zsum3(:) = pvegtype(jj,:,nvt_gras) + pvegtype(jj,:,nvt_bogr) + pvegtype(jj,:,nvt_trog)
381 IF (nvt_park/=0)
THEN 382 zsum3(:) = zsum3(:) + pvegtype(jj,:,nvt_park)
383 ELSEIF (nvt_flgr/=0)
THEN 384 zsum3(:) = zsum3(:) + pvegtype(jj,:,nvt_flgr)
387 WHERE (plai(jj,:) /=
xundef)
389 pgreen(jj,:)= zagri(jj,:) * zsum1(:) &
390 + min((1. - exp( -0.5 * zlai(jj,:) )),0.95) * zsum2 &
392 + min((1. - exp( -0.6 * zlai(jj,:) )),0.95) * zsum3 &
393 + 0. * pvegtype(jj,:,nvt_no ) &
394 + 0. * pvegtype(jj,:,nvt_snow) &
395 + 0. * pvegtype(jj,:,nvt_rock)
401 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_2D',1,zhook_handle)
450 USE modd_data_cover_par
, ONLY : nvt_no, nvt_rock, nvt_snow, nvt_park, &
451 nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
452 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
453 nvt_shrb, nvt_c3, nvt_c4, nvt_irr, &
454 nvt_gras, nvt_bogr, nvt_trog, nvt_c3w, &
455 nvt_c3s, nvt_fltr, nvt_flgr
468 REAL,
DIMENSION(:),
INTENT(IN) :: PLAI
469 LOGICAL,
INTENT(IN) :: OAGRI_TO_GRASS
471 REAL,
DIMENSION(SIZE(PLAI)) :: PGREEN
475 REAL(KIND=JPRB) :: ZHOOK_HANDLE
477 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_VEGTYPE_1D',0,zhook_handle)
480 IF(oagri_to_grass)
THEN 481 IF (plai(nvt_c4 )/=
xundef) pgreen(nvt_c4 )= min(1. - exp( -0.6 * plai(nvt_c4 ) ),0.95)
482 IF (nvt_irr>0 .AND. nvt_c3>0)
THEN 483 IF (plai(nvt_irr )/=
xundef) pgreen(nvt_irr )= min(1. - exp( -0.6 * plai(nvt_irr ) ),0.95)
484 IF (plai(nvt_c3 )/=
xundef) pgreen(nvt_c3 )= min(1. - exp( -0.6 * plai(nvt_c3 ) ),0.95)
485 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 486 IF (plai(nvt_c3w )/=
xundef) pgreen(nvt_c3w )= min(1. - exp( -0.6 * plai(nvt_c3w ) ),0.95)
487 IF (plai(nvt_c3s )/=
xundef) pgreen(nvt_c3s )= min(1. - exp( -0.6 * plai(nvt_c3s ) ),0.95)
490 IF (plai(nvt_c4 )/=
xundef) pgreen(nvt_c4 )= 1. - exp( -0.6 * plai(nvt_c4 ) )
491 IF (nvt_irr>0 .AND. nvt_c3>0)
THEN 492 IF (plai(nvt_irr )/=
xundef) pgreen(nvt_irr )= 1. - exp( -0.6 * plai(nvt_irr ) )
493 IF (plai(nvt_c3 )/=
xundef) pgreen(nvt_c3 )= 1. - exp( -0.6 * plai(nvt_c3 ) )
494 ELSEIF (nvt_c3w>0 .AND. nvt_c3s>0)
THEN 495 IF (plai(nvt_c3w )/=
xundef) pgreen(nvt_c3w )= 1. - exp( -0.6 * plai(nvt_c3w ) )
496 IF (plai(nvt_c3s )/=
xundef) pgreen(nvt_c3s )= 1. - exp( -0.6 * plai(nvt_c3s ) )
500 IF (plai(nvt_tebd)/=
xundef) pgreen(nvt_tebd)= min(1. - exp( -0.5 * plai(nvt_tebd) ),0.95)
501 IF (plai(nvt_bone)/=
xundef) pgreen(nvt_bone)= min(1. - exp( -0.5 * plai(nvt_bone) ),0.95)
502 IF (plai(nvt_trbd)/=
xundef) pgreen(nvt_trbd)= min(1. - exp( -0.5 * plai(nvt_trbd) ),0.95)
503 IF (plai(nvt_tebe)/=
xundef) pgreen(nvt_tebe)= min(1. - exp( -0.5 * plai(nvt_tebe) ),0.95)
504 IF (plai(nvt_tene)/=
xundef) pgreen(nvt_tene)= min(1. - exp( -0.5 * plai(nvt_tene) ),0.95)
505 IF (plai(nvt_bobd)/=
xundef) pgreen(nvt_bobd)= min(1. - exp( -0.5 * plai(nvt_bobd) ),0.95)
506 IF (plai(nvt_bond)/=
xundef) pgreen(nvt_bond)= min(1. - exp( -0.5 * plai(nvt_bond) ),0.95)
507 IF (plai(nvt_shrb)/=
xundef) pgreen(nvt_shrb)= min(1. - exp( -0.5 * plai(nvt_shrb) ),0.95)
510 IF (plai(nvt_fltr)/=
xundef) pgreen(nvt_fltr)= min(1. - exp( -0.5 * plai(nvt_fltr) ),0.95)
515 IF (plai(nvt_gras)/=
xundef) pgreen(nvt_gras)= min(1. - exp( -0.6 * plai(nvt_gras) ),0.95)
516 IF (plai(nvt_bogr)/=
xundef) pgreen(nvt_bogr)= min(1. - exp( -0.6 * plai(nvt_bogr) ),0.95)
517 IF (plai(nvt_trog)/=
xundef) pgreen(nvt_trog)= min(1. - exp( -0.6 * plai(nvt_trog) ),0.95)
519 IF (plai(nvt_park)/=
xundef) pgreen(nvt_park)= min(1. - exp( -0.6 * plai(nvt_park) ),0.95)
520 ELSEIF (nvt_flgr>0)
THEN 521 IF (plai(nvt_flgr)/=
xundef) pgreen(nvt_flgr)= min(1. - exp( -0.6 * plai(nvt_flgr) ),0.95)
527 IF (
lhook)
CALL dr_hook(
'MODI_GREEN_FROM_LAI:GREEN_FROM_LAI_VEGTYPE_1D',1,zhook_handle)
real function, dimension(size(plai, 1), size(plai, 2)) green_from_lai_2d(PLAI, PVEGTYPE, OAGRI_TO_GRASS)
real function, dimension(size(plai)) green_from_lai_1d(PLAI, PVEGTYPE, OAGRI_TO_GRASS)
real function green_from_lai_0d(PLAI, PVEGTYPE, OAGRI_TO_GRASS)
real function, dimension(size(plai)) green_from_lai_vegtype_1d(PLAI, OAGRI_TO_GRASS)