Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix water balance error for grass when use FATES-Hydro #910

Merged
merged 6 commits into from
Mar 8, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions biogeochem/EDPhysiologyMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -815,8 +815,8 @@ subroutine phenology( currentSite, bc_in )
endif
!
! accumulate the GDD using daily mean temperatures
! Don't accumulate GDD during the growing season (that wouldn't make sense)
if (temp_in_C .gt. 0._r8 .and. currentSite%cstatus == phen_cstat_iscold) then
! Don't accumulate GDD during the growing season (that wouldn't make sense) Junyan modified to adding nevercold
if (temp_in_C .gt. 0._r8 .and. (currentSite%cstatus == phen_cstat_iscold .or. currentSite%cstatus == phen_cstat_nevercold)) then
glemieux marked this conversation as resolved.
Show resolved Hide resolved
currentSite%grow_deg_days = currentSite%grow_deg_days + temp_in_C
endif

Expand Down Expand Up @@ -910,9 +910,10 @@ subroutine phenology( currentSite, bc_in )
! and thus %nchilldays will never go from zero to 1. The following logic
! when coupled with this fact will essentially prevent cold-deciduous
! plants from re-emerging in areas without at least some cold days

if( (currentSite%cstatus == phen_cstat_notcold) .and. &
(dayssincecleafoff > 400)) then ! remove leaves after a whole year
(dayssincecleafoff > 40000)) then ! remove leaves after a whole year,
!Junyan change dayssincecleafoff > 400 to 40000 to disable this function, so the condition will never be met
glemieux marked this conversation as resolved.
Show resolved Hide resolved
! when there is no 'off' period.
currentSite%grow_deg_days = 0._r8

Expand Down
17 changes: 14 additions & 3 deletions biogeophys/FatesPlantHydraulicsMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -852,12 +852,15 @@ subroutine UpdatePlantHydrLenVol(ccohort,site_hydr)
integer :: nlevrhiz ! number of rhizosphere levels
real(r8) :: dbh ! the dbh of current cohort [cm]
real(r8) :: z_fr ! rooting depth of a cohort [cm]

real(r8) :: v_leaf_donate(1:n_hypool_leaf) ! the volume that leaf will donate to xylem

! We allow the transporting root to donate a fraction of its volume to the absorbing
! roots to help mitigate numerical issues due to very small volumes. This is the
! fraction the transporting roots donate to those layers
real(r8), parameter :: t2aroot_vol_donate_frac = 0.65_r8

real(r8), parameter :: l2sap_vol_donate_frac = 0.5_r8 ! Junyan added


real(r8), parameter :: min_leaf_frac = 0.1_r8 ! Fraction of maximum leaf carbon that
! we set as our lower cap on leaf volume
real(r8), parameter :: min_trim = 0.1_r8 ! The lower cap on trimming function used
Expand Down Expand Up @@ -934,8 +937,16 @@ subroutine UpdatePlantHydrLenVol(ccohort,site_hydr)
crown_depth = min(ccohort%hite,0.1_r8)
z_stem = ccohort%hite - crown_depth
v_sapwood = a_sapwood * z_stem ! + 0.333_r8*a_sapwood*crown_depth
ccohort_hydr%v_ag(n_hypool_leaf+1:n_hypool_ag) = v_sapwood / n_hypool_stem

! Junyan changed the following code to calculate the above ground node volume
! foliage donate half of its water volume to xylem for grass
if (prt_params%woody(ft)==1) then
ccohort_hydr%v_ag(n_hypool_leaf+1:n_hypool_ag) = v_sapwood / n_hypool_stem ! original code
else
v_leaf_donate(1:n_hypool_leaf) = ccohort_hydr%v_ag(1:n_hypool_leaf) * l2sap_vol_donate_frac
ccohort_hydr%v_ag(1:n_hypool_leaf) = ccohort_hydr%v_ag(1:n_hypool_leaf) - v_leaf_donate(1:n_hypool_leaf)
ccohort_hydr%v_ag(n_hypool_leaf+1:n_hypool_ag) = (v_sapwood + sum(v_leaf_donate(1:n_hypool_leaf))) / n_hypool_stem
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, this makes sense

end if

! Determine belowground biomass as a function of total (sapwood, heartwood,
! leaf, fine root) biomass then subtract out the fine root biomass to get
Expand Down
2 changes: 1 addition & 1 deletion main/FatesHydraulicsMemMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ module FatesHydraulicsMemMod
integer, parameter, public :: n_hypool_stem = 1
integer, parameter, public :: n_hypool_troot = 1 ! CANNOT BE CHANGED
integer, parameter, public :: n_hypool_aroot = 1 ! THIS IS "PER-SOIL-LAYER"
integer, parameter, public :: nshell = 5
integer, parameter, public :: nshell = 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this change too, sensitivity analysis I've done have shown that we get small/subtle differences when we use multiple versus a single shell.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checked in via email with @xuchongang and @bchristo and they both blessed this change as well


! number of aboveground plant water storage nodes
integer, parameter, public :: n_hypool_ag = n_hypool_leaf+n_hypool_stem
Expand Down
4 changes: 2 additions & 2 deletions parameter_files/fates_params_default.cdl
Original file line number Diff line number Diff line change
Expand Up @@ -769,7 +769,7 @@ data:
fates_history_sizeclass_bin_edges = 0, 5, 10, 15, 20, 30, 40, 50, 60, 70,
80, 90, 100 ;

fates_hydr_htftype_node = 1, 1, 1, 1 ;
fates_hydr_htftype_node = 2, 2, 2, 2 ;
glemieux marked this conversation as resolved.
Show resolved Hide resolved

fates_prt_organ_id = 1, 2, 3, 6 ;

Expand Down Expand Up @@ -1445,7 +1445,7 @@ data:

fates_maintresp_model = 1 ;

fates_mort_disturb_frac = 1 ;
glemieux marked this conversation as resolved.
Show resolved Hide resolved
fates_mort_disturb_frac = 0 ;

fates_mort_understorey_death = 0.55983 ;

Expand Down