Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
10 changes: 10 additions & 0 deletions cime_config/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@
)
},

"e3sm_land_mytests" : {
"share" : True,
"time" : "0:45:00",
"tests" : (
"ERS.ELM_USRDAT.I1850CNPRDCTCBC.elm-arcticpft_codetest_I1850CNPRDCTCBC",
"ERS.ELM_USRDAT.I1850CNPRDCTCBC.elm-arcticpft_onsetgdd_I1850CNPRDCTCBC"
)
},

"e3sm_land_developer" : {
"share" : True,
Expand All @@ -93,6 +101,8 @@
"SMS_Ly2_P1x1.1x1_smallvilleIA.IELMCNCROP.elm-per_crop",
"SMS.r05_r05.IELM.elm-topounit",
"ERS.ELM_USRDAT.I1850ELM.elm-usrdat",
"ERS.ELM_USRDAT.I1850CNPRDCTCBC.elm-arcticpft_codetest_I1850CNPRDCTCBC",
"ERS.ELM_USRDAT.I1850CNPRDCTCBC.elm-arcticpft_onsetgdd_I1850CNPRDCTCBC",
"ERS.f09_f09.IELM.elm-lnd_rof_2way",
"ERS.r05_r05.IELM.elm-V2_ELM_MOSART_features"
)
Expand Down
9 changes: 9 additions & 0 deletions components/elm/bld/namelist_files/namelist_definition.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1801,6 +1801,15 @@ Specifies the method for decomposing CLM grids across processors.
pflotran file prefix.
</entry>

<!-- ======================================================================================== -->
<!-- Namelist options related to plant phenology -->
<!-- ======================================================================================== -->

<entry id="onset_gdd_extension" type="logical" category="default_settings"
group="elm_inparm" valid_values="">
Runtime flag to turn on/off stress_deciduous PFT's onset gdd summation end from summer solstice to offset starting.
</entry>

<!-- ======================================================================================== -->
<!-- Namelist options related to Variably Saturated Flow Model (VSFM) -->
<!-- ======================================================================================== -->
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
./xmlchange LND_DOMAIN_FILE=domain_42_FLUXNETSITES_simyr1850_c170912.nc
./xmlchange ATM_DOMAIN_FILE=domain_42_FLUXNETSITES_simyr1850_c170912.nc
./xmlchange LND_DOMAIN_PATH="\$DIN_LOC_ROOT/share/domains/domain.clm"
./xmlchange ATM_DOMAIN_PATH="\$DIN_LOC_ROOT/share/domains/domain.clm"
./xmlchange DATM_MODE=CLM1PT
./xmlchange DATM_CLMNCEP_YR_START=1980
./xmlchange DATM_CLMNCEP_YR_END=2015
./xmlchange ELM_USRDAT_NAME=42_FLUXNETSITES
./xmlchange NTASKS=6
echo "
taxmode = 'cycle','extend','extend'
">>user_nl_datm
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
fsurdat = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/surfdata_42_FLUXNETSITES_simyr1850_c170912.nc'
!
! below is a new physioloy file example, from Sulman et al 2021,
! by adding a few parameters into default (clm_params_c211124.nc) as following:
! (1) pft-level controls of Nfixation by individual plant NPP: Nfix_NPP_c1, Nfix_NPP_c2
! (2) MR reduction during dormant seasons: dormant_mr_factor, domant_mr_temp
! (3) pft-level 'lwtop_ann' for live woody tissue turnover: lwtop_pfts
! (4) plant rhizomes added as part of roots for all PFTs incl. graminoids: rhizome_long
!
! but, all with default values (i.e. won't change simualtion results from default)
! NOTE: have to copy this file here to $DIN_LOC_ROOT/lnd/clm2/paramdata/ in your system.
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/clm_params_c211124arctic.nc'
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
./xmlchange LND_DOMAIN_FILE=domain_42_FLUXNETSITES_simyr1850_c170912.nc
./xmlchange ATM_DOMAIN_FILE=domain_42_FLUXNETSITES_simyr1850_c170912.nc
./xmlchange LND_DOMAIN_PATH="\$DIN_LOC_ROOT/share/domains/domain.clm"
./xmlchange ATM_DOMAIN_PATH="\$DIN_LOC_ROOT/share/domains/domain.clm"
./xmlchange DATM_MODE=CLM1PT
./xmlchange DATM_CLMNCEP_YR_START=1980
./xmlchange DATM_CLMNCEP_YR_END=2015
./xmlchange ELM_USRDAT_NAME=42_FLUXNETSITES
./xmlchange NTASKS=6
echo "
taxmode = 'cycle','extend','extend'
">>user_nl_datm
# a long run of test for onset_gdd summation ending in arctic,
# but have to xmlchange the following after ./case.setup called
# ./xmlchange --file env_test.xml STOP_N=200
# ./xmlchange --file env_test.xml STOP_OPTION=nyears
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
fsurdat = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/surfdata_42_FLUXNETSITES_simyr1850_c170912.nc'
!
! below is a new physioloy file example, from Sulman et al 2021,
! by adding a few parameters into default (clm_params_c211124.nc) as following:
! (1) pft-level controls of Nfixation by individual plant NPP: Nfix_NPP_c1, Nfix_NPP_c2
! (2) MR reduction during dormant seasons: dormant_mr_factor, domant_mr_temp
! (3) pft-level 'lwtop_ann' for live woody tissue turnover: lwtop_pfts
! (4) plant rhizomes added as part of roots for all PFTs incl. graminoids: rhizome_long
!
! but, all with default values (i.e. won't change simualtion results from default)
! NOTE: have to copy this file here to $DIN_LOC_ROOT/lnd/clm2/paramdata/ in your system, if not yet.
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/clm_params_c211124arctic.nc'
!
! and also need to turn on a namelist option.
! use_onset_gdd_ext = .true.

21 changes: 18 additions & 3 deletions components/elm/src/biogeochem/AllocationMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -832,9 +832,12 @@ subroutine Allocation1_PlantNPDemand (bounds, num_soilc, filter_soilc, num_soilp
(f3*(1._r8-f4)*(1._r8+f2))/cpdw

else
c_allometry(p) = 1._r8+g1+f1+f1*g1
c_allometry(p) = 1._r8+g1+f1+f1*g1+f3+f3*g1 ! B Sulman: Let graminoids allocate rhizomes (all livecroot) using stem_leaf parameter
n_allometry(p) = 1._r8/cnl + f1/cnfr
if(cnlw>0) n_allometry(p) = n_allometry(p) + f3/cnlw ! Rhizomes
p_allometry(p) = 1._r8/cpl + f1/cpfr
if(cplw>0) p_allometry(p) = p_allometry(p) + f3/cplw ! Rhizomes

end if
plant_ndemand(p) = availc(p)*(n_allometry(p)/c_allometry(p))
plant_pdemand(p) = availc(p)*(p_allometry(p)/c_allometry(p))
Expand Down Expand Up @@ -2589,6 +2592,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
cpool_to_livecrootc_storage(p) = nlc * f2 * f3 * f4 * (1._r8 - fcur)
cpool_to_deadcrootc(p) = nlc * f2 * f3 * (1._r8 - f4) * fcur
cpool_to_deadcrootc_storage(p) = nlc * f2 * f3 * (1._r8 - f4) * (1._r8 - fcur)
else
! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman)
cpool_to_livecrootc(p) = nlc * f3 * fcur
cpool_to_livecrootc_storage(p) = nlc * f3 * (1._r8 - fcur)
end if
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
cpool_to_livestemc(p) = nlc * f3 * f4 * fcur
Expand Down Expand Up @@ -2642,6 +2649,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
npool_to_livecrootn_storage(p) = (nlc * f2 * f3 * f4 / cnlw) * (1._r8 - fcur)
npool_to_deadcrootn(p) = (nlc * f2 * f3 * (1._r8 - f4) / cndw) * fcur
npool_to_deadcrootn_storage(p) = (nlc * f2 * f3 * (1._r8 - f4) / cndw) * (1._r8 - fcur)
elseif (cnlw > 0.0_r8) then
! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman)
npool_to_livecrootn(p) = (nlc * f3 / cnlw ) * fcur
npool_to_livecrootn_storage(p) = (nlc * f3 / cnlw ) * (1._r8 - fcur)
end if
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
cng = graincn(ivt(p))
Expand Down Expand Up @@ -2686,6 +2697,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
ppool_to_livecrootp_storage(p) = (nlc * f2 * f3 * f4 / cplw) * (1._r8 -fcur)
ppool_to_deadcrootp(p) = (nlc * f2 * f3 * (1._r8 - f4) / cpdw)* fcur
ppool_to_deadcrootp_storage(p) = (nlc * f2 * f3 * (1._r8 - f4) / cpdw)* (1._r8 - fcur)
elseif (cplw > 0.0_r8) then
! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman)
ppool_to_livecrootp(p) = (nlc * f3 / cplw ) * fcur
ppool_to_livecrootp_storage(p) = (nlc * f3 / cplw ) * (1._r8 - fcur)
end if
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
cpg = graincp(ivt(p))
Expand All @@ -2711,10 +2726,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
! growth is assigned here.

gresp_storage = cpool_to_leafc_storage(p) + cpool_to_frootc_storage(p)
if (woody(ivt(p)) == 1._r8) then
gresp_storage = gresp_storage + cpool_to_livecrootc_storage(p) !Graminoid rhizomes (B Sulman)
if (woody(ivt(p)) >= 1.0_r8) then
gresp_storage = gresp_storage + cpool_to_livestemc_storage(p)
gresp_storage = gresp_storage + cpool_to_deadstemc_storage(p)
gresp_storage = gresp_storage + cpool_to_livecrootc_storage(p)
gresp_storage = gresp_storage + cpool_to_deadcrootc_storage(p)
end if
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
Expand Down
15 changes: 15 additions & 0 deletions components/elm/src/biogeochem/CarbonIsoFluxMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@ subroutine CarbonIsoFlux1(num_soilc, filter_soilc, num_soilp, filter_soilp, &
isoveg_cf%livecrootc_to_deadcrootc , veg_cf%livecrootc_to_deadcrootc, &
isoveg_cs%livecrootc , veg_cs%livecrootc, &
num_soilp , filter_soilp, 1._r8, 0, isotope)

call CarbonIsoFluxCalc(&
isoveg_cf%livecrootc_to_litter , veg_cf%livecrootc_to_litter, &
isoveg_cs%livecrootc , veg_cs%livecrootc, &
num_soilp , filter_soilp, 1._r8, 0, isotope)

call CarbonIsoFluxCalc(&
isoveg_cf%leaf_curmr , veg_cf%leaf_curmr, &
Expand Down Expand Up @@ -937,9 +942,11 @@ subroutine CNCIsoLitterToColumn (num_soilc, filter_soilc, &

leaf_prof => cnstate_vars%leaf_prof_patch , & ! Input: [real(r8) (:,:) ] (1/m) profile of leaves
froot_prof => cnstate_vars%froot_prof_patch , & ! Input: [real(r8) (:,:) ] (1/m) profile of fine roots
croot_prof => cnstate_vars%croot_prof_patch , & ! Input: [real(r8) (:,:) ] (1/m) profile of coarse roots

leafc_to_litter => veg_cf%leafc_to_litter , & ! Input: [real(r8) (:) ]
frootc_to_litter => veg_cf%frootc_to_litter , & ! Input: [real(r8) (:) ]
livecrootc_to_litter => veg_cf%livecrootc_to_litter , & ! Input: [real(r8) (:) ]
phenology_c_to_litr_met_c => col_cf%phenology_c_to_litr_met_c , & ! InOut: [real(r8) (:,:) ] C fluxes associated with phenology (litterfall and crop) to litter metabolic pool (gC/m3/s)
phenology_c_to_litr_cel_c => col_cf%phenology_c_to_litr_cel_c , & ! InOut: [real(r8) (:,:) ] C fluxes associated with phenology (litterfall and crop) to litter cellulose pool (gC/m3/s)
phenology_c_to_litr_lig_c => col_cf%phenology_c_to_litr_lig_c & ! InOut: [real(r8) (:,:) ] C fluxes associated with phenology (litterfall and crop) to litter lignin pool (gC/m3/s)
Expand Down Expand Up @@ -968,6 +975,14 @@ subroutine CNCIsoLitterToColumn (num_soilc, filter_soilc, &
+ frootc_to_litter(p) * fr_fcel(ivt(p)) * wtcol(p) * froot_prof(p,j)
phenology_c_to_litr_lig_c(c,j) = phenology_c_to_litr_lig_c(c,j) &
+ frootc_to_litter(p) * fr_flig(ivt(p)) * wtcol(p) * froot_prof(p,j)

! nonwoody rhizome litter carbon fluxes
phenology_c_to_litr_met_c(c,j) = phenology_c_to_litr_met_c(c,j) &
+ livecrootc_to_litter(p) * fr_flab(ivt(p)) * wtcol(p) * croot_prof(p,j)
phenology_c_to_litr_cel_c(c,j) = phenology_c_to_litr_cel_c(c,j) &
+ livecrootc_to_litter(p) * fr_fcel(ivt(p)) * wtcol(p) * croot_prof(p,j)
phenology_c_to_litr_lig_c(c,j) = phenology_c_to_litr_lig_c(c,j) &
+ livecrootc_to_litter(p) * fr_flig(ivt(p)) * wtcol(p) * croot_prof(p,j)
end if
end if

Expand Down
Loading