6 SUBROUTINE nitro_decline(IO, PK, PEK, OWOOD, PBSLAI_NITRO, PLAT, PBIOMASS_LEAF )
71 USE modd_co2v_par
, ONLY : xpcco2, xcc_nit, xca_nit, xmc, &
72 xmco2, xcc_nitro, xbiomasst_lim
73 USE modd_data_cover_par
, ONLY : nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
74 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, &
88 LOGICAL,
DIMENSION(:),
INTENT(IN) :: OWOOD
90 REAL,
DIMENSION(:),
INTENT(IN) :: PBSLAI_NITRO
91 REAL,
DIMENSION(:),
INTENT(IN) :: PLAT
93 REAL,
DIMENSION(:),
INTENT(OUT) :: PBIOMASS_LEAF
98 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZXSEFOLD
99 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZLAIB_NITRO
100 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZASSIM
101 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZBIOMASST
103 REAL,
DIMENSION(SIZE(PEK%XLAI,1),SIZE(PEK%XBIOMASS,2)) :: ZINCREASE
104 REAL,
DIMENSION(SIZE(PEK%XLAI,1),SIZE(PEK%XBIOMASS,2)) :: ZBIOMASS
105 REAL,
DIMENSION(SIZE(PEK%XLAI,1),SIZE(PEK%XBIOMASS,2)) :: ZDECLINE
106 REAL,
DIMENSION(SIZE(PEK%XLAI,1),SIZE(PEK%XBIOMASS,2)) :: ZSTORAGE
107 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZMORT_LEAF
109 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZWORK,ZRESP
110 LOGICAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: GMASK_ASSIM
112 REAL(KIND=JPRB) :: ZHOOK_HANDLE
114 INTEGER :: JSPIN, JI, INI
131 ini =
SIZE(pek%XLAI,1)
144 zbmcoef = xmc/(xmco2*xpcco2)
149 pek%XBIOMASS(:,1) = max(pek%XBIOMASS(:,1),0.0)
153 pbiomass_leaf(:) = pek%XBIOMASS(:,1)
167 zlaib_nitro(:) = 5.30
169 zlaib_nitro(:) = max( 5.76-0.64*atan(abs(plat(:))*
xpi/180.),3.8 )
176 WHERE(pek%XGMES(:)>0.0)
177 zwork(:) = 0.321*log(pek%XGMES(:)*1000.)
178 zwork(:) = exp(zwork(:))*pek%XLAI(:)/zlaib_nitro(:)
182 zxsefold(:) = pek%XSEFOLD(:) * max(1.0,zwork(:)) * min(1.0,pek%XANFM(:)/pk%XANMAX(:)) /
xday 186 zxsefold(:) = max(1.0e-8,zxsefold(:))
192 zxsefold(:) = max(pek%XSEFOLD(:)/
xday/10.0,zxsefold(:))
196 zdecline(:,1) = min(pbiomass_leaf(:)-pek%XLAIMIN(:)*pbslai_nitro(:), &
197 pbiomass_leaf(:)*(1.0-exp(-1.0/zxsefold(:))))
201 zdecline(:,1) = max(zdecline(:,1),0.0)
205 pbiomass_leaf(:) = pbiomass_leaf(:) - zdecline(:,1)
209 zassim(:) = pek%XANDAY(:)*zbmcoef
217 WHERE(pbiomass_leaf(:)>0.0)
218 zwork(:) = (1.0/(1.0-xca_nit))*log(pbiomass_leaf(:)/xcc_nitro)
219 zwork(:) = exp(zwork(:))
222 WHERE (zassim(:) >= zdecline(:,1))
231 zbiomasst(:) = max(pbiomass_leaf(:), zwork(:))
235 zbiomass(:,2) = zbiomasst(:) - pbiomass_leaf(:)
236 zdecline(:,2) = zbiomass(:,2) * (1.0-exp(-1.0*
xday/pek%XSEFOLD(:)))
237 zstorage(:,1) = zbiomass(:,2) - pek%XBIOMASS(:,2) + zdecline(:,2) + pek%XRESP_BIOMASS(:,2)
246 zdecline(:,2) = pek%XBIOMASS(:,2) * (1.0-exp(-1.0*
xday/pek%XSEFOLD(:)))
247 zbiomass(:,2) = pek%XBIOMASS(:,2) - zdecline(:,2) - pek%XRESP_BIOMASS(:,2)
254 zbiomass(:,2) = max(zbiomass(:,2),0.0)
256 zbiomasst(:) = pbiomass_leaf(:) + zbiomass(:,2)
263 zincrease(:,1) = zassim(:)
264 zincrease(:,2) = zstorage(:,1)
265 zincrease(:,3) = -min(zstorage(:,1),0.0)
267 zstorage(:,1) = max(0.0,zstorage(:,1))
271 WHERE( zstorage(:,1) > zdecline(:,1))
272 zdecline(:,2) = pek%XBIOMASS(:,2) * (1.0 - exp(-1.0*
xday/pek%XSEFOLD(:)))
273 zbiomasst(:) = pek%XBIOMASS(:,1) + pek%XBIOMASS(:,2) - zdecline(:,2) - pek%XRESP_BIOMASS(:,2)
277 WHERE( zbiomasst(:) > 0.0)
278 zwork(:) = (1.0-xca_nit)*log(zbiomasst(:))
279 zwork(:) = exp(zwork(:))
282 WHERE( zstorage(:,1) > zdecline(:,1))
286 pbiomass_leaf(:) = xcc_nitro * zwork(:)
287 zbiomass(:,2) = zbiomasst(:) - pbiomass_leaf(:)
288 zdecline(:,1) = pek%XBIOMASS(:,1) - pbiomass_leaf(:)
289 zstorage(:,1) = zbiomass(:,2) - pek%XBIOMASS(:,2) + zdecline(:,2) + pek%XRESP_BIOMASS(:,2)
291 zincrease(:,2) = zstorage(:,1)
302 zmort_leaf(:) = max(0.0, zdecline(:,1) - zstorage(:,1))
304 zbiomass(:,3) = pek%XBIOMASS(:,3)
306 IF (io%CPHOTO==
'NIT')
THEN 310 zdecline(:,3) = zbiomass(:,3)*(1.0-exp(-1.0*
xday/pek%XSEFOLD(:)))
316 WHERE((zbiomasst(:) <= xbiomasst_lim) .AND. (zxsefold(:) > 1.0))
317 zbiomass(:,3) = zbiomass(:,3) + zmort_leaf(:)
320 ELSEIF (io%CPHOTO==
'NCB')
THEN 325 zdecline(:,3) = min(pek%XBIOMASS(:,3)*(1.0-exp(-1.0*
xday/(pek%XSEFOLD(:)/4.))), &
326 pek%XBIOMASS(:,3)-pek%XRESP_BIOMASS(:,3))
327 zdecline(:,4) = min(pek%XBIOMASS(:,4)*(1.0-exp(-1.0*
xday/pek%XSEFOLD(:))), &
328 pek%XBIOMASS(:,4)-pek%XRESP_BIOMASS(:,4))
332 zdecline(:,5) = min(pek%XBIOMASS(:,5)*(1.0-exp(-1.0*
xday/pk%XTAU_WOOD(:))), &
333 pek%XBIOMASS(:,5)-pek%XRESP_BIOMASS(:,5))
334 zdecline(:,6) = pek%XBIOMASS(:,6)*(1.0-exp(-1.0*
xday/pk%XTAU_WOOD(:)))
343 gmask_assim(:)=(zassim(:) >= zdecline(:,1))
345 WHERE (gmask_assim(:))
348 zincrease(:,4) = zmort_leaf(:)
351 zstorage(:,1) = zstorage(:,1) + zincrease(:,4)
352 zmort_leaf(:) = zmort_leaf(:) - zincrease(:,4)
354 zstorage(:,2) = zdecline(:,2)
355 zstorage(:,3) = zdecline(:,3)
360 zincrease(:,4) = min(max(0.5*zassim(:),0.) , 0.5*zmort_leaf(:))
362 zstorage(:,1) = zstorage(:,1) + zincrease(:,4)
363 zmort_leaf(:) = zmort_leaf(:) - zincrease(:,4)
367 WHERE(gmask_assim(:).AND.owood(:))
369 zstorage(:,4) = zdecline(:,4)
371 zincrease(:,4) = zincrease(:,4) + 0.3* (zstorage(:,2) + zstorage(:,3))
372 zincrease(:,5) = 0.7* (zstorage(:,2) + zstorage(:,3))
373 zincrease(:,6) = zstorage(:,4)
375 ELSEWHERE(gmask_assim(:).AND..NOT.owood(:))
379 zincrease(:,4) = zincrease(:,4) + zstorage(:,2) + zstorage(:,3)
383 WHERE (.NOT.gmask_assim(:).AND.owood(:))
386 zstorage(:,2) = 0.5*zdecline(:,2)
387 zstorage(:,3) = 0.5*zdecline(:,3)
388 zstorage(:,4) = 0.5*zdecline(:,4)
390 zincrease(:,5) = zstorage(:,2) + zstorage(:,3)
391 zincrease(:,6) = zstorage(:,4)
393 ELSEWHERE(.NOT.gmask_assim(:).AND..NOT.owood(:))
407 IF (io%CRESPSL==
'CNT')
THEN 408 pk%XTURNOVER(:,1) = zmort_leaf(:)*1000.*xpcco2/
xday 409 pk%XTURNOVER(:,2) = (zdecline(:,2) - zstorage(:,2))*1000.*xpcco2/
xday 410 pk%XTURNOVER(:,3) = (zdecline(:,3) - zstorage(:,3))*1000.*xpcco2/
xday 411 pk%XTURNOVER(:,4) = (zdecline(:,4) - zstorage(:,4))*1000.*xpcco2/
xday 412 pk%XTURNOVER(:,5) = (zdecline(:,5) - zstorage(:,5))*1000.*xpcco2/
xday 413 pk%XTURNOVER(:,6) = (zdecline(:,6) - zstorage(:,6))*1000.*xpcco2/
xday 421 zbiomass(:,3) = zbiomass(:,3) + zincrease(:,3) - zdecline(:,3) - pek%XRESP_BIOMASS(:,3)
424 pbiomass_leaf(:) = pbiomass_leaf(:) + zassim(:)
427 pek%XBIOMASS(:,1) = pbiomass_leaf(:)
428 pek%XBIOMASS(:,2) = zbiomass(:,2)
429 pek%XBIOMASS(:,3) = zbiomass(:,3)
432 pek%XRESP_BIOMASS(:,2) = 0.0
433 pek%XRESP_BIOMASS(:,3) = 0.0
439 IF (io%CPHOTO==
'NIT')
THEN 441 pek%XBIOMASS(:,3) = max(pek%XBIOMASS(:,3),0.0)
443 ELSEIF (io%CPHOTO==
'NCB')
THEN 445 zbiomass(:,4) = pek%XBIOMASS(:,4) + zincrease(:,4) - zdecline(:,4) - pek%XRESP_BIOMASS(:,4)
448 zbiomass(:,5) = pek%XBIOMASS(:,5)
449 zbiomass(:,6) = pek%XBIOMASS(:,6)
450 zresp(:) = pek%XRESP_BIOMASS(:,5)
452 DO jspin = 1, io%NSPINW
456 zbiomass(ji,5) = zbiomass(ji,5) + zincrease(ji,5) - zdecline(ji,5) - zresp(ji)
457 zbiomass(ji,6) = zbiomass(ji,6) + zincrease(ji,6) - zdecline(ji,6)
458 zdecline(ji,5) = zbiomass(ji,5)*(1.0-exp((-1.0*
xday)/pk%XTAU_WOOD(ji)))
459 zdecline(ji,6) = zbiomass(ji,6)*(1.0-exp((-1.0*
xday)/pk%XTAU_WOOD(ji)))
460 IF (pek%XBIOMASS(ji,5).GT.0.0) &
461 zresp(ji) = pek%XRESP_BIOMASS(ji,5)/pek%XBIOMASS(ji,5) * zbiomass(ji,5)
470 pek%XBIOMASS(:,4) = zbiomass(:,4)
471 pek%XBIOMASS(:,5) = zbiomass(:,5)
472 pek%XBIOMASS(:,6) = zbiomass(:,6)
474 pek%XRESP_BIOMASS(:,4) = 0.0
475 pek%XRESP_BIOMASS(:,5) = 0.0
477 pk%XINCREASE(:,:) = zincrease(:,:)
subroutine nitro_decline(IO, PK, PEK, OWOOD, PBSLAI_NITRO, PLAT, PBIOMASS_LEAF)