6 SUBROUTINE vegetation_evol(IO, DTI, PK, PEK, OAGRIP, PTSTEP, KMONTH, KDAY, PTIME, &
7 PLAT, PRHOA, P_CO2, ISSK, PRESP_BIOMASS_INST, PSWDIR)
62 USE modd_co2v_par
, ONLY : xmc, xmco2, xpcco2, xrespfactor_nit, &
63 xcoeff_maint_resp_zero, xslope_maint_resp, &
64 xparcf, xdiludec, itransfert_esg
70 USE modi_nitro_decline
74 USE modi_subscale_z0eff
76 USE modd_data_cover_par
, ONLY : nvegtype_ecosg, nvegtype, &
77 nvt_tebd, nvt_trbe, nvt_bone, &
78 nvt_trbd, nvt_tebe, nvt_tene, &
79 nvt_bobd, nvt_bond, nvt_shrb, &
95 LOGICAL,
INTENT(IN) :: OAGRIP
97 REAL,
INTENT(IN) :: PTSTEP
98 INTEGER,
INTENT(IN) :: KMONTH
99 INTEGER,
INTENT(IN) :: KDAY
100 REAL,
INTENT(IN) :: PTIME
101 REAL,
DIMENSION(:),
INTENT(IN) :: PLAT
102 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
104 REAL,
DIMENSION(:),
INTENT(IN) :: P_CO2
106 TYPE(
sso_t),
INTENT(INOUT) :: ISSK
108 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PRESP_BIOMASS_INST
110 REAL,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: PSWDIR
114 REAL,
PARAMETER :: ZCOEF1 = 10.0
115 REAL,
PARAMETER :: ZCOEF2 = 25.0
116 REAL,
PARAMETER :: ZDEPTH = 1.0
118 REAL,
PARAMETER :: ZWOOD_IBIS=0.0125
119 REAL,
PARAMETER :: ZROOT_IBIS=1.25
120 REAL,
PARAMETER :: ZCIBIS1 =3500.
121 REAL,
PARAMETER :: ZCIBIS2 =1./288.
122 REAL,
PARAMETER :: ZNDAY =365.
124 REAL,
PARAMETER :: ZCDILU1 = -0.048
125 REAL,
PARAMETER :: ZCDILU2 = 6.3
126 REAL,
PARAMETER :: ZCDILU3 = 371.
128 REAL,
PARAMETER :: ZPHOTON = 2.010402e-3
129 REAL,
PARAMETER :: ZDEPTH_VEG = 0.40
130 REAL,
PARAMETER :: ZTEMP_VEG = 23.
131 REAL,
PARAMETER :: ZDECIDUS = 0.75
135 REAL,
DIMENSION(SIZE(PEK%XRESP_BIOMASS,1),SIZE(PEK%XRESP_BIOMASS,2)) :: ZRESP_BIOMASS_LAST
136 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZBIOMASS_LEAF
137 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZBSLAI_NITRO
139 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZCO2, ZCNA_NITRO
140 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZPARAM
141 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZHTREE, ZSAPFRAC
146 REAL,
DIMENSION(SIZE(PEK%XTG,1)) :: ZTG_VEG
147 REAL,
DIMENSION(SIZE(PEK%XTG,1)) :: ZTG_SOIL
148 REAL,
DIMENSION(SIZE(PEK%XTG,1)) :: ZDG_SOIL
151 LOGICAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: GWOOD,GHERB
152 LOGICAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: GMASK_AGRI
154 INTEGER :: INI, INL, JI, JL, IDEPTH, JTYPE
156 REAL,
DIMENSION(SIZE(PK%XVEGTYPE_PATCH,1),SIZE(PK%XVEGTYPE_PATCH,2)) :: ZPARAM_TYPE
159 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZFERT
163 REAL(KIND=JPRB) :: ZHOOK_HANDLE
170 IF (
lhook)
CALL dr_hook(
'VEGETATION_EVOL',0,zhook_handle)
181 gherb(:) = ( pk%XVEGTYPE_PATCH(:,nvt_tebd) + pk%XVEGTYPE_PATCH(:,nvt_trbe) + pk%XVEGTYPE_PATCH(:,nvt_bone) &
182 & + pk%XVEGTYPE_PATCH(:,nvt_trbd) + pk%XVEGTYPE_PATCH(:,nvt_tebe) + pk%XVEGTYPE_PATCH(:,nvt_tene) &
183 & + pk%XVEGTYPE_PATCH(:,nvt_bobd) + pk%XVEGTYPE_PATCH(:,nvt_bond) + pk%XVEGTYPE_PATCH(:,nvt_shrb)<0.5)
184 gwood(:) = (.NOT.gherb(:))
187 gmask = ( ptime - ptstep < 0. ) .AND. ( ptime >= 0. )
191 pek%XRESP_BIOMASS(:,1) = 0.0
192 zresp_biomass_last(:,:) = 0.0
194 pek%XRESP_BIOMASS(:,1) = pek%XRESP_BIOMASS(:,1) + presp_biomass_inst(:,1) * (ptstep*prhoa(:)*xmc)/(xpcco2*xmco2)
195 zresp_biomass_last(:,:) = pek%XRESP_BIOMASS(:,:)
203 zbiomass_leaf(:) = pek%XBIOMASS(:,1)
207 pk%XINCREASE (:,:) = 0.0
208 pk%XTURNOVER(:,:) = 0.0
209 zbslai_nitro(: ) = pk%XBSLAI_NITRO(:)
211 IF(io%LNITRO_DILU)
THEN 217 IF(io%CISBA/=
'DIF')
THEN 218 ztg_veg(:) = pek%XTG(:,2)
221 idepth=pk%NWG_LAYER(ji)
222 zdg_soil(ji)=min(zdepth_veg,pk%XDG(ji,idepth))
226 zwght_soil=min(pk%XDZG(ji,jl),max(0.0,zdg_soil(ji)-pk%XDG(ji,jl)+pk%XDZG(ji,jl)))
227 ztg_veg(ji)=ztg_veg(ji)+pek%XTG(ji,jl)*zwght_soil/zdg_soil(ji)
234 DO jtype=1,
SIZE(pk%XVEGTYPE_PATCH,2)
235 IF (nvegtype==nvegtype_ecosg)
THEN 236 zdiludec = xdiludec(itransfert_esg(jtype))
238 zdiludec = xdiludec(jtype)
241 zparam_type(ji,jtype) = zdiludec * (zdecidus + 1.1 * zphoton * xparcf * pswdir(ji) &
242 + (ztg_veg(ji)-
xtt)/ztemp_veg - 0.33 * zfert(ji)) &
243 + (1 - zdiludec) * (1.1 * zphoton * xparcf * pswdir(ji) &
244 + (ztg_veg(ji)-
xtt)/ztemp_veg - 0.33 * zfert(ji))
245 zparam(ji) = zparam(ji) + zparam_type(ji,jtype) * pk%XVEGTYPE_PATCH(ji,jtype)
249 WHERE((pek%XCE_NITRO(:)*pek%XCNA_NITRO(:)+pek%XCF_NITRO(:))/=0.0.AND.pek%XCNA_NITRO(:)/=0.0)
250 zco2(:) = p_co2(:)*(
xmd/(1.e-6*xmco2))
251 zcna_nitro(:) = pek%XCNA_NITRO(:) * &
252 exp(zcdilu1*exp(zparam(:)-pek%XCNA_NITRO(:)/zcdilu2) * alog(max(1.,zco2(:)/zcdilu3)))
253 zbslai_nitro(:) = 1. / (pek%XCE_NITRO(:)*zcna_nitro(:)+pek%XCF_NITRO(:))
258 IF(any(pek%XLAI(:)/=
xundef))
THEN 259 CALL nitro_decline(io, pk, pek, gwood, zbslai_nitro, plat, zbiomass_leaf)
260 CALL laigain(zbslai_nitro, pek, zbiomass_leaf)
272 ztg_veg(:) = pek%XTG(:,1)
274 IF(io%CISBA/=
'DIF')
THEN 275 ztg_soil(:) = pek%XTG(:,2)
278 idepth=pk%NWG_LAYER(ji)
279 zdg_soil(ji)=min(zdepth,pk%XDG(ji,idepth))
283 zwght_soil=min(pk%XDZG(ji,jl),max(0.0,zdg_soil(ji)-pk%XDG(ji,jl)+pk%XDZG(ji,jl)))
284 ztg_soil(ji)=ztg_soil(ji)+pek%XTG(ji,jl)*zwght_soil/zdg_soil(ji)
295 pek%XRESP_BIOMASS(:,2) = pek%XRESP_BIOMASS(:,2) + pek%XBIOMASS(:,2) * ptstep &
296 * max(0.,zroot_ibis*exp(zcibis1*(zcibis2-1./ztg_veg(:)))/(znday*
xday))
298 pek%XRESP_BIOMASS(:,2) = pek%XRESP_BIOMASS(:,2) + pek%XBIOMASS(:,2) * xrespfactor_nit &
299 * exp((zlog2/zcoef1)*(ztg_veg(:)-
xtt-zcoef2)) * ptstep
303 IF (io%CPHOTO ==
'NIT')
THEN 305 pek%XRESP_BIOMASS(:,3) = pek%XRESP_BIOMASS(:,3) + pek%XBIOMASS(:,3) * xrespfactor_nit &
306 * exp((zlog2/zcoef1)*(ztg_soil(:)-
xtt-zcoef2)) * ptstep
309 ELSEIF (io%CPHOTO ==
'NCB')
THEN 311 pek%XRESP_BIOMASS(:,2) = min(pek%XRESP_BIOMASS(:,2), pek%XBIOMASS(:,2))
313 pek%XRESP_BIOMASS(:,3) = pek%XRESP_BIOMASS(:,3) + pek%XBIOMASS(:,3) * &
314 max( 0., xcoeff_maint_resp_zero * (1. + xslope_maint_resp*(ztg_veg(:)-
xtt))) * ptstep
315 pek%XRESP_BIOMASS(:,3) = min(pek%XRESP_BIOMASS(:,3), pek%XBIOMASS(:,3))
319 pek%XRESP_BIOMASS(:,4) = pek%XRESP_BIOMASS(:,4) + pek%XBIOMASS(:,4) * ptstep &
320 * max(0.,zroot_ibis * exp(zcibis1*(zcibis2-1./ztg_soil(:)))/(znday*
xday))
322 pek%XRESP_BIOMASS(:,4) = pek%XRESP_BIOMASS(:,4) + pek%XBIOMASS(:,4) * &
323 max( 0., xcoeff_maint_resp_zero * (1. + xslope_maint_resp*(ztg_soil(:)-
xtt))) * ptstep
326 pek%XRESP_BIOMASS(:,4) = min(pek%XRESP_BIOMASS(:,4), pek%XBIOMASS(:,4))
328 WHERE( (gwood(:)).AND.(pek%XBIOMASS(:,5)>0.) )
331 zhtree(:) = 2.5*0.75*(pek%XBIOMASS(:,1)+pek%XBIOMASS(:,2)+pek%XBIOMASS(:,3)+&
332 pek%XBIOMASS(:,4)+pek%XBIOMASS(:,5)+pek%XBIOMASS(:,6))*0.4
333 zsapfrac(:) = min(0.5, max(0.05,0.0025/25.*zhtree(:)*0.75*400/(pek%XBIOMASS(:,5)*0.4)))
336 pek%XRESP_BIOMASS(:,5) = pek%XRESP_BIOMASS(:,5) + pek%XBIOMASS(:,5) * zsapfrac(:) * ptstep &
337 * max(0.,zwood_ibis*exp(zcibis1*(zcibis2-1./ztg_veg(:)))/(znday*
xday))
338 pek%XRESP_BIOMASS(:,5) = min(pek%XRESP_BIOMASS(:,5), pek%XBIOMASS(:,5))
340 pek%XRESP_BIOMASS(:,5) = 0.0
347 DO jl=2,
SIZE(pek%XRESP_BIOMASS(:,:),2)
348 presp_biomass_inst(:,jl) = (pek%XRESP_BIOMASS(:,jl) - zresp_biomass_last(:,jl)) &
349 * xpcco2*xmco2/(ptstep*prhoa(:)*xmc)
357 gmask_agri(:) = .false.
358 WHERE ( pek%TSEED(:)%TDATE%MONTH /=
nundef .AND. ( kmonth < pek%TSEED(:)%TDATE%MONTH .OR. &
359 (kmonth == pek%TSEED(:)%TDATE%MONTH .AND. kday < pek%TSEED(:)%TDATE%DAY) ) ) gmask_agri(:) = .true.
360 WHERE ( pek%TREAP(:)%TDATE%MONTH /=
nundef .AND. ( kmonth > pek%TREAP(:)%TDATE%MONTH .OR. &
361 (kmonth == pek%TREAP(:)%TDATE%MONTH .AND. kday >= pek%TREAP(:)%TDATE%DAY) ) ) gmask_agri(:) = .true.
363 WHERE (gmask_agri(:))
364 pek%XLAI(:) = pek%XLAIMIN(:)
365 zbiomass_leaf(:) = pek%XLAI(:) * zbslai_nitro(:)
368 WHERE (gmask_agri(:))
369 pek%XBIOMASS(:,1) = 0.0
370 pek%XBIOMASS(:,2) = 0.0
371 pek%XBIOMASS(:,3) = 0.0
372 pek%XRESP_BIOMASS(:,2) = 0.0
373 pek%XRESP_BIOMASS(:,3) = 0.0
376 IF (io%CPHOTO ==
'NCB')
THEN 378 WHERE (gmask_agri(:))
379 pek%XBIOMASS(:,4) = 0.0
380 pek%XBIOMASS(:,5) = 0.0
381 pek%XBIOMASS(:,6) = 0.0
382 pek%XRESP_BIOMASS(:,4) = 0.0
395 IF(.NOT.dti%LIMP_Z0)
THEN 396 WHERE( pek%XVEG(:) > 0. ) &
397 pek%XZ0 (:) =
z0v_from_lai(pek%XLAI(:),pk%XH_TREE(:),pk%XVEGTYPE_PATCH(:,:),io%LAGRI_TO_GRASS)
399 IF(.NOT.dti%LIMP_VEG)
THEN 400 WHERE( pek%XVEG(:) > 0. ) &
401 pek%XVEG(:) =
veg_from_lai(pek%XLAI(:),pk%XVEGTYPE_PATCH(:,:),io%LAGRI_TO_GRASS)
405 IF(.NOT.dti%LIMP_EMIS)
THEN 406 WHERE( pek%XVEG(:) > 0. ) pek%XEMIS(:)=
emis_from_veg(pek%XVEG(:),pk%XVEGTYPE_PATCH(:,:))
409 CALL albedo(io%CALBEDO, pek )
413 IF (
ASSOCIATED(issk%XAOSIP))
THEN 414 IF (
SIZE(issk%XAOSIP)>0)
THEN 421 IF (
lhook)
CALL dr_hook(
'VEGETATION_EVOL',1,zhook_handle)
subroutine subscale_z0eff(ISSK, PZ0VEG, OZ0REL, OMASK)
subroutine laigain(PBSLAI, PEK, PBIOMASS)
subroutine vegetation_evol(IO, DTI, PK, PEK, OAGRIP, PTSTEP, KMONTH, KDAY, PTIME, PLAT, PRHOA, P_CO2, ISSK, PRESP_BIOMASS_INST, PSWDIR)
integer, parameter nundef
subroutine nitro_decline(IO, PK, PEK, OWOOD, PBSLAI_NITRO, PLAT, PBIOMASS_LEAF)
subroutine albedo(HALBEDO, PEK, PSNOW, OMASK)