SURFEX v8.1
General documentation of Surfex
vegetation_evol.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE vegetation_evol(IO, DTI, PK, PEK, OAGRIP, PTSTEP, KMONTH, KDAY, PTIME, &
7  PLAT, PRHOA, P_CO2, ISSK, PRESP_BIOMASS_INST, PSWDIR)
8 ! ###############################################################
9 !!**** *VEGETATION EVOL*
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 ! performs the time evolution of vegetation parameters
15 ! at solar midnight in the case of interactive vegetation (ISBA-Ags)
16 !
17 !!** METHOD
18 !! ------
19 !!
20 !! EXTERNAL
21 !! --------
22 !! none
23 !!
24 !! IMPLICIT ARGUMENTS
25 !! ------------------
26 !!
27 !! none
28 !!
29 !! REFERENCE
30 !! ---------
31 !!
32 !!
33 !! AUTHOR
34 !! ------
35 !!
36 !! V. Masson * Meteo-France *
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !! Original 01/03/03
41 !! P. Le Moigne 12/2004 : NIT version
42 !! P Le Moigne 09/2005 : AGS modifs of L. Jarlan
43 !! A.L. Gibelin 04/2009 : BIOMASS and RESP_BIOMASS arrays
44 !! A.L. Gibelin 04/2009 : Add NCB option
45 !! D. Carrer 01/2012 : representation of nitrogen dilution fct of CO2 (from Calvet et al. 2008)
46 !! B. Decharme 05/2012 : Optimization and ISBA-DIF coupling
47 !! C. Delire 01/2014 : IBIS respiration for tropical evergreen
48 !! R. Seferian 05/2015 : expanding of Nitrogen dilution option to the complete formulation proposed by Yin et al. GCB 2002
49 !!Seferian & Delire 06/2015 : accouting for living woody biomass respiration (expanding work of E Joetzjer to all woody PFTs)
50 !! B. Decharme 01/16 : Bug when vegetation veg, z0 and emis are imposed whith interactive vegetation
51 !-------------------------------------------------------------------------------
52 !
53 !* 0. DECLARATIONS
54 ! ------------
55 !
57 USE modd_data_isba_n, ONLY : data_isba_t
58 USE modd_isba_n, ONLY : isba_p_t, isba_pe_t
59 !
60 USE modd_sso_n, ONLY : sso_t
61 !
62 USE modd_co2v_par, ONLY : xmc, xmco2, xpcco2, xrespfactor_nit, &
63  xcoeff_maint_resp_zero, xslope_maint_resp, &
64  xparcf, xdiludec, itransfert_esg
65 USE modd_csts, ONLY : xday, xtt, xmd
66 !
67 USE modi_albedo
68 USE modi_laigain
69 USE modi_lailoss
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, &
80  nvt_trbe
81 USE modd_surf_par
82 !
83 USE yomhook ,ONLY : lhook, dr_hook
84 USE parkind1 ,ONLY : jprb
85 !
86 IMPLICIT NONE
87 !
88 !* 0.1 declarations of arguments
89 !
90 TYPE(isba_options_t), INTENT(INOUT) :: IO
91 TYPE(data_isba_t), INTENT(INOUT) :: DTI
92 TYPE(isba_p_t), INTENT(INOUT) :: PK
93 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
94 !
95 LOGICAL, INTENT(IN) :: OAGRIP ! agricultural practices
96 !
97 REAL, INTENT(IN) :: PTSTEP ! time step
98 INTEGER, INTENT(IN) :: KMONTH ! current month
99 INTEGER, INTENT(IN) :: KDAY ! current day
100 REAL, INTENT(IN) :: PTIME ! current time since midnight
101 REAL, DIMENSION(:), INTENT(IN) :: PLAT ! latitude of each grid point
102 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density
103 !
104 REAL, DIMENSION(:), INTENT(IN) :: P_CO2 ! CO2 concentration [ppmm]
105 !
106 TYPE(sso_t), INTENT(INOUT) :: ISSK
107 !
108 REAL, DIMENSION(:,:), INTENT(INOUT) :: PRESP_BIOMASS_INST ! instantaneous respiration of biomass (kgCO2/kgair m/s)
109 !
110 REAL, DIMENSION(:), INTENT(IN), OPTIONAL :: PSWDIR ! Global incoming shortwave radiation (W m-2)
111 !
112 !* 0.2 declarations of local parameter
113 !
114 REAL, PARAMETER :: ZCOEF1 = 10.0
115 REAL, PARAMETER :: ZCOEF2 = 25.0
116 REAL, PARAMETER :: ZDEPTH = 1.0 !Temp depth m
117 !
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.
123 !
124 REAL, PARAMETER :: ZCDILU1 = -0.048
125 REAL, PARAMETER :: ZCDILU2 = 6.3
126 REAL, PARAMETER :: ZCDILU3 = 371.
127 ! Required for Yin et al., nitrogen dilu param
128 REAL, PARAMETER :: ZPHOTON = 2.010402e-3 ! conversion coef for W m-2 in photon m-2
129 REAL, PARAMETER :: ZDEPTH_VEG = 0.40 !Depth in meters for daily temperature
130 REAL, PARAMETER :: ZTEMP_VEG = 23. !Average temperature of the vegetation
131 REAL, PARAMETER :: ZDECIDUS = 0.75 !Coef for decidus trees
132 !
133 !* 0.3 declarations of local variables
134 !
135 REAL, DIMENSION(SIZE(PEK%XRESP_BIOMASS,1),SIZE(PEK%XRESP_BIOMASS,2)) :: ZRESP_BIOMASS_LAST ! biomass at t-1 (kg_DM/m2/day)
136 REAL, DIMENSION(SIZE(PEK%XLAI,1)) :: ZBIOMASS_LEAF ! temporary leaf biomass
137 REAL, DIMENSION(SIZE(PEK%XLAI,1)) :: ZBSLAI_NITRO ! (Calvet et al. 2008) ratio of biomass to LAI
138  ! with representation of nitrogen dilution
139 REAL, DIMENSION(SIZE(PEK%XLAI,1)) :: ZCO2, ZCNA_NITRO ! fct of CO2
140 REAL, DIMENSION(SIZE(PEK%XLAI,1)) :: ZPARAM
141 REAL, DIMENSION(SIZE(PEK%XLAI,1)) :: ZHTREE, ZSAPFRAC ! tree height & sap fraction used for estimation of
142  ! sapwood fraction
143 !
144 REAL :: ZLOG2, ZWORK
145 !
146 REAL, DIMENSION(SIZE(PEK%XTG,1)) :: ZTG_VEG ! surface temperature (C)
147 REAL, DIMENSION(SIZE(PEK%XTG,1)) :: ZTG_SOIL ! soil temperature (C)
148 REAL, DIMENSION(SIZE(PEK%XTG,1)) :: ZDG_SOIL ! soil depth for DIF (m)
149 REAL :: ZWGHT_SOIL ! Weight for DIF (m)
150 !
151 LOGICAL, DIMENSION(SIZE(PEK%XLAI,1)) :: GWOOD,GHERB
152 LOGICAL, DIMENSION(SIZE(PEK%XLAI,1)) :: GMASK_AGRI
153 LOGICAL :: GMASK
154 INTEGER :: INI, INL, JI, JL, IDEPTH, JTYPE
155 !
156 REAL, DIMENSION(SIZE(PK%XVEGTYPE_PATCH,1),SIZE(PK%XVEGTYPE_PATCH,2)) :: ZPARAM_TYPE
157 !
158 ! * Azote
159 REAL, DIMENSION(SIZE(PEK%XLAI,1)) :: ZFERT
160 !
161 REAL :: ZDILUDEC
162 !
163 REAL(KIND=JPRB) :: ZHOOK_HANDLE
164 !
165 !-----------------------------------------------------------------
166 !
167 !* 1. Preliminaries
168 ! -------------
169 !
170 IF (lhook) CALL dr_hook('VEGETATION_EVOL',0,zhook_handle)
171 !
172 ini=SIZE(pek%XTG,1)
173 inl=SIZE(pek%XTG,2)
174 !
175 zlog2 = log(2.0)
176 !
177 ztg_soil(:) = 0.0
178 ztg_veg(:) = 0.0
179 !
180 ! Define herbaceous and woody patches
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(:))
185 !
186 ! Mask where vegetation evolution is performed (just before solar midnight)
187 gmask = ( ptime - ptstep < 0. ) .AND. ( ptime >= 0. )
188 !
189 ! Save RESP_BIOMASS at t-1
190 IF (gmask) THEN
191  pek%XRESP_BIOMASS(:,1) = 0.0
192  zresp_biomass_last(:,:) = 0.0
193 ELSE
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(:,:)
196 ENDIF
197 !
198 !* 2. Interactive vegetation
199 ! ----------------------
200 !
201 ! LAI daily mortality and assimilation
202 !
203 zbiomass_leaf(:) = pek%XBIOMASS(:,1)
204 !
205 IF (gmask) THEN
206  !
207  pk%XINCREASE (:,:) = 0.0
208  pk%XTURNOVER(:,:) = 0.0
209  zbslai_nitro(: ) = pk%XBSLAI_NITRO(:)
210  !
211  IF(io%LNITRO_DILU)THEN
212 !
213 ! * Compute Vegetation temperature
214 ! We use the temperature of the second layer of the soil (<40cm)
215 ! since the parametrization employs a daily temperature
216 !
217  IF(io%CISBA/='DIF')THEN
218  ztg_veg(:) = pek%XTG(:,2)
219  ELSE
220  DO ji=1,ini
221  idepth=pk%NWG_LAYER(ji)
222  zdg_soil(ji)=min(zdepth_veg,pk%XDG(ji,idepth))
223  ENDDO
224  DO jl=1,inl
225  DO ji=1,ini
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)
228  ENDDO
229  ENDDO
230  ENDIF
231 !
232  zparam(:) = 0.0
233  zfert(:) = 0.0
234  DO jtype=1,SIZE(pk%XVEGTYPE_PATCH,2)
235  IF (nvegtype==nvegtype_ecosg) THEN
236  zdiludec = xdiludec(itransfert_esg(jtype))
237  ELSE
238  zdiludec = xdiludec(jtype)
239  ENDIF
240  DO ji = 1,ini
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)
246  ENDDO
247  ENDDO
248 
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)) ! (ppmm -> ppm)
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(:))
254  ENDWHERE
255 !
256  ENDIF
257 !
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)
261  ENDIF
262  !
263  ! reinitialise PEK%XANDAY(:) and PEK%XANFM(:)
264  pek%XANDAY(:)=0.0
265  pek%XANFM(:) =0.0
266  !
267 ENDIF
268 !
269 !
270 ! * soil temperature in K (over 1m depth for DIF)
271 !
272 ztg_veg(:) = pek%XTG(:,1)
273 !
274 IF(io%CISBA/='DIF')THEN
275  ztg_soil(:) = pek%XTG(:,2)
276 ELSE
277  DO ji=1,ini
278  idepth=pk%NWG_LAYER(ji)
279  zdg_soil(ji)=min(zdepth,pk%XDG(ji,idepth))
280  ENDDO
281  DO jl=1,inl
282  DO ji=1,ini
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)
285  ENDDO
286  ENDDO
287 ENDIF
288 !
289 !
290 ! * Respiration of structural biomass pools
291 !
292 WHERE(gwood(:))
293  ! IBIS respiration with either respiration factor rwood=0.0125 - otherwise rroot=1.25
294  ! (Kucharik et al, 2000, eq 6-8) Soil temp in K
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))
297 ELSEWHERE
298  pek%XRESP_BIOMASS(:,2) = pek%XRESP_BIOMASS(:,2) + pek%XBIOMASS(:,2) * xrespfactor_nit &
299  * exp((zlog2/zcoef1)*(ztg_veg(:)-xtt-zcoef2)) * ptstep
300  ! before optimization * 2.0**((PEK%XTG(:,2)-XTT-ZCOEF2)/ZCOEF1) * PTSTEP
301 ENDWHERE
302 !
303 IF (io%CPHOTO == 'NIT') THEN
304  !
305  pek%XRESP_BIOMASS(:,3) = pek%XRESP_BIOMASS(:,3) + pek%XBIOMASS(:,3) * xrespfactor_nit &
306  * exp((zlog2/zcoef1)*(ztg_soil(:)-xtt-zcoef2)) * ptstep
307  ! before optimization * 2.0**((PEK%XTG(:,2)-XTT-ZCOEF2)/ZCOEF1) * PTSTEP
308  !
309 ELSEIF (io%CPHOTO == 'NCB') THEN
310  !
311  pek%XRESP_BIOMASS(:,2) = min(pek%XRESP_BIOMASS(:,2), pek%XBIOMASS(:,2))
312  !
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))
316  !
317  WHERE(gwood(:))
318  ! Resp IBIS (Soil temp in K)
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))
321  ELSEWHERE
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
324  ENDWHERE
325  !
326  pek%XRESP_BIOMASS(:,4) = min(pek%XRESP_BIOMASS(:,4), pek%XBIOMASS(:,4))
327  !
328  WHERE( (gwood(:)).AND.(pek%XBIOMASS(:,5)>0.) )
329  ! IBIS estimation of sapwood fraction based on the height of tree, sapspeed and
330  ! max transpiration rates. Conversion from DM to C. To be changed with DGVM. (Soil temp in K)
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)))
334  !ZSAPFRAC(:) = 0.5
335 
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))
339  ELSEWHERE
340  pek%XRESP_BIOMASS(:,5) = 0.0
341  ENDWHERE
342  !
343 ENDIF
344 !
345 ! * Instantaneous respiration (kgCO2/kgair m/s)
346 !
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)
350 ENDDO
351 !
352 !* 3. Agricultural practices
353 ! ----------------------
354 !
355 IF (oagrip) THEN
356  !
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.
362  !
363  WHERE (gmask_agri(:))
364  pek%XLAI(:) = pek%XLAIMIN(:)
365  zbiomass_leaf(:) = pek%XLAI(:) * zbslai_nitro(:)
366  END WHERE
367 
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
374  END WHERE
375  !
376  IF (io%CPHOTO == 'NCB') THEN
377  !
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
383  END WHERE
384  !
385  ENDIF
386  !
387 ENDIF
388 !
389 !* 4. Physical parameters depending on vegetation
390 ! -------------------------------------------
391 !
392 IF (gmask) THEN
393  !
394  ! Evolution of vegetation fraction and roughness length due to LAI change
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)
398  ENDIF
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)
402  ENDIF
403  !
404  ! Evolution of radiative parameters due to vegetation fraction change
405  IF(.NOT.dti%LIMP_EMIS) THEN
406  WHERE( pek%XVEG(:) > 0. ) pek%XEMIS(:)= emis_from_veg(pek%XVEG(:),pk%XVEGTYPE_PATCH(:,:))
407  ENDIF
408  !
409  CALL albedo(io%CALBEDO, pek )
410  !
411  ! Evolution of effective roughness length due to new surface roughness length
412  !
413  IF (ASSOCIATED(issk%XAOSIP)) THEN
414  IF (SIZE(issk%XAOSIP)>0) THEN
415  CALL subscale_z0eff(issk,pek%XZ0(:),.false. )
416  ENDIF
417  ENDIF
418  !
419 ENDIF
420 !
421 IF (lhook) CALL dr_hook('VEGETATION_EVOL',1,zhook_handle)
422 !-----------------------------------------------------------------
423 !
424 END SUBROUTINE vegetation_evol
real, save xmd
Definition: modd_csts.F90:61
subroutine subscale_z0eff(ISSK, PZ0VEG, OZ0REL, OMASK)
subroutine laigain(PBSLAI, PEK, PBIOMASS)
Definition: laigain.F90:7
subroutine vegetation_evol(IO, DTI, PK, PEK, OAGRIP, PTSTEP, KMONTH, KDAY, PTIME, PLAT, PRHOA, P_CO2, ISSK, PRESP_BIOMASS_INST, PSWDIR)
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
real, save xday
Definition: modd_csts.F90:45
logical lhook
Definition: yomhook.F90:15
subroutine nitro_decline(IO, PK, PEK, OWOOD, PBSLAI_NITRO, PLAT, PBIOMASS_LEAF)
subroutine albedo(HALBEDO, PEK, PSNOW, OMASK)
Definition: albedo.F90:7
real, save xtt
Definition: modd_csts.F90:66