diff --git a/.gitmodules b/.gitmodules
index 23408dcf0c..a2cadc8deb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -36,7 +36,7 @@ fxDONOTUSEurl = https://github.com/NGEET/fates
[submodule "cism"]
path = components/cism
url = https://github.com/ESCOMP/CISM-wrapper
-fxtag = cismwrap_2_2_010
+fxtag = cismwrap_2_2_011
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESCOMP/CISM-wrapper
@@ -68,7 +68,7 @@ fxDONOTUSEurl = https://github.com/ESCOMP/mizuRoute
[submodule "ccs_config"]
path = ccs_config
url = https://github.com/ESMCI/ccs_config_cesm.git
-fxtag = ccs_config_cesm1.0.61_add_domain_ne3np4.pg2_1
+fxtag = ccs_config_cesm1.0.66
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESMCI/ccs_config_cesm.git
diff --git a/WhatsNewInCTSM5.4.md b/WhatsNewInCTSM5.4.md
index fe721ae312..28a84b61db 100755
--- a/WhatsNewInCTSM5.4.md
+++ b/WhatsNewInCTSM5.4.md
@@ -1,4 +1,4 @@
-# What's new in CTSM 5.4 (tag `ctsm5.4.0xx`)
+# What's new in CTSM 5.4 (tag `ctsm5.4.002`)
# Purpose and description of changes since CTSM 5.3 (tag `ctsm5.3.021`)
diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm
index a205dd8ef3..bcf87620c4 100755
--- a/bld/CLMBuildNamelist.pm
+++ b/bld/CLMBuildNamelist.pm
@@ -4501,7 +4501,7 @@ sub setup_logic_cropcal_streams {
'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'}
);
if ( &value_is_true($cropcals_rx_adapt) ) {
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_fldFileName_gdd20_baseline', 'stream_gdd20_seasons'=>$stream_gdd20_seasons);
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_fldFileName_gdd20_baseline', 'stream_gdd20_seasons'=>$stream_gdd20_seasons, 'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'});
}
}
diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml
index 74f0b9cbb8..df76f2feaf 100644
--- a/bld/namelist_files/namelist_defaults_ctsm.xml
+++ b/bld/namelist_files/namelist_defaults_ctsm.xml
@@ -455,9 +455,9 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
0.85d00
0.98d00
0.03d00
-0.28d-4
+0.58d-4
0.010d00
-0.71d-4
+0.75d-4
0.34d00
0.33d00
75.d00
@@ -467,7 +467,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
95.
1.8d00
0.6d00
- 0.35d00
+ 0.3d00
6.5d00
@@ -577,7 +577,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
Sturm1997
Jordan1991
-Jordan1991
+Sturm1997
Jordan1991
Sturm1997
@@ -622,7 +622,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
-lnd/clm2/paramdata/clm60_params.ctsm6_li2024.c250822.nc
+lnd/clm2/paramdata/ctsm60_params.c251124.nc
lnd/clm2/paramdata/clm50_params.c250311.nc
lnd/clm2/paramdata/clm45_params.c250311.nc
@@ -2280,7 +2280,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2
2000
-lnd/clm2/cropdata/calendars/processed/gdds_20250809_025305.tweaked_latlons.nc
+lnd/clm2/cropdata/calendars/processed/cultivar_gdds.c251120.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc
@@ -2295,7 +2295,10 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2
lnd/clm2/cropdata/calendars/processed/360x720_120830_ESMFmesh_c20210507_cdf5.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/swindow_starts_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/swindow_ends_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.tweaked_latlons.nc
-lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc
+lnd/clm2/cropdata/calendars/processed/gdd20_baseline.c251120.tweaked_latlons.nc
+lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc
+lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc
+lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/gdd20bl.copied_from.gdds_20230829_161011.v2.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/sdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-hcru_hcru_mt13.2000-2000.20230728_165845.tweaked_latlons.nc
lnd/clm2/cropdata/calendars/processed/hdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-hcru_hcru_mt13.2000-2000.20230728_165845.tweaked_latlons.nc
diff --git a/bld/unit_testers/build-namelist_test.pl b/bld/unit_testers/build-namelist_test.pl
index 8028b8d8ff..5f08b726d0 100755
--- a/bld/unit_testers/build-namelist_test.pl
+++ b/bld/unit_testers/build-namelist_test.pl
@@ -845,6 +845,11 @@ sub cat_and_create_namelistinfile {
namelst=>"stream_fldfilename_atm_c14='/dev/null'",
phys=>"clm6_0",
},
+ "c14_meshfile_none" =>{ options=>"-envxml_dir . -bgc bgc",
+ namelst=>"stream_fldfilename_atm_c14='/dev/null', " .
+ "stream_meshfile_atm_c14='none'",
+ phys=>"clm6_0",
+ },
"lightres no cn" =>{ options=>"-bgc sp -envxml_dir . -light_res 360x720",
namelst=>"",
phys=>"clm5_0",
@@ -1447,11 +1452,6 @@ sub cat_and_create_namelistinfile {
namelst=>"use_soil_moisture_streams=T,soilm_tintalgo='linear'",
phys=>"clm5_0",
},
- "c14_meshfile_none" =>{ options=>"-envxml_dir . -bgc bgc",
- namelst=>"stream_fldfilename_atm_c14='/dev/null', " .
- "stream_meshfile_atm_c14='none'",
- phys=>"clm6_0",
- },
"missing_ndep_file" =>{ options=>"-envxml_dir . -bgc bgc -ssp_rcp SSP5-3.4",
namelst=>"",
phys=>"clm5_0",
diff --git a/ccs_config b/ccs_config
index d686615fac..76370cc085 160000
--- a/ccs_config
+++ b/ccs_config
@@ -1 +1 @@
-Subproject commit d686615faceac30705b199f592808e3558ac176b
+Subproject commit 76370cc08587fd653458cdfb2e0b220b3168ded6
diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml
index e991288cc5..2860165114 100644
--- a/cime_config/config_component.xml
+++ b/cime_config/config_component.xml
@@ -436,7 +436,7 @@ Caveats:
char
- v1,v2,v3,latest
+ v1,v2,v3,v4,latest
latest
run_component_ctsm
env_run.xml
diff --git a/components/cism b/components/cism
index 84767787b7..d18e0a3e1a 160000
--- a/components/cism
+++ b/components/cism
@@ -1 +1 @@
-Subproject commit 84767787b78a3547497cd3f1b452e775cdc56f95
+Subproject commit d18e0a3e1aa97e8525e239904d6b0dea39886f05
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 1d44c7b7c9..926a8c008b 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,4 +1,109 @@
===============================================================
+Tag name: ctsm5.4.003
+Originator(s): (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Thu Dec 11 12:02:28 PM MST 2025
+One-line Summary: Merge post5.4 branch to master
+
+Purpose and description of changes
+----------------------------------
+
+Update namelist_defaults:
+- parameters for the li2024crujra fire method: PR Post 5.4 namelist updates #3626 by Will Wieder
+- snow_thermal_cond_glc_method to Sturm1997 for clm6: PR #3626 by Will Wieder
+- clm paramfile to ctsm60_params.c251124.nc for clm6: PR #3626 by Will Wieder
+- stream_fldfilename_cultivar_gdds and stream_fldFileName_gdd20_baseline to latest files: PR post-5.4.n00: New crop calendar inputs and updated params (omni02) #3618 by Sam Rabin
+- Update default NEON inputs to v4: PR #3626 by Will Wieder
+
+Update cismwrap_2_2_010 to cismwrap_2_2_011 and ccs_config_cesm1.0.61_add_domain_ne3np4.pg2_1 to ccs_config_cesm1.0.66: PR #3626 by Will Wieder
+
+Remove fsat effect on baf_peatf in the fire code and update the corresponding documentation in doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst: PR #3626 by Will Wieder and Fang Li
+
+Fix for RRTMGP errors caused by high surface temperatures: PR #3643 by Keith Oleson
+
+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.]
+
+[X] clm6_0
+
+[X] clm5_0
+
+[X] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
+Fixes #3589 355+ K land temperature triggers RRTMGP error, by Keith Oleson
+Fixes #3598 Change default snow_thermal_cond_glc_method, by Will Wieder
+Fixes #3608 Fire calibration for CLM6 release, by Will Wieder and Fang Li
+Fixes #3594 Update NEON data to v4, by Will Wieder
+Fixes #3321 Crop calendar inputs needed with CRU-JRA climate, by Sam Rabin
+Fixes #3658 Move c14_meshfile_none warning test to fatal error (resolves a build_namelist failure)
+
+Notes of particular relevance for users
+---------------------------------------
+Changes made to namelist defaults (e.g., changed parameter values):
+ Namelist defaults changes listed in "Purpose and description of changes"
+Changes to the datasets (e.g., parameter, surface or initial files):
+ References to new crop calendar inputs and new paramfile in "Purpose and description of changes"
+Changes to documentation:
+ Updates to documentation mentioned in "Purpose and description of changes"
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+ I will mention here something that took effect with ctsm5.4.000 (today's discussion reminded me):
+ We made two history fields default inactive (VEGWPLN, VEGWPPD) to allow LII2* tests to pass the COMPARE_base_no_interp phase. The problem and suggested solution appear in issues #3617 #3620.
+
+Testing summary:
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ derecho - OK (the usual 2 tests expected to fail)
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ derecho - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: Yes
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: Clm60 due to updates to CLM6 and Clm50*G due to updated cism
+ - what platforms/compilers: All
+ - nature of change: larger than roundoff, possibly new climate
+
+ If this tag changes climate describe the run(s) done to evaluate the new
+ climate (put details of the simulations in the experiment database)
+ - casename: post-5.4.n02.ctsm5.4.000_HIST_test0 and an issue including links to diagnostics is expeced soon with most likely url https://github.com/NCAR/LMWG_dev/issues/130
+
+Other details
+-------------
+List any git submodules updated (cime, rtm, mosart, cism, fates, etc.):
+ cismwrap_2_2_010 to cismwrap_2_2_011
+ ccs_config_cesm1.0.61_add_domain_ne3np4.pg2_1 to ccs_config_cesm1.0.66
+
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/3655
+
+===============================================================
+===============================================================
Tag name: ctsm5.4.002
Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326)
Date: Wed Dec 10 03:35:12 PM MST 2025
diff --git a/doc/ChangeSum b/doc/ChangeSum
index 42d9cfcb0e..d8d0267019 100644
--- a/doc/ChangeSum
+++ b/doc/ChangeSum
@@ -1,5 +1,6 @@
Tag Who Date Summary
============================================================================================================================
+ ctsm5.4.003 multiple 12/11/2025 Merge post5.4 branch to master
ctsm5.4.002 erik 12/10/2025 Start using CMIP7 Carbon Isotope datasets
ctsm5.4.001 samrabin 12/08/2025 Merge b4b-dev
ctsm5.4.000 multiple 12/04/2025 Merge alpha-ctsm5.4.CMIP7 to master
diff --git a/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst b/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst
index 84dd2bcaaf..0483567ff5 100644
--- a/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst
+++ b/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst
@@ -354,9 +354,9 @@ The burned area due to peat fires is given as :math:`{A}_{b}`:
.. math::
:label: 23.37
- A_{b} = c \ f_{cli,p} f_{peat} (1 - f_{sat} ) A_{g}
+ A_{b} = c \ f_{cli,p} f_{peat} A_{g}
-where :math:`c` (s\ :sup:`-1`) is a constant; :math:`f_{cli,p}` represents the effect of climate on the burned area; :math:`f_{peat}` is the fractional coverage of peatland in the grid cell; and :math:`f_{sat}` is the fraction of the grid cell with a water table at the surface or higher. :math:`c` = 0.17 :math:`\times` 10 :sup:`-3` hr\ :sup:`-1` for tropical peat fires and :math:`c` = 0.9 :math:`\times` 10 :sup:`-5` hr :sup:`-1` for boreal peat fires are derived using an inverse method, by matching simulations to earlier studies: about 2.4 Mha peatland was burned over Indonesia in 1997 (:ref:`Page et al. 2002 `) and the average burned area of peat fires in Western Canada was 0.2 Mha yr :sup:`-1` for 1980-1999 (:ref:`Turetsky et al. 2004 `).
+where :math:`c` (s\ :sup:`-1`) is a constant; :math:`f_{cli,p}` represents the effect of climate on the burned area; and :math:`f_{peat}` is the fractional coverage of peatland in the grid cell. :math:`c` = 0.17 :math:`\times` 10 :sup:`-3` hr\ :sup:`-1` for tropical peat fires and :math:`c` = 0.9 :math:`\times` 10 :sup:`-5` hr :sup:`-1` for boreal peat fires are derived using an inverse method, by matching simulations to earlier studies: about 2.4 Mha peatland was burned over Indonesia in 1997 (:ref:`Page et al. 2002 `) and the average burned area of peat fires in Western Canada was 0.2 Mha yr :sup:`-1` for 1980-1999 (:ref:`Turetsky et al. 2004 `).
For tropical peat fires, :math:`f_{cli,p}` is set as a function of long-term precipitation :math:`P_{60d}` :
diff --git a/python/ctsm/site_and_regional/tower_arg_parse.py b/python/ctsm/site_and_regional/tower_arg_parse.py
index 33b3db2afa..10ede664db 100644
--- a/python/ctsm/site_and_regional/tower_arg_parse.py
+++ b/python/ctsm/site_and_regional/tower_arg_parse.py
@@ -195,7 +195,7 @@ def get_parser(args, description, valid_neon_sites, valid_plumber_sites):
dest="user_version",
required=False,
type=str,
- choices=["v1", "v2", "v3"],
+ choices=["v1", "v2", "v3", "v4"],
)
parser.add_argument(
diff --git a/src/biogeochem/CNFireLi2024Mod.F90 b/src/biogeochem/CNFireLi2024Mod.F90
index d4c05f63bc..66f5b10fba 100644
--- a/src/biogeochem/CNFireLi2024Mod.F90
+++ b/src/biogeochem/CNFireLi2024Mod.F90
@@ -187,7 +187,6 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
rswf_min => pftcon%rswf_min , & ! Input:
rswf_max => pftcon%rswf_max , & ! Input:
btran2 => this%cnfire_base_type%btran2_patch , & ! Input: [real(r8) (:) ] root zone soil wetness
- fsat => saturated_excess_runoff_inst%fsat_col , & ! Input: [real(r8) (:) ] fractional area with water table at surface
wf2 => waterdiagnosticbulk_inst%wf2_col , & ! Input: [real(r8) (:) ] soil water as frac. of whc for top 0.17 m
is_cwd => decomp_cascade_con%is_cwd , & ! Input: [logical (:) ] TRUE => pool is a cwd pool
@@ -517,10 +516,6 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
g = col%gridcell(c)
! For crop
- ! cropf_col(c) * col%wtgcell(c) > 0.1_r8 is added because fires are rare in
- ! gridcells with limited cropland coverage based on GFED5. Also, this helps to
- ! avoid abm (crop fire peak month) regridding error from 0.05 degree to lower resolution
- ! The condition could be removed if CLM supports the use of mode in abm inputs regridding
if( forc_t(c) >= SHR_CONST_TKFRZ .and. patch%itype(p) > nc4_grass .and. &
kmo == abm_lf(c) .and. &
burndate(p) >= 999 .and. patch%wtcol(p) > 0._r8 )then ! catch crop burn time
@@ -556,8 +551,7 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_
end if
else
baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/borpeat_fire_soilmoist_denom))* &
- max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c)* &
- (1._r8-fsat(c))
+ max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c)
end if
end do
!
diff --git a/src/biogeophys/CanopyFluxesMod.F90 b/src/biogeophys/CanopyFluxesMod.F90
index 3b0d990b21..8b26100284 100644
--- a/src/biogeophys/CanopyFluxesMod.F90
+++ b/src/biogeophys/CanopyFluxesMod.F90
@@ -437,6 +437,8 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp,
real(r8), parameter :: k_cyl_area = 1.0_r8 !departure from cylindrical area
real(r8), parameter :: k_internal = 0.0_r8 !self-absorbtion of leaf/stem longwave
real(r8), parameter :: min_stem_diameter = 0.05_r8 !minimum stem diameter for which to calculate stem interactions
+ real(r8), parameter :: min_lai = 0.1_r8 !minimum elai threshold to add esai to sa_leaf calculation
+ !value is arbitrary but has been effective in avoiding RRTMGP errors in CESM3 development simulations
integer :: dummy_to_make_pgi_happy
!------------------------------------------------------------------------------
@@ -745,15 +747,26 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp,
! adjust for departure of cylindrical stem model
sa_stem(p) = k_cyl_area * sa_stem(p)
- !
! only calculate separate leaf/stem heat capacity for trees
- ! and shrubs if dbh is greater than some minimum value
- ! (set surface area for stem, and fraction absorbed by stem to zero)
+ ! and shrubs if dbh is greater than some minimum value.
+ ! otherwise, set surface area for stem and fraction absorbed by stem to zero,
+ ! and add esai to sa_leaf.
if(.not.(is_tree(patch%itype(p)) .or. is_shrub(patch%itype(p))) &
.or. dbh(p) < min_stem_diameter) then
frac_rad_abs_by_stem(p) = 0.0_r8
sa_stem(p) = 0.0_r8
sa_leaf(p) = sa_leaf(p) + esai(p)
+ else
+ ! Add esai to sa_leaf if elai is less than threshold.
+ ! Intended to avoid small sa_leaf which leads to small leaf conductance
+ ! and high leaf temperature. This in turn can lead to unrealistically
+ ! high surface temperatures passed to the atmospheric model (The RRTMGP
+ ! component in particular, which returns an error and stops the model
+ ! if the surface temperature is greater than 355K).
+ ! See https://github.com/ESCOMP/CTSM/issues/3589 for more info.
+ if(elai(p) < min_lai) then
+ sa_leaf(p) = sa_leaf(p) + esai(p)
+ endif
endif
! if using Satellite Phenology mode, calculate leaf and stem biomass