Skip to content
Merged
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
80f4c01
append case names with optional experiment
wwieder Apr 14, 2023
0aa921a
add experiment flag for run_neon
wwieder Apr 17, 2023
f5db7a2
correction to get postAD and transient from postAD working
wwieder Apr 18, 2023
669a651
Update default CRU-JRA stream_fldfilename_cultivar_gdds.
samsrabin Nov 20, 2025
f03f383
Update default CRU-JRA stream_fldFileName_gdd20_baseline.
samsrabin Nov 20, 2025
8547e79
Update clm6 paramfile: omni02 crop params.
samsrabin Nov 20, 2025
cb95678
Use old stream_fldFileName_gdd20_baseline for GSWP3 tunings.
samsrabin Nov 20, 2025
368b3d0
CLMBuildNamelist: Account for lnd_tuning_mode in setting stream_fldFi…
samsrabin Nov 21, 2025
47c7e92
Merge pull request #3618 from samsrabin/crop-newcals-and-omni02
samsrabin Nov 22, 2025
17ca65b
fire namelist defaults requested in #3608
wwieder Nov 24, 2025
d7928da
change default snow_thermal_cond_glc_method requested in #3598
wwieder Nov 24, 2025
1f417fd
Fire code cleanup requested in #3608
wwieder Nov 24, 2025
d4439c8
update cism per #3598
wwieder Nov 24, 2025
3096e94
remove conflicting file
wwieder Nov 24, 2025
00f16a4
update parameter file
wwieder Nov 24, 2025
362f6fa
update cism
wwieder Nov 25, 2025
fc9fd17
Update to ccs_config1.0.66
slevis-lmwg Dec 2, 2025
db4d8ad
Handpicked Will's mods from #3597 branch NEON_v4
slevis-lmwg Dec 2, 2025
995d9ab
Update formula in documentation to be consistent with this PR
slevis-lmwg Dec 2, 2025
b42fafc
Update comment in documentation to make consistent with formula change
slevis-lmwg Dec 2, 2025
491514e
Merge pull request #3626 from wwieder/post-5.4_namelist_updates
slevis-lmwg Dec 2, 2025
918af16
Fix for RRTMGP errors caused by high surface temperatures.
olyson Dec 2, 2025
bb86640
Human readability.
olyson Dec 3, 2025
a33f75f
Add min_lai parameter
olyson Dec 3, 2025
e944928
Clarify comment
olyson Dec 3, 2025
e02b9a5
Remove duplicate comment
olyson Dec 3, 2025
3e5bcb0
Merge tag 'alpha-ctsm5.4.CMIP7.21.ctsm5.3.085' into merge-alpha5.4-21…
samsrabin Dec 4, 2025
6abd0c5
Merge pull request #3649 from samsrabin/merge-alpha5.4-21.85-to-post-5.4
samsrabin Dec 8, 2025
ec0a643
Merge branch 'post-5.4' into RRTMGPfix
slevis-lmwg Dec 9, 2025
f5e1542
Merge pull request #3643 from olyson/RRTMGPfix
slevis-lmwg Dec 9, 2025
3da7f0f
Merge remote-tracking branch 'escomp/master' into post-5.4
slevis-lmwg Dec 10, 2025
a829999
Draft ChangeLog/Sum
slevis-lmwg Dec 11, 2025
d5cbed5
Update WhatsNewInCTSM5.4.md to specify ctsm5.4.002 as release version
slevis-lmwg Dec 11, 2025
9c67c0c
Move the test that was in the warning list to the fatal list
ekluzek Dec 11, 2025
801cd0f
Merge branch 'post-5.4' of github.com:ESCOMP/CTSM into post-5.4
ekluzek Dec 11, 2025
af366ad
Update ChangeLog
slevis-lmwg Dec 11, 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
4 changes: 2 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion bld/CLMBuildNamelist.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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'});
}
}

Expand Down
17 changes: 10 additions & 7 deletions bld/namelist_files/namelist_defaults_ctsm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -455,9 +455,9 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
<bt_min fire_method="li2024crujra" >0.85d00</bt_min>
<bt_max fire_method="li2024crujra" >0.98d00</bt_max>
<cli_scale fire_method="li2024crujra" >0.03d00</cli_scale>
<boreal_peatfire_c fire_method="li2024crujra" >0.28d-4</boreal_peatfire_c>
<boreal_peatfire_c fire_method="li2024crujra" >0.58d-4</boreal_peatfire_c>
<pot_hmn_ign_counts_alpha fire_method="li2024crujra" >0.010d00</pot_hmn_ign_counts_alpha>
<non_boreal_peatfire_c fire_method="li2024crujra" >0.71d-4</non_boreal_peatfire_c>
<non_boreal_peatfire_c fire_method="li2024crujra" >0.75d-4</non_boreal_peatfire_c>
<cropfire_a1 fire_method="li2024crujra" >0.34d00</cropfire_a1>
<occur_hi_gdp_tree fire_method="li2024crujra" >0.33d00</occur_hi_gdp_tree>
<lfuel fire_method="li2024crujra" >75.d00</lfuel>
Expand All @@ -467,7 +467,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
<max_rh30_affecting_fuel fire_method="li2024crujra" >95.</max_rh30_affecting_fuel>
<defo_fire_precip_thresh_bet fire_method="li2024crujra" >1.8d00</defo_fire_precip_thresh_bet>
<defo_fire_precip_thresh_bdt fire_method="li2024crujra" >0.6d00</defo_fire_precip_thresh_bdt>
<borpeat_fire_soilmoist_denom fire_method="li2024crujra" > 0.35d00</borpeat_fire_soilmoist_denom>
<borpeat_fire_soilmoist_denom fire_method="li2024crujra" > 0.3d00</borpeat_fire_soilmoist_denom>
<nonborpeat_fire_precip_denom fire_method="li2024crujra" >6.5d00</nonborpeat_fire_precip_denom>


Expand Down Expand Up @@ -577,7 +577,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
<snow_thermal_cond_method phys="clm6_0">Sturm1997</snow_thermal_cond_method>

<snow_thermal_cond_glc_method>Jordan1991</snow_thermal_cond_glc_method>
<snow_thermal_cond_glc_method phys="clm6_0">Jordan1991</snow_thermal_cond_glc_method>
<snow_thermal_cond_glc_method phys="clm6_0">Sturm1997</snow_thermal_cond_glc_method>

<snow_thermal_cond_lake_method>Jordan1991</snow_thermal_cond_lake_method>
<snow_thermal_cond_lake_method phys="clm6_0">Sturm1997</snow_thermal_cond_lake_method>
Expand Down Expand Up @@ -622,7 +622,7 @@ 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/clm60_params.ctsm6_li2024.c250822.nc</paramfile>
<paramfile phys="clm6_0" >lnd/clm2/paramdata/ctsm60_params.c251124.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>

Expand Down Expand Up @@ -2280,7 +2280,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2
<model_year_align_cropcal_cultivar_gdds >2000</model_year_align_cropcal_cultivar_gdds>

<!-- crop calendars: default maturity requirement files -->
<stream_fldfilename_cultivar_gdds cropcals_rx=".true.">lnd/clm2/cropdata/calendars/processed/gdds_20250809_025305.tweaked_latlons.nc</stream_fldfilename_cultivar_gdds>
<stream_fldfilename_cultivar_gdds cropcals_rx=".true.">lnd/clm2/cropdata/calendars/processed/cultivar_gdds.c251120.tweaked_latlons.nc</stream_fldfilename_cultivar_gdds>
<stream_fldfilename_cultivar_gdds cropcals_rx=".true." lnd_tuning_mode="clm4_5_GSWP3v1">lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc</stream_fldfilename_cultivar_gdds>
<stream_fldfilename_cultivar_gdds cropcals_rx=".true." lnd_tuning_mode="clm5_0_GSWP3v1">lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc</stream_fldfilename_cultivar_gdds>
<stream_fldfilename_cultivar_gdds cropcals_rx=".true." lnd_tuning_mode="clm6_0_GSWP3v1">lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc</stream_fldfilename_cultivar_gdds>
Expand All @@ -2295,7 +2295,10 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2
<stream_meshfile_cropcal cropcals_rx=".true.">lnd/clm2/cropdata/calendars/processed/360x720_120830_ESMFmesh_c20210507_cdf5.tweaked_latlons.nc</stream_meshfile_cropcal>
<stream_fldFileName_swindow_start cropcals_rx_adapt=".true.">lnd/clm2/cropdata/calendars/processed/swindow_starts_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.tweaked_latlons.nc</stream_fldFileName_swindow_start>
<stream_fldFileName_swindow_end cropcals_rx_adapt=".true.">lnd/clm2/cropdata/calendars/processed/swindow_ends_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.tweaked_latlons.nc</stream_fldFileName_swindow_end>
<stream_fldFileName_gdd20_baseline cropcals_rx_adapt=".true." stream_gdd20_seasons=".false.">lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc</stream_fldFileName_gdd20_baseline>
<stream_fldFileName_gdd20_baseline cropcals_rx_adapt=".true." stream_gdd20_seasons=".false.">lnd/clm2/cropdata/calendars/processed/gdd20_baseline.c251120.tweaked_latlons.nc</stream_fldFileName_gdd20_baseline>
<stream_fldFileName_gdd20_baseline cropcals_rx_adapt=".true." stream_gdd20_seasons=".false." lnd_tuning_mode="clm4_5_GSWP3v1">lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc</stream_fldFileName_gdd20_baseline>
<stream_fldFileName_gdd20_baseline cropcals_rx_adapt=".true." stream_gdd20_seasons=".false." lnd_tuning_mode="clm5_0_GSWP3v1">lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc</stream_fldFileName_gdd20_baseline>
<stream_fldFileName_gdd20_baseline cropcals_rx_adapt=".true." stream_gdd20_seasons=".false." lnd_tuning_mode="clm6_0_GSWP3v1">lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc</stream_fldFileName_gdd20_baseline>
<stream_fldFileName_gdd20_baseline cropcals_rx_adapt=".true." stream_gdd20_seasons=".true.">lnd/clm2/cropdata/calendars/processed/gdd20bl.copied_from.gdds_20230829_161011.v2.tweaked_latlons.nc</stream_fldFileName_gdd20_baseline>
<stream_fldFileName_gdd20_season_start stream_gdd20_seasons=".true.">lnd/clm2/cropdata/calendars/processed/sdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-hcru_hcru_mt13.2000-2000.20230728_165845.tweaked_latlons.nc</stream_fldFileName_gdd20_season_start>
<stream_fldFileName_gdd20_season_end stream_gdd20_seasons=".true.">lnd/clm2/cropdata/calendars/processed/hdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-hcru_hcru_mt13.2000-2000.20230728_165845.tweaked_latlons.nc</stream_fldFileName_gdd20_season_end>
Expand Down
2 changes: 1 addition & 1 deletion cime_config/config_component.xml
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ Caveats:

<entry id="NEONVERSION">
<type>char</type>
<valid_values>v1,v2,v3,latest</valid_values>
<valid_values>v1,v2,v3,v4,latest</valid_values>
<default_value>latest</default_value>
<group>run_component_ctsm</group>
<file>env_run.xml</file>
Expand Down
4 changes: 2 additions & 2 deletions doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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 <Pageetal2002>`) 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 <Turetskyetal2004>`).
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 <Pageetal2002>`) 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 <Turetskyetal2004>`).

For tropical peat fires, :math:`f_{cli,p}` is set as a function of long-term precipitation :math:`P_{60d}` :

Expand Down
2 changes: 1 addition & 1 deletion python/ctsm/site_and_regional/tower_arg_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
8 changes: 1 addition & 7 deletions src/biogeochem/CNFireLi2024Mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
!
Expand Down
19 changes: 16 additions & 3 deletions src/biogeophys/CanopyFluxesMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
!------------------------------------------------------------------------------
Expand Down Expand Up @@ -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
Expand Down
Loading