Skip to content

Commit 6e53f24

Browse files
Merge branch 'rgknox/lnd/fates-l2fr-info'(PR #7542)
FATES plant dynamically regulate fineroots in the presence of nutrient limitations. However it is only appropriate to enable this regulation when the soil is not being supplemented with nutrients. This set of changes makes it so that supplementation status is passed to fates prior to its daily dynamics call, which is ideal since supplementation status can change mid run. Collaborators: @sharma-bharat @glemieux @walkeranthonyp @dmricciuto [non-BFB] Fates Only
2 parents 0f29546 + 2dd1d15 commit 6e53f24

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

components/elm/src/main/elmfates_interfaceMod.F90

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ module ELMFatesInterfaceMod
7676
use elm_varctl , only : fates_history_dimlevel
7777
use elm_varctl , only : use_lch4
7878
use elm_varctl , only : use_century_decomp
79+
use elm_varctl , only : carbon_only,carbonnitrogen_only,carbonphosphorus_only
7980
use elm_varcon , only : tfrz
8081
use elm_varcon , only : spval
8182
use elm_varcon , only : denice
@@ -501,17 +502,6 @@ subroutine ELMFatesGlobals2()
501502
call set_fates_ctrlparms('decomp_method',cval='CTC')
502503
end if
503504

504-
! ELM ALWAYS has nitrogen and phosphorus "on"
505-
! These may be in a non-limiting status (ie when supplements)
506-
! are added, but they are always allocated and cycled non-the less
507-
! FATES may want to interact differently with other models
508-
! that don't even have these arrays allocated.
509-
! FATES also checks that if NO3 is cycled in ELM, then
510-
! any plant affinity parameters are checked.
511-
512-
call set_fates_ctrlparms('nitrogen_spec',ival=1)
513-
call set_fates_ctrlparms('phosphorus_spec',ival=1)
514-
515505
if(is_restart() .or. nsrest == nsrBranch) then
516506
pass_is_restart = 1
517507
else
@@ -1176,7 +1166,7 @@ subroutine dynamics_driv(this, bounds_clump, top_as_inst, &
11761166
integer :: nlevsoil ! number of soil layers at the site
11771167
integer :: ier ! allocate status code
11781168
real(r8) :: s_node, smp_node ! local for relative water content and potential
1179-
1169+
logical :: nitr_suppl,phos_suppl ! Is ELM currently supplementing N or P?
11801170
real(r8), pointer :: lnfm24(:) ! 24-hour averaged lightning data
11811171
real(r8), pointer :: gdp_lf_col(:) ! gdp data
11821172

@@ -1341,8 +1331,26 @@ subroutine dynamics_driv(this, bounds_clump, top_as_inst, &
13411331

13421332
! Nutrient uptake fluxes have been accumulating with each short
13431333
! timestep, here, we unload them from the boundary condition
1344-
! structures into the cohort structures.
1345-
call UnPackNutrientAquisitionBCs(this%fates(nc)%sites, this%fates(nc)%bc_in)
1334+
! structures into the cohort structures. We also tell
1335+
! fates the current supplementation status (used for dynamic rooting)
1336+
1337+
if(carbon_only)then
1338+
nitr_suppl = .true.
1339+
phos_suppl = .true.
1340+
else
1341+
if(carbonnitrogen_only)then
1342+
phos_suppl = .true.
1343+
else
1344+
phos_suppl = .false.
1345+
end if
1346+
if(carbonphosphorus_only)then
1347+
nitr_suppl = .true.
1348+
else
1349+
nitr_suppl = .false.
1350+
end if
1351+
end if
1352+
1353+
call UnPackNutrientAquisitionBCs(this%fates(nc)%sites, this%fates(nc)%bc_in, nitr_suppl, phos_suppl)
13461354

13471355
! Distribute any seeds from neighboring gridcells into the current gridcell
13481356
! Global seed availability array populated by WrapGlobalSeedDispersal call

0 commit comments

Comments
 (0)