Skip to content

Commit

Permalink
Implementation of grass scheme developed by ALS and MD
Browse files Browse the repository at this point in the history
The new grass code is optional with the flag "igrass"
igrass = 0 Old Code
igrass = 1 New Code

The main changes:
1) Sapwood has been split into above and below ground components (bsapwooda/bsapwoodb)
2) bdead = 0 for grass
3) hite = f(bleaf), and changes daily
4) grasses put all stored carbon into reproduction when they reach maximum hite/bleaf
5) allometric functions have been made more generic i.e. size2bl (intended to replace dbh2bl) ingests both dbh and hite so it can decide within the function which to use.
6) DBH(effective) is still stored as a value but not used for grass calculations
  • Loading branch information
LevineLab committed Mar 26, 2012
1 parent 5a74305 commit 457dce8
Show file tree
Hide file tree
Showing 36 changed files with 1,181 additions and 495 deletions.
18 changes: 9 additions & 9 deletions ED/build/bin/dependency.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ bdf2_solver.o: consts_coms.mod ed_misc_coms.mod ed_state_vars.mod
bdf2_solver.o: ed_therm_lib.mod grid_coms.mod rk4_coms.mod soil_coms.mod
bdf2_solver.o: therm_lib8.mod
canopy_struct_dynamics.o: allometry.mod canopy_air_coms.mod
canopy_struct_dynamics.o: canopy_layer_coms.mod consts_coms.mod
canopy_struct_dynamics.o: canopy_layer_coms.mod consts_coms.mod ed_misc_coms.mod
canopy_struct_dynamics.o: ed_state_vars.mod grid_coms.mod met_driver_coms.mod
canopy_struct_dynamics.o: pft_coms.mod phenology_coms.mod physiology_coms.mod
canopy_struct_dynamics.o: rk4_coms.mod soil_coms.mod therm_lib.mod
Expand All @@ -32,13 +32,14 @@ events.o: ed_misc_coms.mod ed_state_vars.mod ed_therm_lib.mod
events.o: fuse_fiss_utils.mod grid_coms.mod pft_coms.mod therm_lib.mod
farq_leuning.o: c34constants.mod consts_coms.mod pft_coms.mod phenology_coms.mod
farq_leuning.o: physiology_coms.mod rk4_coms.mod therm_lib8.mod
fire.o: allometry.mod consts_coms.mod disturb_coms.mod ed_misc_coms.mod
fire.o: ed_state_vars.mod grid_coms.mod soil_coms.mod
forestry.o: allometry.mod disturb_coms.mod disturbance_utils.mod ed_max_dims.mod
fire.o: consts_coms.mod disturb_coms.mod ed_misc_coms.mod ed_state_vars.mod
fire.o: grid_coms.mod soil_coms.mod
forestry.o: disturb_coms.mod disturbance_utils.mod ed_max_dims.mod
forestry.o: ed_misc_coms.mod ed_state_vars.mod fuse_fiss_utils.mod grid_coms.mod
growth_balive.o: allometry.mod consts_coms.mod decomp_coms.mod ed_max_dims.mod
growth_balive.o: ed_misc_coms.mod ed_state_vars.mod ed_therm_lib.mod
growth_balive.o: grid_coms.mod mortality.mod pft_coms.mod physiology_coms.mod
growth_balive.o: fuse_fiss_utils.mod grid_coms.mod mortality.mod pft_coms.mod
growth_balive.o: physiology_coms.mod
heun_driver.o: canopy_air_coms.mod consts_coms.mod ed_max_dims.mod
heun_driver.o: ed_misc_coms.mod ed_state_vars.mod grid_coms.mod
heun_driver.o: hydrology_coms.mod met_driver_coms.mod rk4_coms.mod
Expand Down Expand Up @@ -215,10 +216,9 @@ budget_utils.o: therm_lib.mod
dateutils.o: consts_coms.mod
ed_filelist.o: ed_max_dims.mod
ed_grid.o: consts_coms.mod ed_max_dims.mod ed_node_coms.mod grid_coms.mod
ed_therm_lib.o: allometry.mod canopy_air_coms.mod consts_coms.mod
ed_therm_lib.o: ed_max_dims.mod ed_misc_coms.mod ed_state_vars.mod grid_coms.mod
ed_therm_lib.o: pft_coms.mod rk4_coms.mod soil_coms.mod therm_lib.mod
ed_therm_lib.o: therm_lib8.mod
ed_therm_lib.o: canopy_air_coms.mod consts_coms.mod ed_max_dims.mod
ed_therm_lib.o: ed_misc_coms.mod ed_state_vars.mod grid_coms.mod pft_coms.mod
ed_therm_lib.o: rk4_coms.mod soil_coms.mod therm_lib.mod therm_lib8.mod
fatal_error.o: ed_node_coms.mod
fuse_fiss_utils.o: allometry.mod canopy_layer_coms.mod decomp_coms.mod
fuse_fiss_utils.o: disturb_coms.mod ed_max_dims.mod ed_misc_coms.mod
Expand Down
18 changes: 9 additions & 9 deletions ED/dbgbuild/bin/dependency.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ bdf2_solver.o: consts_coms.mod ed_misc_coms.mod ed_state_vars.mod
bdf2_solver.o: ed_therm_lib.mod grid_coms.mod rk4_coms.mod soil_coms.mod
bdf2_solver.o: therm_lib8.mod
canopy_struct_dynamics.o: allometry.mod canopy_air_coms.mod
canopy_struct_dynamics.o: canopy_layer_coms.mod consts_coms.mod
canopy_struct_dynamics.o: canopy_layer_coms.mod consts_coms.mod ed_misc_coms.mod
canopy_struct_dynamics.o: ed_state_vars.mod grid_coms.mod met_driver_coms.mod
canopy_struct_dynamics.o: pft_coms.mod phenology_coms.mod physiology_coms.mod
canopy_struct_dynamics.o: rk4_coms.mod soil_coms.mod therm_lib.mod
Expand All @@ -32,13 +32,14 @@ events.o: ed_misc_coms.mod ed_state_vars.mod ed_therm_lib.mod
events.o: fuse_fiss_utils.mod grid_coms.mod pft_coms.mod therm_lib.mod
farq_leuning.o: c34constants.mod consts_coms.mod pft_coms.mod phenology_coms.mod
farq_leuning.o: physiology_coms.mod rk4_coms.mod therm_lib8.mod
fire.o: allometry.mod consts_coms.mod disturb_coms.mod ed_misc_coms.mod
fire.o: ed_state_vars.mod grid_coms.mod soil_coms.mod
forestry.o: allometry.mod disturb_coms.mod disturbance_utils.mod ed_max_dims.mod
fire.o: consts_coms.mod disturb_coms.mod ed_misc_coms.mod ed_state_vars.mod
fire.o: grid_coms.mod soil_coms.mod
forestry.o: disturb_coms.mod disturbance_utils.mod ed_max_dims.mod
forestry.o: ed_misc_coms.mod ed_state_vars.mod fuse_fiss_utils.mod grid_coms.mod
growth_balive.o: allometry.mod consts_coms.mod decomp_coms.mod ed_max_dims.mod
growth_balive.o: ed_misc_coms.mod ed_state_vars.mod ed_therm_lib.mod
growth_balive.o: grid_coms.mod mortality.mod pft_coms.mod physiology_coms.mod
growth_balive.o: fuse_fiss_utils.mod grid_coms.mod mortality.mod pft_coms.mod
growth_balive.o: physiology_coms.mod
heun_driver.o: canopy_air_coms.mod consts_coms.mod ed_max_dims.mod
heun_driver.o: ed_misc_coms.mod ed_state_vars.mod grid_coms.mod
heun_driver.o: hydrology_coms.mod met_driver_coms.mod rk4_coms.mod
Expand Down Expand Up @@ -215,10 +216,9 @@ budget_utils.o: therm_lib.mod
dateutils.o: consts_coms.mod
ed_filelist.o: ed_max_dims.mod
ed_grid.o: consts_coms.mod ed_max_dims.mod ed_node_coms.mod grid_coms.mod
ed_therm_lib.o: allometry.mod canopy_air_coms.mod consts_coms.mod
ed_therm_lib.o: ed_max_dims.mod ed_misc_coms.mod ed_state_vars.mod grid_coms.mod
ed_therm_lib.o: pft_coms.mod rk4_coms.mod soil_coms.mod therm_lib.mod
ed_therm_lib.o: therm_lib8.mod
ed_therm_lib.o: canopy_air_coms.mod consts_coms.mod ed_max_dims.mod
ed_therm_lib.o: ed_misc_coms.mod ed_state_vars.mod grid_coms.mod pft_coms.mod
ed_therm_lib.o: rk4_coms.mod soil_coms.mod therm_lib.mod therm_lib8.mod
fatal_error.o: ed_node_coms.mod
fuse_fiss_utils.o: allometry.mod canopy_layer_coms.mod decomp_coms.mod
fuse_fiss_utils.o: disturb_coms.mod ed_max_dims.mod ed_misc_coms.mod
Expand Down
45 changes: 44 additions & 1 deletion ED/run/ED2IN
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,39 @@ $ED_NL



!---------------------------------------------------------------------------------------!
! ISOILCOL -- LEAF-3 and ED-2 soil colour classes that the model will use when ISOILFLG !
! is set to 2. Soil classes are from 1 to 20 (1 = lightest; 20 = darkest). !
! The values are the same as CLM-4.0. The table is the albedo for visible !
! and near infra-red. !
!---------------------------------------------------------------------------------------!
! !
! |-----------------------------------------------------------------------| !
! | | Dry soil | Saturated | | Dry soil | Saturated | !
! | Class |-------------+-------------| Class +-------------+-------------| !
! | | VIS | NIR | VIS | NIR | | VIS | NIR | VIS | NIR | !
! |-------+------+------+------+------+-------+------+------+------+------| !
! | 1 | 0.36 | 0.61 | 0.25 | 0.50 | 11 | 0.24 | 0.37 | 0.13 | 0.26 | !
! | 2 | 0.34 | 0.57 | 0.23 | 0.46 | 12 | 0.23 | 0.35 | 0.12 | 0.24 | !
! | 3 | 0.32 | 0.53 | 0.21 | 0.42 | 13 | 0.22 | 0.33 | 0.11 | 0.22 | !
! | 4 | 0.31 | 0.51 | 0.20 | 0.40 | 14 | 0.20 | 0.31 | 0.10 | 0.20 | !
! | 5 | 0.30 | 0.49 | 0.19 | 0.38 | 15 | 0.18 | 0.29 | 0.09 | 0.18 | !
! | 6 | 0.29 | 0.48 | 0.18 | 0.36 | 16 | 0.16 | 0.27 | 0.08 | 0.16 | !
! | 7 | 0.28 | 0.45 | 0.17 | 0.34 | 17 | 0.14 | 0.25 | 0.07 | 0.14 | !
! | 8 | 0.27 | 0.43 | 0.16 | 0.32 | 18 | 0.12 | 0.23 | 0.06 | 0.12 | !
! | 9 | 0.26 | 0.41 | 0.15 | 0.30 | 19 | 0.10 | 0.21 | 0.05 | 0.10 | !
! | 10 | 0.25 | 0.39 | 0.14 | 0.28 | 20 | 0.08 | 0.16 | 0.04 | 0.08 | !
! |-----------------------------------------------------------------------| !
! !
! Soil type 21 is a special case in which we use the albedo method that used to be !
! the default in ED-2.1. !
!---------------------------------------------------------------------------------------!
NL%ISOILCOL = 21
!---------------------------------------------------------------------------------------!




!---------------------------------------------------------------------------------------!
! ISOILCOL -- LEAF-3 and ED-2 soil colour classes that the model will use when ISOILFLG !
! is set to 2. Soil classes are from 1 to 20 (1 = lightest; 20 = darkest). !
Expand Down Expand Up @@ -669,6 +702,16 @@ $ED_NL



!---------------------------------------------------------------------------------------!
! IGRASS -- This controls the dynamics and growth calculation for grasses. A new !
! grass scheme is now available where bdead = 0, height is a function of bleaf!
! and growth happens daily. ALS (3/3/12) !
! 0: grasses behave like trees as in ED2.1 (old scheme) !
! !
! 1: new grass scheme as described above !
!---------------------------------------------------------------------------------------!
NL%IGRASS = 0


!---------------------------------------------------------------------------------------!
! IPHEN_SCHEME -- It controls the phenology scheme. Even within each scheme, the !
Expand Down Expand Up @@ -1090,7 +1133,7 @@ $ED_NL
! 2. Soil conductivity decreases with depth even for constant soil moisture !
! , otherwise it is the same as 1. !
!---------------------------------------------------------------------------------------!
NL%IPERCOL = 0
NL%IPERCOL = 1
!---------------------------------------------------------------------------------------!


Expand Down
29 changes: 25 additions & 4 deletions ED/src/dynamics/canopy_struct_dynamics.f90
Original file line number Diff line number Diff line change
Expand Up @@ -138,12 +138,16 @@ subroutine canopy_turbulence(cpoly,isi,ipa)
, cph2o ! ! intent(in)
use soil_coms , only : snow_rough & ! intent(in)
, soil_rough ! ! intent(in)
use pft_coms , only : is_grass ! ! intent(in)
use therm_lib , only : press2exner & ! function
, extheta2temp & ! function
, tq2enthalpy ! ! function
use allometry , only : h2crownbh & ! function
, size2bl & ! function
, dbh2bl ! ! function
use ed_misc_coms , only : igrass ! ! intent(in)
use phenology_coms , only : elongf_min ! ! intent(in)

implicit none
!----- Arguments --------------------------------------------------------------------!
type(polygontype) , target :: cpoly ! Current polygon
Expand Down Expand Up @@ -771,8 +775,15 @@ subroutine canopy_turbulence(cpoly,isi,ipa)


!------ Estimate WAI. ------------------------------------------------------!
if (is_grass(ipft) .and. igrass==1) then
!--use actual leaf mass for grass
waiuse = 0.10 * cpatch%nplant(ico) * cpatch%sla(ico) &
* cpatch%bleaf(ico)
else
!--use dbh for trees
waiuse = 0.10 * cpatch%nplant(ico) * cpatch%sla(ico) &
* dbh2bl(cpatch%dbh(ico),ipft)
end if
!---------------------------------------------------------------------------!


Expand Down Expand Up @@ -843,7 +854,7 @@ subroutine canopy_turbulence(cpoly,isi,ipa)
! Dry grasses only. Create a pseudo TAI so it won't be a !
! singularity. !
!------------------------------------------------------------------------!
tai_drygrass = elongf_min * dbh2bl(cpatch%dbh(ico),ipft)
tai_drygrass = elongf_min * size2bl(cpatch%dbh(ico),cpatch%hite(ico),ipft)
ladcohort = tai_drygrass / (htopcrown - hbotcrown)
!------------------------------------------------------------------------!
else
Expand Down Expand Up @@ -1391,8 +1402,11 @@ subroutine canopy_turbulence8(csite,initp,ipa)
, kin_visci8 ! ! intent(in)
use soil_coms , only : snow_rough8 & ! intent(in)
, soil_rough8 ! ! intent(in)
use pft_coms , only : is_grass ! ! intent(in)
use allometry , only : h2crownbh & ! function
, size2bl & ! function
, dbh2bl ! ! function
use ed_misc_coms , only : igrass ! ! intent(in)
use phenology_coms , only : elongf_min ! ! intent(in)
implicit none
!----- Arguments --------------------------------------------------------------------!
Expand Down Expand Up @@ -1952,8 +1966,15 @@ subroutine canopy_turbulence8(csite,initp,ipa)


!------ Estimate WAI. ------------------------------------------------------!
waiuse = 1.d-1 * initp%nplant(ico) * dble(cpatch%sla(ico)) &
* dble(dbh2bl(cpatch%dbh(ico),ipft))
if (is_grass(ipft) .and. igrass==1) then
!--use actual leaf mass for grass
waiuse = 1.d-1 * initp%nplant(ico) * dble(cpatch%sla(ico)) &
* dble(cpatch%bleaf(ico))
else
!--use dbh for trees
waiuse = 1.d-1 * initp%nplant(ico) * dble(cpatch%sla(ico)) &
* dble(dbh2bl(cpatch%dbh(ico),ipft))
end if
!---------------------------------------------------------------------------!


Expand Down Expand Up @@ -2024,7 +2045,7 @@ subroutine canopy_turbulence8(csite,initp,ipa)
! Dry grasses only. Create a pseudo TAI so it won't be a !
! singularity. !
!------------------------------------------------------------------------!
tai_drygrass = dble(elongf_min * dbh2bl(cpatch%dbh(ico),ipft))
tai_drygrass = dble(elongf_min * size2bl(cpatch%dbh(ico),cpatch%hite(ico),ipft))
ladcohort = tai_drygrass / (htopcrown - hbotcrown)
!------------------------------------------------------------------------!
else
Expand Down
17 changes: 9 additions & 8 deletions ED/src/dynamics/disturbance.f90
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,8 @@ subroutine apply_disturbances(cgrid)
,cpatch%pft(ico),cpatch%sla(ico) &
,cpatch%lai(ico),cpatch%wai(ico) &
,cpatch%crown_area(ico) &
,cpatch%bsapwood(ico))
,cpatch%bsapwooda(ico))

end do
csite%area(ipa) = csite%area(ipa) / area_fac
csite%age(ipa) = csite%age(ipa) * area_fac
Expand Down Expand Up @@ -1925,7 +1926,8 @@ subroutine plant_patch(csite,np,mzg,pft,density,ntext_soil,green_leaf_factor
,cpatch%dbh(nc),csite%soil_water(:,np),ntext_soil &
,green_leaf_factor,cpatch%paw_avg(nc),cpatch%elongf(nc) &
,cpatch%phenology_status(nc),cpatch%bleaf(nc) &
,cpatch%broot(nc),cpatch%bsapwood(nc),cpatch%balive(nc) &
,cpatch%broot(nc),cpatch%bsapwooda(nc) &
,cpatch%bsapwoodb(nc),cpatch%balive(nc) &
,cpatch%bstorage(nc))
!------------------------------------------------------------------------------------!

Expand All @@ -1935,14 +1937,13 @@ subroutine plant_patch(csite,np,mzg,pft,density,ntext_soil,green_leaf_factor
call area_indices(cpatch%nplant(nc),cpatch%bleaf(nc),cpatch%bdead(nc) &
,cpatch%balive(nc),cpatch%dbh(nc),cpatch%hite(nc),cpatch%pft(nc) &
,cpatch%sla(nc),cpatch%lai(nc),cpatch%wai(nc),cpatch%crown_area(nc) &
,cpatch%bsapwood(nc))
,cpatch%bsapwooda(nc))


!----- Find the new basal area and above-ground biomass. ----------------------------!
cpatch%basarea(nc) = pio4 * cpatch%dbh(nc) * cpatch%dbh(nc)
cpatch%agb(nc) = ed_biomass(cpatch%bdead(nc),cpatch%balive(nc),cpatch%bleaf(nc) &
,cpatch%pft(nc),cpatch%hite(nc) ,cpatch%bstorage(nc) &
,cpatch%bsapwood(nc))
cpatch%basarea(nc)= pio4 * cpatch%dbh(nc) * cpatch%dbh(nc)
cpatch%agb(nc) = ed_biomass(cpatch%bdead(nc),cpatch%bleaf(nc),cpatch%bsapwooda(nc)&
,cpatch%pft(nc))

cpatch%leaf_temp(nc) = csite%can_temp(np)
cpatch%leaf_temp_pv(nc)=csite%can_temp(np)
Expand All @@ -1954,7 +1955,7 @@ subroutine plant_patch(csite,np,mzg,pft,density,ntext_soil,green_leaf_factor
cpatch%wood_fliq(nc) = 0.0

!----- Because we assigned no water, the internal energy is simply hcap*T. ----------!
call calc_veg_hcap(cpatch%bleaf(nc),cpatch%bdead(nc),cpatch%bsapwood(nc) &
call calc_veg_hcap(cpatch%bleaf(nc),cpatch%bdead(nc),cpatch%bsapwooda(nc) &
,cpatch%nplant(nc),cpatch%pft(nc) &
,cpatch%leaf_hcap(nc),cpatch%wood_hcap(nc))

Expand Down
Loading

0 comments on commit 457dce8

Please sign in to comment.