7 pbslai_nitro, psefold, pgmes, panmax, panday, &
8 plat, plaimin, pvegtype, ptau_wood, &
9 panfm, plai, pbiomass, presp_biomass, pbiomass_leaf, &
10 pincrease ,pturnover )
73 xmco2, xcc_nitro, xbiomasst_lim
75 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
78 USE yomhook
,ONLY : lhook, dr_hook
79 USE parkind1
,ONLY : jprb
85 CHARACTER(LEN=*),
INTENT(IN) :: hphoto
91 CHARACTER(LEN=3),
INTENT(IN) :: hrespsl
95 LOGICAL,
INTENT(IN) :: otr_ml
96 INTEGER,
INTENT(IN) :: kspinw
98 REAL,
DIMENSION(:),
INTENT(IN) :: pbslai_nitro
99 REAL,
DIMENSION(:),
INTENT(IN) :: psefold
100 REAL,
DIMENSION(:),
INTENT(IN) :: pgmes
101 REAL,
DIMENSION(:),
INTENT(IN) :: panmax
102 REAL,
DIMENSION(:),
INTENT(IN) :: panday
103 REAL,
DIMENSION(:),
INTENT(IN) :: plat
104 REAL,
DIMENSION(:),
INTENT(IN) :: plaimin
105 REAL,
DIMENSION(:,:),
INTENT(IN) :: pvegtype
106 REAL,
DIMENSION(:),
INTENT(IN) :: ptau_wood
107 REAL,
DIMENSION(:),
INTENT(IN) :: plai
109 REAL,
DIMENSION(:),
INTENT(INOUT) :: panfm
110 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: pbiomass
111 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: presp_biomass
113 REAL,
DIMENSION(:),
INTENT(OUT) :: pbiomass_leaf
114 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pincrease
115 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pturnover
120 REAL,
DIMENSION(SIZE(PLAI)) :: zxsefold
121 REAL,
DIMENSION(SIZE(PLAI)) :: zlaib_nitro
122 REAL,
DIMENSION(SIZE(PLAI)) :: zassim
123 REAL,
DIMENSION(SIZE(PLAI)) :: zbiomasst
125 REAL,
DIMENSION(SIZE(PLAI),SIZE(PBIOMASS,2)) :: zincrease
126 REAL,
DIMENSION(SIZE(PLAI),SIZE(PBIOMASS,2)) :: zbiomass
127 REAL,
DIMENSION(SIZE(PLAI),SIZE(PBIOMASS,2)) :: zdecline
128 REAL,
DIMENSION(SIZE(PLAI),SIZE(PBIOMASS,2)) :: zstorage
129 REAL,
DIMENSION(SIZE(PLAI)) :: zmort_leaf
131 REAL,
DIMENSION(SIZE(PLAI)) :: zwork,zresp
132 LOGICAL,
DIMENSION(SIZE(PLAI)) :: gmask_assim
133 LOGICAL,
DIMENSION(SIZE(PLAI)) :: gwoody
135 REAL(KIND=JPRB) :: zhook_handle
137 INTEGER :: jspin, ji, ini
152 IF (lhook) CALL dr_hook(
'NITRO_DECLINE',0,zhook_handle)
167 zbmcoef = xmc/(xmco2*xpcco2)
172 pbiomass(:,1) = max(pbiomass(:,1),0.0)
176 pbiomass_leaf(:) = pbiomass(:,1)
190 zlaib_nitro(:) = 5.30
192 zlaib_nitro(:) = max( 5.76-0.64*atan(abs(plat(:))*xpi/180.),3.8 )
200 zwork(:) = 0.321*log(pgmes(:)*1000.)
201 zwork(:) = exp(zwork(:))*plai(:)/zlaib_nitro(:)
205 zxsefold(:) = psefold(:) * max(1.0,zwork(:)) * min(1.0,panfm(:)/panmax(:)) / xday
209 zxsefold(:) = max(1.0e-8,zxsefold(:))
215 zxsefold(:) = max(psefold(:)/xday/10.0,zxsefold(:))
219 zdecline(:,1) = min(pbiomass_leaf(:)-plaimin(:)*pbslai_nitro(:), &
220 pbiomass_leaf(:)*(1.0-exp(-1.0/zxsefold(:))))
224 zdecline(:,1) = max(zdecline(:,1),0.0)
228 pbiomass_leaf(:) = pbiomass_leaf(:) - zdecline(:,1)
232 zassim(:) = panday(:)*zbmcoef
240 WHERE(pbiomass_leaf(:)>0.0)
241 zwork(:) = (1.0/(1.0-xca_nit))*log(pbiomass_leaf(:)/xcc_nitro)
242 zwork(:) = exp(zwork(:))
245 WHERE (zassim(:) >= zdecline(:,1))
254 zbiomasst(:) = max(pbiomass_leaf(:), zwork(:))
258 zbiomass(:,2) = zbiomasst(:) - pbiomass_leaf(:)
259 zdecline(:,2) = zbiomass(:,2) * (1.0-exp(-1.0*xday/psefold(:)))
260 zstorage(:,1) = zbiomass(:,2) - pbiomass(:,2) + zdecline(:,2) + presp_biomass(:,2)
269 zdecline(:,2) = pbiomass(:,2) * (1.0-exp(-1.0*xday/psefold(:)))
270 zbiomass(:,2) = pbiomass(:,2) - zdecline(:,2) - presp_biomass(:,2)
277 zbiomass(:,2) = max(zbiomass(:,2),0.0)
279 zbiomasst(:) = pbiomass_leaf(:) + zbiomass(:,2)
286 zincrease(:,1) = zassim(:)
287 zincrease(:,2) = zstorage(:,1)
288 zincrease(:,3) = -min(zstorage(:,1),0.0)
290 zstorage(:,1) = max(0.0,zstorage(:,1))
294 WHERE( zstorage(:,1) > zdecline(:,1))
295 zdecline(:,2) = pbiomass(:,2) * (1.0 - exp(-1.0*xday/psefold(:)))
296 zbiomasst(:) = pbiomass(:,1) + pbiomass(:,2) - zdecline(:,2) - presp_biomass(:,2)
300 WHERE( zbiomasst(:) > 0.0)
301 zwork(:) = (1.0-xca_nit)*log(zbiomasst(:))
302 zwork(:) = exp(zwork(:))
305 WHERE( zstorage(:,1) > zdecline(:,1))
309 pbiomass_leaf(:) = xcc_nitro * zwork(:)
310 zbiomass(:,2) = zbiomasst(:) - pbiomass_leaf(:)
311 zdecline(:,1) = pbiomass(:,1) - pbiomass_leaf(:)
312 zstorage(:,1) = zbiomass(:,2) - pbiomass(:,2) + zdecline(:,2) + presp_biomass(:,2)
314 zincrease(:,2) = zstorage(:,1)
325 zmort_leaf(:) = max(0.0, zdecline(:,1) - zstorage(:,1))
327 zbiomass(:,3) = pbiomass(:,3)
329 IF (hphoto==
'NIT')
THEN
333 zdecline(:,3) = zbiomass(:,3)*(1.0-exp(-1.0*xday/psefold(:)))
339 WHERE((zbiomasst(:) <= xbiomasst_lim) .AND. (zxsefold(:) > 1.0))
340 zbiomass(:,3) = zbiomass(:,3) + zmort_leaf(:)
343 ELSEIF (hphoto==
'NCB')
THEN
345 gwoody = (pvegtype(:,nvt_tebd)+pvegtype(:,nvt_bone)+pvegtype(:,nvt_trbe)+ &
346 pvegtype(:,nvt_trbd)+pvegtype(:,nvt_tebe)+pvegtype(:,nvt_tene)+ &
347 pvegtype(:,nvt_bobd)+pvegtype(:,nvt_bond)+pvegtype(:,nvt_shrb) >= 0.5)
352 zdecline(:,3) = min(pbiomass(:,3)*(1.0-exp(-1.0*xday/(psefold(:)/4.))), &
353 pbiomass(:,3)-presp_biomass(:,3))
354 zdecline(:,4) = min(pbiomass(:,4)*(1.0-exp(-1.0*xday/psefold(:))), &
355 pbiomass(:,4)-presp_biomass(:,4))
359 zdecline(:,5) = min(pbiomass(:,5)*(1.0-exp(-1.0*xday/ptau_wood(:))), &
360 pbiomass(:,5)-presp_biomass(:,5))
361 zdecline(:,6) = pbiomass(:,6)*(1.0-exp(-1.0*xday/ptau_wood(:)))
370 gmask_assim(:)=(zassim(:) >= zdecline(:,1))
372 WHERE (gmask_assim(:))
375 zincrease(:,4) = zmort_leaf(:)
378 zstorage(:,1) = zstorage(:,1) + zincrease(:,4)
379 zmort_leaf(:) = zmort_leaf(:) - zincrease(:,4)
381 zstorage(:,2) = zdecline(:,2)
382 zstorage(:,3) = zdecline(:,3)
387 zincrease(:,4) = min(max(0.5*zassim(:),0.) , 0.5*zmort_leaf(:))
389 zstorage(:,1) = zstorage(:,1) + zincrease(:,4)
390 zmort_leaf(:) = zmort_leaf(:) - zincrease(:,4)
394 WHERE(gmask_assim(:).AND.gwoody(:))
396 zstorage(:,4) = zdecline(:,4)
398 zincrease(:,4) = zincrease(:,4) + 0.3* (zstorage(:,2) + zstorage(:,3))
399 zincrease(:,5) = 0.7* (zstorage(:,2) + zstorage(:,3))
400 zincrease(:,6) = zstorage(:,4)
402 ELSEWHERE(gmask_assim(:).AND..NOT.gwoody(:))
406 zincrease(:,4) = zincrease(:,4) + zstorage(:,2) + zstorage(:,3)
410 WHERE (.NOT.gmask_assim(:).AND.gwoody(:))
413 zstorage(:,2) = 0.5*zdecline(:,2)
414 zstorage(:,3) = 0.5*zdecline(:,3)
415 zstorage(:,4) = 0.5*zdecline(:,4)
417 zincrease(:,5) = zstorage(:,2) + zstorage(:,3)
418 zincrease(:,6) = zstorage(:,4)
420 ELSEWHERE(.NOT.gmask_assim(:).AND..NOT.gwoody(:))
434 IF (hrespsl==
'CNT')
THEN
435 pturnover(:,1) = zmort_leaf(:)*1000.*xpcco2/xday
436 pturnover(:,2) = (zdecline(:,2) - zstorage(:,2))*1000.*xpcco2/xday
437 pturnover(:,3) = (zdecline(:,3) - zstorage(:,3))*1000.*xpcco2/xday
438 pturnover(:,4) = (zdecline(:,4) - zstorage(:,4))*1000.*xpcco2/xday
439 pturnover(:,5) = (zdecline(:,5) - zstorage(:,5))*1000.*xpcco2/xday
440 pturnover(:,6) = (zdecline(:,6) - zstorage(:,6))*1000.*xpcco2/xday
448 zbiomass(:,3) = zbiomass(:,3) + zincrease(:,3) - zdecline(:,3) - presp_biomass(:,3)
451 pbiomass_leaf(:) = pbiomass_leaf(:) + zassim(:)
454 pbiomass(:,1) = pbiomass_leaf(:)
455 pbiomass(:,2) = zbiomass(:,2)
456 pbiomass(:,3) = zbiomass(:,3)
459 presp_biomass(:,2) = 0.0
460 presp_biomass(:,3) = 0.0
466 IF (hphoto==
'NIT')
THEN
468 pbiomass(:,3) = max(pbiomass(:,3),0.0)
470 ELSEIF (hphoto==
'NCB')
THEN
472 zbiomass(:,4) = pbiomass(:,4) + zincrease(:,4) - zdecline(:,4) - presp_biomass(:,4)
475 zbiomass(:,5) = pbiomass(:,5)
476 zbiomass(:,6) = pbiomass(:,6)
477 zresp(:) = presp_biomass(:,5)
483 zbiomass(ji,5) = zbiomass(ji,5) + zincrease(ji,5) - zdecline(ji,5) - zresp(ji)
484 zbiomass(ji,6) = zbiomass(ji,6) + zincrease(ji,6) - zdecline(ji,6)
485 zdecline(ji,5) = zbiomass(ji,5)*(1.0-exp((-1.0*xday)/ptau_wood(ji)))
486 zdecline(ji,6) = zbiomass(ji,6)*(1.0-exp((-1.0*xday)/ptau_wood(ji)))
487 IF (pbiomass(ji,5) .gt. 0.0) zresp(ji) = presp_biomass(ji,5)/pbiomass(ji,5) * zbiomass(ji,5)
496 pbiomass(:,4) = zbiomass(:,4)
497 pbiomass(:,5) = zbiomass(:,5)
498 pbiomass(:,6) = zbiomass(:,6)
500 presp_biomass(:,4) = 0.0
501 presp_biomass(:,5) = 0.0
503 pincrease(:,:) = zincrease(:,:)
507 IF (lhook) CALL dr_hook(
'NITRO_DECLINE',1,zhook_handle)
subroutine nitro_decline(HPHOTO, HRESPSL, OTR_ML, KSPINW, PBSLAI_NITRO, PSEFOLD, PGMES, PANMAX, PANDAY, PLAT, PLAIMIN, PVEGTYPE, PTAU_WOOD, PANFM, PLAI, PBIOMASS, PRESP_BIOMASS, PBIOMASS_LEAF, PINCREASE, PTURNOVER)