Skip to content

Commit 3fe643a

Browse files
authored
Merge pull request #2365 from wwieder/mimics_NEON_Derecho
Add litterfall fluxes that bypass litter pools, directly contributing to SOM + a few other mimics updates
2 parents 8cc1d42 + 78371a1 commit 3fe643a

File tree

10 files changed

+137
-23
lines changed

10 files changed

+137
-23
lines changed

bld/namelist_files/namelist_defaults_ctsm.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -524,9 +524,9 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
524524
<!-- The default filenames are given relative to the root directory
525525
for the CLM2 data in the CESM distribution -->
526526
<!-- Plant function types (relative to {csmdata}) -->
527-
<paramfile phys="clm6_0" >lnd/clm2/paramdata/ctsm60_params_nfix.c241119.nc</paramfile>
528-
<paramfile phys="clm5_0" >lnd/clm2/paramdata/clm50_params_nfix.c241119.nc</paramfile>
529-
<paramfile phys="clm4_5" >lnd/clm2/paramdata/clm45_params_nfix.c241119.nc</paramfile>
527+
<paramfile phys="clm6_0" >lnd/clm2/paramdata/ctsm60_params.c250311.nc</paramfile>
528+
<paramfile phys="clm5_0" >lnd/clm2/paramdata/clm50_params.c250311.nc</paramfile>
529+
<paramfile phys="clm4_5" >lnd/clm2/paramdata/clm45_params.c250311.nc</paramfile>
530530

531531
<!-- ================================================================== -->
532532
<!-- FATES default parameter file -->
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_ciso_cwd_hr_params_nfix.c241119.nc'
1+
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_ciso_cwd_hr_params.c250311.nc'
22
hist_fincl1 = 'CWDC_HR','C13_CWDC_HR','C14_CWDC_HR','CWD_HR_L2','CWD_HR_L2_vr','CWD_HR_L3','CWD_HR_L3_vr'
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
use_soil_matrixcn = .true.
2-
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_params_cn30.c241119.nc'
2+
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_params_cn30.c250311.nc'

doc/ChangeLog

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,82 @@
11
===============================================================
2+
Tag name: ctsm5.3.033
3+
Originator(s): wwieder, slevis (Will Wieder, Sam Levis, UCAR/TSS)
4+
Date: Wed 19 Mar 2025 02:43:55 PM MDT
5+
One-line Summary: Add new mimics_fi param = frac of litter inputs bypassing litter pools
6+
7+
Purpose and description of changes
8+
----------------------------------
9+
10+
Summary from the PR: removes NPP control on turnover
11+
fixes density dependent control on turnover
12+
adds litterfall fluxes that bypass litter pools, directly contributing to SOM
13+
14+
This PR also addresses the issue of varying microbial turnover with depth.
15+
16+
Significant changes to scientifically-supported configurations
17+
--------------------------------------------------------------
18+
19+
Does this tag change answers significantly for any of the following physics configurations?
20+
(Details of any changes will be given in the "Answer changes" section below.)
21+
22+
[Put an [X] in the box for any configuration with significant answer changes.]
23+
24+
[ ] clm6_0
25+
26+
[ ] clm5_0
27+
28+
[ ] ctsm5_0-nwp
29+
30+
[ ] clm4_5
31+
32+
33+
Bugs fixed
34+
----------
35+
List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
36+
Fixes #2361 MIMICS todo list
37+
Fixes #2248 Should microbial turnover vary with depth in MIMICS?
38+
39+
Notes of particular relevance for users
40+
---------------------------------------
41+
Changes made to namelist defaults (e.g., changed parameter values):
42+
Updated values in the default mimics parameters
43+
44+
Changes to the datasets (e.g., parameter, surface or initial files):
45+
New parameter files
46+
47+
Notes of particular relevance for developers:
48+
---------------------------------------------
49+
50+
Testing summary:
51+
----------------
52+
[PASS means all tests PASS; OK means tests PASS other than expected fails.]
53+
54+
regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
55+
56+
derecho ----- OK
57+
izumi ------- OK
58+
59+
Answer changes
60+
--------------
61+
62+
Changes answers relative to baseline: Yes
63+
64+
Summarize any changes to answers, i.e.,
65+
- what code configurations: MIMICS
66+
- what platforms/compilers: All
67+
- nature of change: Larger than roundoff/same climate
68+
69+
Soil C stocks will change in mimics cases with these code and parameter updates.
70+
71+
Also, three ciso_cwd_hr tests show diffs because the most recent previous ciso paramfile had roundoff diffs from the rest of the paramfiles for no reason that wwieder and slevis could identify. The new ciso paramfile does not have such diffs.
72+
73+
Other details
74+
-------------
75+
Pull Requests that document the changes (include PR ids):
76+
https://github.com/ESCOMP/ctsm/pull/2365 MIMICS updates
77+
78+
===============================================================
79+
===============================================================
280
Tag name: ctsm5.3.032
381
Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
482
Date: Mon 17 Mar 2025 09:49:08 AM MDT

doc/ChangeSum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
Tag Who Date Summary
22
============================================================================================================================
3+
ctsm5.3.033 multiple 03/19/2025 Add new mimics_fi param = frac of litter inputs bypassing litter pools
34
ctsm5.3.032 slevis 03/17/2025 Add option to use CRUJRA2024 with clm6 and clm5
45
ctsm5.3.031 slevis 03/13/2025 Merge b4b-dev
56
ctsm5.3.030 samrabin 03/07/2025 Fix FATES branch runs

src/biogeochem/CNCStateUpdate1Mod.F90

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module CNCStateUpdate1Mod
99
use clm_varpar , only : ndecomp_cascade_transitions, nlevdecomp
1010
use clm_time_manager , only : get_step_size_real
1111
use clm_varpar , only : i_litr_min, i_litr_max, i_cwd
12+
use clm_varpar , only : i_met_lit, i_str_lit, i_phys_som, i_chem_som
1213
use pftconMod , only : npcropmin, nc3crop, pftcon
1314
use abortutils , only : endrun
1415
use decompMod , only : bounds_type
@@ -17,7 +18,7 @@ module CNCStateUpdate1Mod
1718
use CropType , only : crop_type
1819
use CropReprPoolsMod , only : nrepr, repr_grain_min, repr_grain_max
1920
use CropReprPoolsMod , only : repr_structure_min, repr_structure_max
20-
use SoilBiogeochemDecompCascadeConType , only : decomp_cascade_con, use_soil_matrixcn
21+
use SoilBiogeochemDecompCascadeConType , only : decomp_cascade_con, decomp_method, mimics_decomp, use_soil_matrixcn
2122
use SoilBiogeochemCarbonFluxType , only : soilbiogeochem_carbonflux_type
2223
use SoilBiogeochemCarbonStateType , only : soilbiogeochem_carbonstate_type
2324
use PatchType , only : patch
@@ -170,6 +171,7 @@ subroutine CStateUpdate1( num_soilc, filter_soilc, num_soilp, filter_soilp, &
170171
associate( &
171172
ivt => patch%itype , & ! Input: [integer (:) ] patch vegetation type
172173

174+
mimics_fi => pftcon%mimics_fi , & ! Input: MIMICS parameter fi
173175
woody => pftcon%woody , & ! Input: binary flag for woody lifeform (1=woody, 0=not woody)
174176

175177
cascade_donor_pool => decomp_cascade_con%cascade_donor_pool , & ! Input: [integer (:) ] which pool is C taken from for a given decomposition step
@@ -206,10 +208,21 @@ subroutine CStateUpdate1( num_soilc, filter_soilc, num_soilp, filter_soilp, &
206208
!
207209
if (.not. use_soil_matrixcn) then
208210
! phenology and dynamic land cover fluxes
209-
do i = i_litr_min, i_litr_max
210-
cf_soil%decomp_cpools_sourcesink_col(c,j,i) = &
211-
cf_veg%phenology_c_to_litr_c_col(c,j,i) * dt
212-
end do
211+
if (decomp_method == mimics_decomp) then
212+
do i = i_litr_min, i_litr_max ! in MIMICS these are 1 and 2
213+
cf_soil%decomp_cpools_sourcesink_col(c,j,i) = (1 - mimics_fi(i)) * &
214+
cf_veg%phenology_c_to_litr_c_col(c,j,i) * dt
215+
end do
216+
cf_soil%decomp_cpools_sourcesink_col(c,j,i_phys_som) = mimics_fi(1) * &
217+
cf_veg%phenology_c_to_litr_c_col(c,j,i_met_lit) * dt
218+
cf_soil%decomp_cpools_sourcesink_col(c,j,i_chem_som) = mimics_fi(2) * &
219+
cf_veg%phenology_c_to_litr_c_col(c,j,i_str_lit) * dt
220+
else
221+
do i = i_litr_min, i_litr_max
222+
cf_soil%decomp_cpools_sourcesink_col(c,j,i) = &
223+
cf_veg%phenology_c_to_litr_c_col(c,j,i) * dt
224+
end do
225+
end if
213226

214227
! NOTE(wjs, 2017-01-02) This used to be set to a non-zero value, but the
215228
! terms have been moved to CStateUpdateDynPatch. I think this is zeroed every

src/biogeochem/CNNStateUpdate1Mod.F90

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ module CNNStateUpdate1Mod
1212
use clm_time_manager , only : get_step_size_real
1313
use clm_varpar , only : nlevdecomp
1414
use clm_varpar , only : i_litr_min, i_litr_max, i_cwd
15+
use clm_varpar , only : i_met_lit, i_str_lit, i_phys_som, i_chem_som
1516
use clm_varctl , only : iulog, use_nitrif_denitrif
16-
use SoilBiogeochemDecompCascadeConType, only : use_soil_matrixcn
17+
use SoilBiogeochemDecompCascadeConType, only : decomp_method, mimics_decomp, use_soil_matrixcn
1718
use CNSharedParamsMod , only : use_matrixcn
1819
use clm_varcon , only : nitrif_n2o_loss_frac
1920
use pftconMod , only : npcropmin, pftcon
@@ -129,6 +130,7 @@ subroutine NStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp, &
129130
associate( &
130131
ivt => patch%itype , & ! Input: [integer (:) ] patch vegetation type
131132

133+
mimics_fi => pftcon%mimics_fi , & ! Input: MIMICS parameter fi
132134
woody => pftcon%woody , & ! Input: binary flag for woody lifeform (1=woody, 0=not woody)
133135

134136
nf_veg => cnveg_nitrogenflux_inst , & ! Input:
@@ -163,10 +165,21 @@ subroutine NStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp, &
163165
! State update without the matrix solution
164166
!
165167
if (.not. use_soil_matrixcn) then ! to be consistent with C
166-
do i = i_litr_min, i_litr_max
167-
nf_soil%decomp_npools_sourcesink_col(c,j,i) = &
168-
nf_veg%phenology_n_to_litr_n_col(c,j,i) * dt
169-
end do
168+
if (decomp_method == mimics_decomp) then
169+
do i = i_litr_min, i_litr_max ! in MIMICS these are 1 and 2
170+
nf_soil%decomp_npools_sourcesink_col(c,j,i) = (1 - mimics_fi(i)) * &
171+
nf_veg%phenology_n_to_litr_n_col(c,j,i) * dt
172+
end do
173+
nf_soil%decomp_npools_sourcesink_col(c,j,i_phys_som) = mimics_fi(1) * &
174+
nf_veg%phenology_n_to_litr_n_col(c,j,i_met_lit) * dt
175+
nf_soil%decomp_npools_sourcesink_col(c,j,i_chem_som) = mimics_fi(2) * &
176+
nf_veg%phenology_n_to_litr_n_col(c,j,i_str_lit) * dt
177+
else
178+
do i = i_litr_min, i_litr_max
179+
nf_soil%decomp_npools_sourcesink_col(c,j,i) = &
180+
nf_veg%phenology_n_to_litr_n_col(c,j,i) * dt
181+
end do
182+
end if
170183

171184
! NOTE(wjs, 2017-01-02) This used to be set to a non-zero value, but the
172185
! terms have been moved to CStateUpdateDynPatch. I think this is zeroed every

src/main/clm_varpar.F90

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ module clm_varpar
8282
integer, public :: i_litr_min = -9 ! min index of litter pools; overwritten in SoilBiogeochemDecompCascade*Mod
8383
integer, public :: i_litr_max = -9 ! max index of litter pools; overwritten in SoilBiogeochemDecompCascade*Mod
8484
integer, public :: i_met_lit = -9 ! index of metabolic litter pool; overwritten in SoilBiogeochemDecompCascade*Mod
85+
integer, public :: i_str_lit = -9 ! index of structural litter pool; overwritten in SoilBiogeochemDecompCascade*Mod
86+
integer, public :: i_phys_som = -9 ! index of physically protected Soil Organic Matter (SOM); overwritten in SoilBiogeochemDecompCascade*Mod
87+
integer, public :: i_chem_som = -9 ! index of chemically protected Soil Organic Matter (SOM); overwritten in SoilBiogeochemDecompCascade*Mod
8588
integer, public :: i_cop_mic = -9 ! index of copiotrophic microbial pool; overwritten in SoilBiogeochemDecompCascade*Mod
8689
integer, public :: i_oli_mic = -9 ! index of oligotrophic microbial pool; overwritten in SoilBiogeochemDecompCascade*Mod
8790
integer, public :: i_cwd = -9 ! index of cwd pool; overwritten in SoilBiogeochemDecompCascade*Mod

src/main/pftconMod.F90

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ module pftconMod
165165
real(r8), allocatable :: crit_onset_gdd_sf(:)! scale factor for crit_onset_gdd
166166
real(r8), allocatable :: ndays_on(:) ! number of days to complete leaf onset
167167

168+
! MIMICS
169+
real(r8), allocatable :: mimics_fi(:)
170+
168171
! crop
169172

170173
! These arrays give information about the merge of unused crop types to the types CLM
@@ -504,6 +507,7 @@ subroutine InitAllocate (this)
504507
allocate( this%taper (0:mxpft) )
505508
allocate( this%rstem_per_dbh (0:mxpft) )
506509
allocate( this%wood_density (0:mxpft) )
510+
allocate( this%mimics_fi(2) )
507511
allocate( this%crit_onset_gdd_sf (0:mxpft) )
508512
allocate( this%ndays_on (0:mxpft) )
509513

@@ -1095,6 +1099,9 @@ subroutine InitRead(this)
10951099
!
10961100
! clm 5 nitrogen variables
10971101
!
1102+
call ncd_io('mimics_fi',this%mimics_fi, 'read', ncid, readvar=readv)
1103+
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))
1104+
10981105
if (use_flexibleCN) then
10991106
call ncd_io('i_vcad', this%i_vcad, 'read', ncid, readvar=readv)
11001107
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))
@@ -1132,6 +1139,7 @@ subroutine InitRead(this)
11321139
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))
11331140
call ncd_io('wood_density',this%wood_density, 'read', ncid, readvar=readv)
11341141
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))
1142+
11351143
else
11361144
this%dbh = 0.0_r8
11371145
this%fbw = 0.0_r8
@@ -1594,6 +1602,7 @@ subroutine Clean(this)
15941602
deallocate( this%rstem_per_dbh)
15951603
deallocate( this%wood_density)
15961604
deallocate( this%taper)
1605+
deallocate( this%mimics_fi)
15971606
deallocate( this%crit_onset_gdd_sf)
15981607
deallocate( this%ndays_on)
15991608
end subroutine Clean

src/soilbiogeochem/SoilBiogeochemDecompCascadeMIMICSMod.F90

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module SoilBiogeochemDecompCascadeMIMICSMod
1010
use shr_const_mod , only : SHR_CONST_TKFRZ
1111
use shr_log_mod , only : errMsg => shr_log_errMsg
1212
use clm_varpar , only : nlevdecomp, ndecomp_pools_max
13-
use clm_varpar , only : i_met_lit, i_cop_mic, i_oli_mic, i_cwd
13+
use clm_varpar , only : i_phys_som, i_chem_som, i_str_lit, i_met_lit, i_cop_mic, i_oli_mic, i_cwd
1414
use clm_varpar , only : i_litr_min, i_litr_max, i_cwdl2
1515
use clm_varctl , only : iulog, spinup_state, anoxia, use_lch4, use_fates
1616
use clm_varcon , only : zsoi
@@ -48,10 +48,7 @@ module SoilBiogeochemDecompCascadeMIMICSMod
4848
real(r8), private, allocatable :: fphys_m1(:,:)
4949
real(r8), private, allocatable :: fphys_m2(:,:)
5050
real(r8), private, allocatable :: p_scalar(:,:)
51-
integer, private :: i_phys_som ! index of physically protected Soil Organic Matter (SOM)
52-
integer, private :: i_chem_som ! index of chemically protected SOM
5351
integer, private :: i_avl_som ! index of available (aka active) SOM
54-
integer, private :: i_str_lit ! index of structural litter pool
5552
integer, private :: i_l1m1 ! indices of transitions, eg l1m1: litter 1 -> first microbial pool
5653
integer, private :: i_l1m2
5754
integer, private :: i_l2m1
@@ -1293,14 +1290,14 @@ subroutine decomp_rates_mimics(bounds, num_bgc_soilc, filter_bgc_soilc, &
12931290
decomp_k(c,j,i_chem_som) = (term_1 + term_2) * w_d_o_scalars
12941291

12951292
! Currently, mimics_densdep = 1 so as to have no effect
1296-
decomp_k(c,j,i_cop_mic) = tau_m1 * &
1297-
m1_conc**(mimics_densdep - 1.0_r8) * w_d_o_scalars
1293+
decomp_k(c,j,i_cop_mic) = tau_m1 * m1_conc**(mimics_densdep)
1294+
12981295
favl = min(1.0_r8, max(0.0_r8, 1.0_r8 - fphys_m1(c,j) - fchem_m1))
12991296
pathfrac_decomp_cascade(c,j,i_m1s1) = favl
13001297
pathfrac_decomp_cascade(c,j,i_m1s2) = fchem_m1
13011298

1302-
decomp_k(c,j,i_oli_mic) = tau_m2 * &
1303-
m2_conc**(mimics_densdep - 1.0_r8) * w_d_o_scalars
1299+
decomp_k(c,j,i_oli_mic) = tau_m2 * m2_conc**(mimics_densdep)
1300+
13041301
favl = min(1.0_r8, max(0.0_r8, 1.0_r8 - fphys_m2(c,j) - fchem_m2))
13051302
pathfrac_decomp_cascade(c,j,i_m2s1) = favl
13061303
pathfrac_decomp_cascade(c,j,i_m2s2) = fchem_m2

0 commit comments

Comments
 (0)