From 80f4c016a34a97a13d2c62cae92fe0fede0aea62 Mon Sep 17 00:00:00 2001 From: wwieder Date: Fri, 14 Apr 2023 10:52:15 -0600 Subject: [PATCH 01/27] append case names with optional experiment --- tools/site_and_regional/run_neon.py | 40 ++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/tools/site_and_regional/run_neon.py b/tools/site_and_regional/run_neon.py index 50f0640d03..38a06b5a6d 100755 --- a/tools/site_and_regional/run_neon.py +++ b/tools/site_and_regional/run_neon.py @@ -19,10 +19,10 @@ 2) Make the case for the specific neon site(s). 3) Make changes to the case, for: a. AD spinup - b. post-AD spinup + b. post-AD spinup c. transient - #--------------- - d. SASU or Matrix spinup + #--------------- + d. SASU or Matrix spinup 4) Build and submit the case. ------------------------------------------------------------------- @@ -61,7 +61,7 @@ import argparse import re import subprocess -import pandas as pd +import pandas as pd import glob import datetime from getpass import getuser @@ -193,6 +193,18 @@ def get_parser(args, description, valid_neon_sites): default="transient", ) + parser.add_argument( + "--experiment", + help=""" + Appends the case name with string for model experiment + """, + action="store", + dest="experiment", + type=str, + required=False, + default=None, + ) + parser.add_argument( "--run-length", help=""" @@ -251,7 +263,7 @@ def get_parser(args, description, valid_neon_sites): dest="user_version", required = False, type = str, - choices= ['v1','v2'], + choices= ['v1','v2','v3'], ) @@ -294,6 +306,7 @@ def get_parser(args, description, valid_neon_sites): neon_sites, args.output_root, args.run_type, + args.experiment, args.overwrite, run_length, base_case_root, @@ -457,6 +470,7 @@ def run_case( setup_only=False, no_batch=False, rerun=False, + experiment=False, ): user_mods_dirs = [ os.path.join( @@ -475,9 +489,15 @@ def run_case( print ("using this version:", version) - case_root = os.path.abspath( - os.path.join(base_case_root, "..", self.name + "." + run_type) - ) + if experiment == None: + case_root = os.path.abspath( + os.path.join(base_case_root, "..", self.name + "." + run_type) + ) + else: + case_root = os.path.abspath( + os.path.join(base_case_root, "..", self.name + "." + experiment + "." + run_type) + ) + rundir = None if os.path.isdir(case_root): if overwrite: @@ -760,6 +780,7 @@ def main(description): site_list, output_root, run_type, + experiment, overwrite, run_length, base_case_root, @@ -767,7 +788,7 @@ def main(description): setup_only, no_batch, rerun, - user_version + user_version, ) = get_parser(sys.argv, description, valid_neon_sites) if output_root: @@ -809,6 +830,7 @@ def main(description): setup_only, no_batch, rerun, + experiment, ) From 0aa921afc3b723d38a3ecbfc67462f2cbeece964 Mon Sep 17 00:00:00 2001 From: wwieder Date: Mon, 17 Apr 2023 10:31:52 -0600 Subject: [PATCH 02/27] add experiment flag for run_neon --- tools/site_and_regional/run_neon.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/site_and_regional/run_neon.py b/tools/site_and_regional/run_neon.py index 38a06b5a6d..b09018ac66 100755 --- a/tools/site_and_regional/run_neon.py +++ b/tools/site_and_regional/run_neon.py @@ -758,7 +758,6 @@ def parse_neon_listing(listing_file, valid_neon_sites): for line in finidatlist["object"]: if site_name in line: finidat = line.split(",")[0].split("/")[-1] - neon_site = NeonSite( site_name, start_year, end_year, start_month, end_month, finidat ) From f5db7a214b1f9801fe333f51fc6080984f3fa6de Mon Sep 17 00:00:00 2001 From: wwieder Date: Tue, 18 Apr 2023 13:14:58 -0600 Subject: [PATCH 03/27] correction to get postAD and transient from postAD working --- tools/site_and_regional/run_neon.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tools/site_and_regional/run_neon.py b/tools/site_and_regional/run_neon.py index b09018ac66..d2e243066d 100755 --- a/tools/site_and_regional/run_neon.py +++ b/tools/site_and_regional/run_neon.py @@ -489,14 +489,11 @@ def run_case( print ("using this version:", version) - if experiment == None: - case_root = os.path.abspath( - os.path.join(base_case_root, "..", self.name + "." + run_type) - ) - else: - case_root = os.path.abspath( - os.path.join(base_case_root, "..", self.name + "." + experiment + "." + run_type) - ) + if experiment != None: + self.name = self.name + "." + experiment + case_root = os.path.abspath( + os.path.join(base_case_root, "..", self.name + "." + run_type) + ) rundir = None if os.path.isdir(case_root): @@ -623,6 +620,7 @@ def set_ref_case(self, case): refrundir + "/{}{}.clm2.r.*.nc".format(self.name, root) ): m = re.search("(\d\d\d\d-\d\d-\d\d)-\d\d\d\d\d.nc", reffile) + if m: refdate = m.group(1) symlink_force(reffile, os.path.join(rundir, os.path.basename(reffile))) From 669a651b41012a74c7288534299c392a577f28cc Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 20 Nov 2025 15:32:48 -0700 Subject: [PATCH 04/27] Update default CRU-JRA stream_fldfilename_cultivar_gdds. Derived from half-degree run started 1959-01-01, forced with CRU-JRA, at tag alpha-ctsm5.4.CMIP7.15.ctsm5.3.079. Growing seasons defined by files [sh]dates_ggcmi_crop_calendar_phase3_v1.01_nninterp-hcru_hcru_mt13.2000-2000.20230728_165845.nc. Maximum growing season length in generate_gdds.py derived from mxmat in clm60_params.crop_omni02.c251120.nc with no 'cushion'. generate_gdds.py first season 1995 and last season 2005. --- bld/namelist_files/namelist_defaults_ctsm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 46f3c3eeaf..3ccf8ab3b6 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2230,7 +2230,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 From f03f38367a5a6f939c4ee8308db908b511e5f7a6 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 20 Nov 2025 15:54:15 -0700 Subject: [PATCH 05/27] Update default CRU-JRA stream_fldFileName_gdd20_baseline. Derived from half-degree run started 1959-01-01, forced with CRU-JRA, at tag alpha-ctsm5.4.CMIP7.15.ctsm5.3.079. generate_gdd20_baseline -v GDDB20 -y1 1995 -yN 2005. --- bld/namelist_files/namelist_defaults_ctsm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 3ccf8ab3b6..5dfd73094a 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2245,7 +2245,7 @@ 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/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 From 8547e796139f6703eedcf95caba6e42e3f64cff5 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 20 Nov 2025 16:20:15 -0700 Subject: [PATCH 06/27] Update clm6 paramfile: omni02 crop params. --- bld/namelist_files/namelist_defaults_ctsm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 5dfd73094a..e9a6d76a91 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -572,7 +572,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/clm60_params.crop_omni02.c251120.nc lnd/clm2/paramdata/clm50_params.c250311.nc lnd/clm2/paramdata/clm45_params.c250311.nc From cb95678630e570239aaf346627d1b620111031fc Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 20 Nov 2025 16:56:55 -0700 Subject: [PATCH 07/27] Use old stream_fldFileName_gdd20_baseline for GSWP3 tunings. --- bld/namelist_files/namelist_defaults_ctsm.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index e9a6d76a91..6ef265e6d4 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2246,6 +2246,9 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 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/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 From 368b3d0657b58ff29195d486a4ffbd0198ff5c36 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Fri, 21 Nov 2025 10:04:13 -0700 Subject: [PATCH 08/27] CLMBuildNamelist: Account for lnd_tuning_mode in setting stream_fldFileName_gdd20_baseline. --- bld/CLMBuildNamelist.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index d83eaf088d..642bd7c2e4 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -4401,7 +4401,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'}); } } From 17ca65b77b646f9f63afdcfe43c6822da896fa78 Mon Sep 17 00:00:00 2001 From: wwieder Date: Mon, 24 Nov 2025 12:54:59 -0700 Subject: [PATCH 09/27] fire namelist defaults requested in #3608 --- bld/namelist_files/namelist_defaults_ctsm.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 6ef265e6d4..c61a5735b4 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -405,9 +405,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 @@ -417,7 +417,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 From d7928dacfd975ebc790516683cd790520bbaebbc Mon Sep 17 00:00:00 2001 From: wwieder Date: Mon, 24 Nov 2025 12:57:09 -0700 Subject: [PATCH 10/27] change default snow_thermal_cond_glc_method requested in #3598 --- bld/namelist_files/namelist_defaults_ctsm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index c61a5735b4..8271be216b 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -527,7 +527,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case). Sturm1997 Jordan1991 -Jordan1991 +Sturm1997 Jordan1991 Sturm1997 From 1f417fdbfa636bd0d02fb5a1d5a46dca8e65c2db Mon Sep 17 00:00:00 2001 From: wwieder Date: Mon, 24 Nov 2025 13:06:34 -0700 Subject: [PATCH 11/27] Fire code cleanup requested in #3608 --- src/biogeochem/CNFireLi2024Mod.F90 | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) 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 ! From d4439c859eadfc46546961966b97a2cfd51c4e1b Mon Sep 17 00:00:00 2001 From: wwieder Date: Mon, 24 Nov 2025 13:24:07 -0700 Subject: [PATCH 12/27] update cism per #3598 --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index f0e6ed2ef6..53390e63f4 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 From 00f16a4b34861622cac0169ee11a5c6aeb01e95b Mon Sep 17 00:00:00 2001 From: wwieder Date: Mon, 24 Nov 2025 14:25:26 -0700 Subject: [PATCH 13/27] update parameter file --- bld/namelist_files/namelist_defaults_ctsm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 8271be216b..068d57d23e 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -572,7 +572,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case). -lnd/clm2/paramdata/clm60_params.crop_omni02.c251120.nc +lnd/clm2/paramdata/ctsm60_params.c251124.nc lnd/clm2/paramdata/clm50_params.c250311.nc lnd/clm2/paramdata/clm45_params.c250311.nc From 362f6fad1211f2fd4e79f31ea24acbaa8c543273 Mon Sep 17 00:00:00 2001 From: wwieder Date: Tue, 25 Nov 2025 06:13:48 -0700 Subject: [PATCH 14/27] update cism --- components/cism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From fc9fd17c9c92e6869a2b576d32dea9299c1261bd Mon Sep 17 00:00:00 2001 From: Samuel Levis Date: Mon, 1 Dec 2025 20:12:23 -0700 Subject: [PATCH 15/27] Update to ccs_config1.0.66 --- .gitmodules | 2 +- ccs_config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 53390e63f4..2bc9a4a25a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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/ccs_config b/ccs_config index d686615fac..76370cc085 160000 --- a/ccs_config +++ b/ccs_config @@ -1 +1 @@ -Subproject commit d686615faceac30705b199f592808e3558ac176b +Subproject commit 76370cc08587fd653458cdfb2e0b220b3168ded6 From db4d8ad56503f071b624e6954b8288008e51475d Mon Sep 17 00:00:00 2001 From: Samuel Levis Date: Tue, 2 Dec 2025 12:46:48 -0700 Subject: [PATCH 16/27] Handpicked Will's mods from #3597 branch NEON_v4 --- cime_config/config_component.xml | 2 +- python/ctsm/site_and_regional/tower_arg_parse.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/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( From 995d9ab421497ddbf16e2c3b503a2be80cf56683 Mon Sep 17 00:00:00 2001 From: Samuel Levis Date: Tue, 2 Dec 2025 13:44:16 -0700 Subject: [PATCH 17/27] Update formula in documentation to be consistent with this PR --- doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..bf4fe1aa9a 100644 --- a/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst +++ b/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst @@ -354,7 +354,7 @@ 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 `). From b42fafc9a8070b5b4560610e73384e07fe188024 Mon Sep 17 00:00:00 2001 From: Samuel Levis Date: Tue, 2 Dec 2025 13:47:22 -0700 Subject: [PATCH 18/27] Update comment in documentation to make consistent with formula change --- doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 bf4fe1aa9a..0483567ff5 100644 --- a/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst +++ b/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst @@ -356,7 +356,7 @@ The burned area due to peat fires is given as :math:`{A}_{b}`: 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}` : From 918af16f008c30614637d2c53ee8537fe527f24e Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Tue, 2 Dec 2025 15:49:37 -0700 Subject: [PATCH 19/27] Fix for RRTMGP errors caused by high surface temperatures. --- src/biogeophys/CanopyFluxesMod.F90 | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/biogeophys/CanopyFluxesMod.F90 b/src/biogeophys/CanopyFluxesMod.F90 index 3b0d990b21..f22c7e5ce3 100644 --- a/src/biogeophys/CanopyFluxesMod.F90 +++ b/src/biogeophys/CanopyFluxesMod.F90 @@ -754,6 +754,19 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp, 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. + ! The 0.1_r8 value is fairly arbitrary but has been effective in + ! avoiding RRTMGP errors in CESM3 development simulations. + if(elai(p) .lt. 0.1_r8) then + sa_leaf(p) = sa_leaf(p) + esai(p) + endif endif ! if using Satellite Phenology mode, calculate leaf and stem biomass From bb866403c89f1b7456a652895089a2cbc026a318 Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Wed, 3 Dec 2025 13:35:34 -0700 Subject: [PATCH 20/27] Human readability. --- src/biogeophys/CanopyFluxesMod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/biogeophys/CanopyFluxesMod.F90 b/src/biogeophys/CanopyFluxesMod.F90 index f22c7e5ce3..2194769e64 100644 --- a/src/biogeophys/CanopyFluxesMod.F90 +++ b/src/biogeophys/CanopyFluxesMod.F90 @@ -764,7 +764,7 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp, ! See https://github.com/ESCOMP/CTSM/issues/3589 for more info. ! The 0.1_r8 value is fairly arbitrary but has been effective in ! avoiding RRTMGP errors in CESM3 development simulations. - if(elai(p) .lt. 0.1_r8) then + if(elai(p) < 0.1_r8) then sa_leaf(p) = sa_leaf(p) + esai(p) endif endif From a33f75fa4499c1c6d09f721f63de065d8d823e6e Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Wed, 3 Dec 2025 13:43:57 -0700 Subject: [PATCH 21/27] Add min_lai parameter --- src/biogeophys/CanopyFluxesMod.F90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/biogeophys/CanopyFluxesMod.F90 b/src/biogeophys/CanopyFluxesMod.F90 index 2194769e64..dac6b1dbd9 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 !------------------------------------------------------------------------------ @@ -762,9 +764,9 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp, ! 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. - ! The 0.1_r8 value is fairly arbitrary but has been effective in + ! The 0.1_r8 value is arbitrary but has been effective in ! avoiding RRTMGP errors in CESM3 development simulations. - if(elai(p) < 0.1_r8) then + if(elai(p) < min_lai) then sa_leaf(p) = sa_leaf(p) + esai(p) endif endif From e944928f28e1ef6f4f85873ac60901d0422fdc8a Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Wed, 3 Dec 2025 14:24:32 -0700 Subject: [PATCH 22/27] Clarify comment --- src/biogeophys/CanopyFluxesMod.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/biogeophys/CanopyFluxesMod.F90 b/src/biogeophys/CanopyFluxesMod.F90 index dac6b1dbd9..1804c8d181 100644 --- a/src/biogeophys/CanopyFluxesMod.F90 +++ b/src/biogeophys/CanopyFluxesMod.F90 @@ -747,10 +747,10 @@ 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 From e02b9a5d47c0e5dde0a6bf26fc9120cbd041e033 Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Wed, 3 Dec 2025 14:45:01 -0700 Subject: [PATCH 23/27] Remove duplicate comment --- src/biogeophys/CanopyFluxesMod.F90 | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/biogeophys/CanopyFluxesMod.F90 b/src/biogeophys/CanopyFluxesMod.F90 index 1804c8d181..8b26100284 100644 --- a/src/biogeophys/CanopyFluxesMod.F90 +++ b/src/biogeophys/CanopyFluxesMod.F90 @@ -764,8 +764,6 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp, ! 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. - ! The 0.1_r8 value is arbitrary but has been effective in - ! avoiding RRTMGP errors in CESM3 development simulations. if(elai(p) < min_lai) then sa_leaf(p) = sa_leaf(p) + esai(p) endif From a8299997fda381c5d033bf53c4c3669ab3b3311a Mon Sep 17 00:00:00 2001 From: Samuel Levis Date: Thu, 11 Dec 2025 12:37:31 -0700 Subject: [PATCH 24/27] Draft ChangeLog/Sum --- doc/ChangeLog | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++ doc/ChangeSum | 1 + 2 files changed, 105 insertions(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index 1d44c7b7c9..518914f7ea 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,4 +1,108 @@ =============================================================== +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 + +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 From d5cbed588ce8b976fc74a2c99621855beeadc5cc Mon Sep 17 00:00:00 2001 From: Samuel Levis Date: Thu, 11 Dec 2025 13:08:14 -0700 Subject: [PATCH 25/27] Update WhatsNewInCTSM5.4.md to specify ctsm5.4.002 as release version --- WhatsNewInCTSM5.4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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`) From 9c67c0c2feeac1e91aa7085d3e74d09e59179df6 Mon Sep 17 00:00:00 2001 From: Erik Kluzek Date: Thu, 11 Dec 2025 15:28:28 -0700 Subject: [PATCH 26/27] Move the test that was in the warning list to the fatal list --- bld/unit_testers/build-namelist_test.pl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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", From af366adf5f8b33268e4144717021cab5bc9576d2 Mon Sep 17 00:00:00 2001 From: Samuel Levis Date: Thu, 11 Dec 2025 15:37:27 -0700 Subject: [PATCH 27/27] Update ChangeLog --- doc/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index 518914f7ea..926a8c008b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -45,6 +45,7 @@ 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 ---------------------------------------