Skip to content
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
26eab1f
NEONv3 updates
wwieder Jan 9, 2024
c3d752b
turn on mimics v1
wwieder Jan 30, 2024
3a9eab5
more mimics mods
wwieder Feb 1, 2024
a004eb6
longer runs on cpu queue
wwieder Feb 1, 2024
d2f770a
Merge remote-tracking branch 'origin/master' into mimics_NEON_Derecho
wwieder Feb 1, 2024
34d33a4
start removing fW from tau calculation & using beta
wwieder Feb 9, 2024
a8c322c
remove w_scalar from tau, correct beta
wwieder Feb 10, 2024
3380488
adding Fi fluxes from @slevis-lmwg
wwieder Mar 18, 2024
faefaa5
usermods for MIMICS
wwieder May 20, 2024
933d229
removing conflicts
wwieder Sep 6, 2024
f2dd873
usermods for MIMICS cases
wwieder Sep 6, 2024
3878450
correct surface data for 5.3 datasets
wwieder Sep 10, 2024
f5ff4a0
adding mimics fi flux
wwieder Sep 10, 2024
2f52b64
usermods for mimics
wwieder Oct 1, 2024
df63275
subset crujra datm
wwieder Oct 1, 2024
9a8ba0e
restore usermod defaults
wwieder Feb 28, 2025
c75d439
Merge tag 'ctsm5.3.026' into mimics_NEON_Derecho
wwieder Feb 28, 2025
4cb68e8
Merge tag 'ctsm5.3.030' into mimics_NEON_Derecho
slevis-lmwg Mar 12, 2025
5bc5726
Reverse changes to subset_data + default_data that come in with #2956
slevis-lmwg Mar 12, 2025
fd7b3f4
Reverse changes to single_point_case.py
slevis-lmwg Mar 12, 2025
e165c0e
Update to the new paramfiles
slevis-lmwg Mar 14, 2025
fe30970
Draft ChangeLog/ChangeSum
slevis-lmwg Mar 14, 2025
d93f683
Merge tag 'ctsm5.3.032' into mimics_NEON_Derecho
slevis-lmwg Mar 17, 2025
6e8674e
Updated ChangeLog/Sum
slevis-lmwg Mar 19, 2025
78371a1
Another update to ChangeLog
slevis-lmwg Mar 19, 2025
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
6 changes: 3 additions & 3 deletions bld/namelist_files/namelist_defaults_ctsm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -524,9 +524,9 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
<!-- The default filenames are given relative to the root directory
for the CLM2 data in the CESM distribution -->
<!-- Plant function types (relative to {csmdata}) -->
<paramfile phys="clm6_0" >lnd/clm2/paramdata/ctsm60_params_nfix.c241119.nc</paramfile>
<paramfile phys="clm5_0" >lnd/clm2/paramdata/clm50_params_nfix.c241119.nc</paramfile>
<paramfile phys="clm4_5" >lnd/clm2/paramdata/clm45_params_nfix.c241119.nc</paramfile>
<paramfile phys="clm6_0" >lnd/clm2/paramdata/ctsm60_params.c250311.nc</paramfile>
<paramfile phys="clm5_0" >lnd/clm2/paramdata/clm50_params.c250311.nc</paramfile>
<paramfile phys="clm4_5" >lnd/clm2/paramdata/clm45_params.c250311.nc</paramfile>

<!-- ================================================================== -->
<!-- FATES default parameter file -->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_ciso_cwd_hr_params_nfix.c241119.nc'
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_ciso_cwd_hr_params.c250311.nc'
hist_fincl1 = 'CWDC_HR','C13_CWDC_HR','C14_CWDC_HR','CWD_HR_L2','CWD_HR_L2_vr','CWD_HR_L3','CWD_HR_L3_vr'
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
use_soil_matrixcn = .true.
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_params_cn30.c241119.nc'
paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm60_params_cn30.c250311.nc'
78 changes: 78 additions & 0 deletions doc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,4 +1,82 @@
===============================================================
Tag name: ctsm5.3.039
Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
Date: Fri 14 Mar 2025 05:33:44 PM MDT
One-line Summary: Add new mimics_fi param = frac of litter inputs bypassing litter pools
Comment thread
slevis-lmwg marked this conversation as resolved.

Purpose and description of changes
----------------------------------

Summary from the PR: removes NPP control on turnover
fixes density dependent control on turnover
adds litterfall fluxes that bypass litter pools, directly contributing to SOM

This PR also addresses the issue of varying microbial turnover with depth.

Significant changes to scientifically-supported configurations
--------------------------------------------------------------

Does this tag change answers significantly for any of the following physics configurations?
(Details of any changes will be given in the "Answer changes" section below.)

[Put an [X] in the box for any configuration with significant answer changes.]

[ ] clm6_0

[ ] clm5_0

[ ] ctsm5_0-nwp

[ ] clm4_5


Bugs fixed
----------
List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
Fixes #2361 MIMICS todo list
Fixes #2248 Should microbial turnover vary with depth in MIMICS?

Notes of particular relevance for users
---------------------------------------
Changes made to namelist defaults (e.g., changed parameter values):
New parameter files

Changes to the datasets (e.g., parameter, surface or initial files):
New parameter files

Notes of particular relevance for developers:
---------------------------------------------

Testing summary:
----------------
[PASS means all tests PASS; OK means tests PASS other than expected fails.]

regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):

derecho ----- OK
izumi -------

Answer changes
--------------

Changes answers relative to baseline: Yes

Summarize any changes to answers, i.e.,
- what code configurations: MIMICS
- what platforms/compilers: all
- nature of change: larger than roundoff/same climate

Soil C stocks will change in mimics cases with these code and parameter updates.

Also, two 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.

Other details
-------------
Pull Requests that document the changes (include PR ids):
https://github.com/ESCOMP/ctsm/pull/2365 MIMICS updates

===============================================================
===============================================================
Tag name: ctsm5.3.030
Originator(s): samrabin (Sam Rabin, UCAR/TSS)
Date: Fri Mar 7 10:06:35 MST 2025
Expand Down
1 change: 1 addition & 0 deletions doc/ChangeSum
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
Tag Who Date Summary
============================================================================================================================
ctsm5.3.039 slevis 03/??/2025 Add new mimics_fi param = frac of litter inputs bypassing litter pools
ctsm5.3.030 samrabin 03/07/2025 Fix FATES branch runs
ctsm5.3.029 slevis 03/05/2025 Make Bytnerowicz the default nfix_method for clm6
ctsm5.3.028 samrabin 03/03/2025 Move Izumi intel and gnu tests to Derecho
Expand Down
23 changes: 18 additions & 5 deletions src/biogeochem/CNCStateUpdate1Mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ module CNCStateUpdate1Mod
use clm_varpar , only : ndecomp_cascade_transitions, nlevdecomp
use clm_time_manager , only : get_step_size_real
use clm_varpar , only : i_litr_min, i_litr_max, i_cwd
use clm_varpar , only : i_met_lit, i_str_lit, i_phys_som, i_chem_som
use pftconMod , only : npcropmin, nc3crop, pftcon
use abortutils , only : endrun
use decompMod , only : bounds_type
Expand All @@ -17,7 +18,7 @@ module CNCStateUpdate1Mod
use CropType , only : crop_type
use CropReprPoolsMod , only : nrepr, repr_grain_min, repr_grain_max
use CropReprPoolsMod , only : repr_structure_min, repr_structure_max
use SoilBiogeochemDecompCascadeConType , only : decomp_cascade_con, use_soil_matrixcn
use SoilBiogeochemDecompCascadeConType , only : decomp_cascade_con, decomp_method, mimics_decomp, use_soil_matrixcn
use SoilBiogeochemCarbonFluxType , only : soilbiogeochem_carbonflux_type
use SoilBiogeochemCarbonStateType , only : soilbiogeochem_carbonstate_type
use PatchType , only : patch
Expand Down Expand Up @@ -170,6 +171,7 @@ subroutine CStateUpdate1( num_soilc, filter_soilc, num_soilp, filter_soilp, &
associate( &
ivt => patch%itype , & ! Input: [integer (:) ] patch vegetation type

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

cascade_donor_pool => decomp_cascade_con%cascade_donor_pool , & ! Input: [integer (:) ] which pool is C taken from for a given decomposition step
Expand Down Expand Up @@ -206,10 +208,21 @@ subroutine CStateUpdate1( num_soilc, filter_soilc, num_soilp, filter_soilp, &
!
if (.not. use_soil_matrixcn) then
! phenology and dynamic land cover fluxes
do i = i_litr_min, i_litr_max
cf_soil%decomp_cpools_sourcesink_col(c,j,i) = &
cf_veg%phenology_c_to_litr_c_col(c,j,i) * dt
end do
if (decomp_method == mimics_decomp) then
do i = i_litr_min, i_litr_max ! in MIMICS these are 1 and 2
cf_soil%decomp_cpools_sourcesink_col(c,j,i) = (1 - mimics_fi(i)) * &
cf_veg%phenology_c_to_litr_c_col(c,j,i) * dt
end do
cf_soil%decomp_cpools_sourcesink_col(c,j,i_phys_som) = mimics_fi(1) * &
cf_veg%phenology_c_to_litr_c_col(c,j,i_met_lit) * dt
cf_soil%decomp_cpools_sourcesink_col(c,j,i_chem_som) = mimics_fi(2) * &
cf_veg%phenology_c_to_litr_c_col(c,j,i_str_lit) * dt
else
do i = i_litr_min, i_litr_max
cf_soil%decomp_cpools_sourcesink_col(c,j,i) = &
cf_veg%phenology_c_to_litr_c_col(c,j,i) * dt
end do
end if

! NOTE(wjs, 2017-01-02) This used to be set to a non-zero value, but the
! terms have been moved to CStateUpdateDynPatch. I think this is zeroed every
Expand Down
23 changes: 18 additions & 5 deletions src/biogeochem/CNNStateUpdate1Mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ module CNNStateUpdate1Mod
use clm_time_manager , only : get_step_size_real
use clm_varpar , only : nlevdecomp
use clm_varpar , only : i_litr_min, i_litr_max, i_cwd
use clm_varpar , only : i_met_lit, i_str_lit, i_phys_som, i_chem_som
use clm_varctl , only : iulog, use_nitrif_denitrif
use SoilBiogeochemDecompCascadeConType, only : use_soil_matrixcn
use SoilBiogeochemDecompCascadeConType, only : decomp_method, mimics_decomp, use_soil_matrixcn
use CNSharedParamsMod , only : use_matrixcn
use clm_varcon , only : nitrif_n2o_loss_frac
use pftconMod , only : npcropmin, pftcon
Expand Down Expand Up @@ -129,6 +130,7 @@ subroutine NStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp, &
associate( &
ivt => patch%itype , & ! Input: [integer (:) ] patch vegetation type

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

nf_veg => cnveg_nitrogenflux_inst , & ! Input:
Expand Down Expand Up @@ -163,10 +165,21 @@ subroutine NStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp, &
! State update without the matrix solution
!
if (.not. use_soil_matrixcn) then ! to be consistent with C
do i = i_litr_min, i_litr_max
nf_soil%decomp_npools_sourcesink_col(c,j,i) = &
nf_veg%phenology_n_to_litr_n_col(c,j,i) * dt
end do
if (decomp_method == mimics_decomp) then
do i = i_litr_min, i_litr_max ! in MIMICS these are 1 and 2
nf_soil%decomp_npools_sourcesink_col(c,j,i) = (1 - mimics_fi(i)) * &
nf_veg%phenology_n_to_litr_n_col(c,j,i) * dt
end do
nf_soil%decomp_npools_sourcesink_col(c,j,i_phys_som) = mimics_fi(1) * &
nf_veg%phenology_n_to_litr_n_col(c,j,i_met_lit) * dt
nf_soil%decomp_npools_sourcesink_col(c,j,i_chem_som) = mimics_fi(2) * &
nf_veg%phenology_n_to_litr_n_col(c,j,i_str_lit) * dt
else
do i = i_litr_min, i_litr_max
nf_soil%decomp_npools_sourcesink_col(c,j,i) = &
nf_veg%phenology_n_to_litr_n_col(c,j,i) * dt
end do
end if

! NOTE(wjs, 2017-01-02) This used to be set to a non-zero value, but the
! terms have been moved to CStateUpdateDynPatch. I think this is zeroed every
Expand Down
3 changes: 3 additions & 0 deletions src/main/clm_varpar.F90
Comment thread
slevis-lmwg marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ module clm_varpar
integer, public :: i_litr_min = -9 ! min index of litter pools; overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_litr_max = -9 ! max index of litter pools; overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_met_lit = -9 ! index of metabolic litter pool; overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_str_lit = -9 ! index of structural litter pool; overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_phys_som = -9 ! index of physically protected Soil Organic Matter (SOM); overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_chem_som = -9 ! index of chemically protected Soil Organic Matter (SOM); overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_cop_mic = -9 ! index of copiotrophic microbial pool; overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_oli_mic = -9 ! index of oligotrophic microbial pool; overwritten in SoilBiogeochemDecompCascade*Mod
integer, public :: i_cwd = -9 ! index of cwd pool; overwritten in SoilBiogeochemDecompCascade*Mod
Expand Down
9 changes: 9 additions & 0 deletions src/main/pftconMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,9 @@ module pftconMod
real(r8), allocatable :: crit_onset_gdd_sf(:)! scale factor for crit_onset_gdd
real(r8), allocatable :: ndays_on(:) ! number of days to complete leaf onset

! MIMICS
real(r8), allocatable :: mimics_fi(:)

! crop

! These arrays give information about the merge of unused crop types to the types CLM
Expand Down Expand Up @@ -504,6 +507,7 @@ subroutine InitAllocate (this)
allocate( this%taper (0:mxpft) )
allocate( this%rstem_per_dbh (0:mxpft) )
allocate( this%wood_density (0:mxpft) )
allocate( this%mimics_fi(2) )
allocate( this%crit_onset_gdd_sf (0:mxpft) )
allocate( this%ndays_on (0:mxpft) )

Expand Down Expand Up @@ -1095,6 +1099,9 @@ subroutine InitRead(this)
!
! clm 5 nitrogen variables
!
call ncd_io('mimics_fi',this%mimics_fi, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

if (use_flexibleCN) then
call ncd_io('i_vcad', this%i_vcad, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))
Expand Down Expand Up @@ -1132,6 +1139,7 @@ subroutine InitRead(this)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))
call ncd_io('wood_density',this%wood_density, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

else
this%dbh = 0.0_r8
this%fbw = 0.0_r8
Expand Down Expand Up @@ -1594,6 +1602,7 @@ subroutine Clean(this)
deallocate( this%rstem_per_dbh)
deallocate( this%wood_density)
deallocate( this%taper)
deallocate( this%mimics_fi)
deallocate( this%crit_onset_gdd_sf)
deallocate( this%ndays_on)
end subroutine Clean
Expand Down
13 changes: 5 additions & 8 deletions src/soilbiogeochem/SoilBiogeochemDecompCascadeMIMICSMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ module SoilBiogeochemDecompCascadeMIMICSMod
use shr_const_mod , only : SHR_CONST_TKFRZ
use shr_log_mod , only : errMsg => shr_log_errMsg
use clm_varpar , only : nlevdecomp, ndecomp_pools_max
use clm_varpar , only : i_met_lit, i_cop_mic, i_oli_mic, i_cwd
use clm_varpar , only : i_phys_som, i_chem_som, i_str_lit, i_met_lit, i_cop_mic, i_oli_mic, i_cwd
use clm_varpar , only : i_litr_min, i_litr_max, i_cwdl2
use clm_varctl , only : iulog, spinup_state, anoxia, use_lch4, use_fates
use clm_varcon , only : zsoi
Expand Down Expand Up @@ -48,10 +48,7 @@ module SoilBiogeochemDecompCascadeMIMICSMod
real(r8), private, allocatable :: fphys_m1(:,:)
real(r8), private, allocatable :: fphys_m2(:,:)
real(r8), private, allocatable :: p_scalar(:,:)
integer, private :: i_phys_som ! index of physically protected Soil Organic Matter (SOM)
integer, private :: i_chem_som ! index of chemically protected SOM
integer, private :: i_avl_som ! index of available (aka active) SOM
integer, private :: i_str_lit ! index of structural litter pool
integer, private :: i_l1m1 ! indices of transitions, eg l1m1: litter 1 -> first microbial pool
integer, private :: i_l1m2
integer, private :: i_l2m1
Expand Down Expand Up @@ -1293,14 +1290,14 @@ subroutine decomp_rates_mimics(bounds, num_bgc_soilc, filter_bgc_soilc, &
decomp_k(c,j,i_chem_som) = (term_1 + term_2) * w_d_o_scalars

! Currently, mimics_densdep = 1 so as to have no effect
decomp_k(c,j,i_cop_mic) = tau_m1 * &
m1_conc**(mimics_densdep - 1.0_r8) * w_d_o_scalars
decomp_k(c,j,i_cop_mic) = tau_m1 * m1_conc**(mimics_densdep)

favl = min(1.0_r8, max(0.0_r8, 1.0_r8 - fphys_m1(c,j) - fchem_m1))
pathfrac_decomp_cascade(c,j,i_m1s1) = favl
pathfrac_decomp_cascade(c,j,i_m1s2) = fchem_m1

decomp_k(c,j,i_oli_mic) = tau_m2 * &
m2_conc**(mimics_densdep - 1.0_r8) * w_d_o_scalars
decomp_k(c,j,i_oli_mic) = tau_m2 * m2_conc**(mimics_densdep)

favl = min(1.0_r8, max(0.0_r8, 1.0_r8 - fphys_m2(c,j) - fchem_m2))
pathfrac_decomp_cascade(c,j,i_m2s1) = favl
pathfrac_decomp_cascade(c,j,i_m2s2) = fchem_m2
Expand Down