diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm
index c3f1866bf4..02de98ea6e 100755
--- a/bld/CLMBuildNamelist.pm
+++ b/bld/CLMBuildNamelist.pm
@@ -1688,6 +1688,7 @@ sub process_namelist_inline_logic {
setup_logic_cnmatrix($opts, $nl_flags, $definition, $defaults, $nl, $envxml_ref);
setup_logic_spinup($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_supplemental_nitrogen($opts, $nl_flags, $definition, $defaults, $nl);
+ setup_logic_c_isotope($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_snowpack($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_fates($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_z0param($opts, $nl_flags, $definition, $defaults, $nl);
@@ -1737,7 +1738,6 @@ sub process_namelist_inline_logic {
# namelist group: ch4par_in #
###############################
setup_logic_methane($opts, $nl_flags, $definition, $defaults, $nl);
- setup_logic_c_isotope($opts, $nl_flags, $definition, $defaults, $nl);
###############################
# namelist group: ndepdyn_nml #
@@ -3175,10 +3175,11 @@ sub setup_logic_do_grossunrep {
my $var = 'do_grossunrep';
- # Start by assuming a default value of '.true.'. Then check a number of
+ # Start by assuming a default value of '.false.'. Then check a number of
# conditions under which do_grossunrep cannot be true. Under these
- # conditions: (1) set default value to '.false.'; (2) make sure that the
+ # conditions: (1) set default value to '.false.' again; (2) make sure that the
# value is indeed false (e.g., that the user didn't try to set it to true).
+ # Ideally the default value would be set in namelist_defaults
my $default_val = ".false.";
@@ -3703,63 +3704,53 @@ sub setup_logic_c_isotope {
#
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_c13', 'bgc_mode'=>$nl_flags->{'bgc_mode'}, 'phys'=>$nl_flags->{'phys'});
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_c14', 'bgc_mode'=>$nl_flags->{'bgc_mode'}, 'phys'=>$nl_flags->{'phys'});
my $use_c13 = $nl->get_value('use_c13');
my $use_c14 = $nl->get_value('use_c14');
if ( $nl_flags->{'bgc_mode'} ne "sp" && $nl_flags->{'bgc_mode'} ne "fates" ) {
if ( $nl_flags->{'bgc_mode'} ne "bgc" ) {
- if ( defined($use_c13) && &value_is_true($use_c13) ) {
+ if ( &value_is_true($use_c13) ) {
$log->warning("use_c13 is ONLY scientifically validated with the bgc=BGC configuration" );
}
- if ( defined($use_c14) && &value_is_true($use_c14) ) {
+ if ( &value_is_true($use_c14) ) {
$log->warning("use_c14 is ONLY scientifically validated with the bgc=BGC configuration" );
}
}
- if ( defined($use_c14) ) {
- if ( &value_is_true($use_c14) ) {
- my $use_c14_bombspike = $nl->get_value('use_c14_bombspike');
- if ( defined($use_c14_bombspike) && &value_is_true($use_c14_bombspike) ) {
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'atm_c14_filename',
- 'use_c14'=>$use_c14, 'use_cn'=>$nl_flags->{'use_cn'}, 'use_c14_bombspike'=>$nl->get_value('use_c14_bombspike'),
- 'ssp_rcp'=>$nl_flags->{'ssp_rcp'} );
- }
- } else {
- if ( defined($nl->get_value('use_c14_bombspike')) ||
- defined($nl->get_value('atm_c14_filename')) ) {
- $log->fatal_error("use_c14 is FALSE and use_c14_bombspike or atm_c14_filename set");
- }
+ if ( &value_is_true($use_c14) ) {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_c14_bombspike', 'bgc_mode'=>$nl_flags->{'bgc_mode'}, 'phys'=>$nl_flags->{'phys'});
+ my $use_c14_bombspike = $nl->get_value('use_c14_bombspike');
+ if ( &value_is_true($use_c14_bombspike) ) {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'atm_c14_filename',
+ 'use_c14'=>$use_c14, 'use_cn'=>$nl_flags->{'use_cn'}, 'use_c14_bombspike'=>$nl->get_value('use_c14_bombspike'),
+ 'ssp_rcp'=>$nl_flags->{'ssp_rcp'} );
}
} else {
if ( defined($nl->get_value('use_c14_bombspike')) ||
defined($nl->get_value('atm_c14_filename')) ) {
- $log->fatal_error("use_c14 NOT set to .true., but use_c14_bompspike/atm_c14_filename defined.");
+ $log->fatal_error("use_c14 is FALSE and use_c14_bombspike or atm_c14_filename set");
}
}
- if ( defined($use_c13) ) {
- if ( &value_is_true($use_c13) ) {
- my $use_c13_timeseries = $nl->get_value('use_c13_timeseries');
- if ( defined($use_c13_timeseries) && &value_is_true($use_c13_timeseries) ) {
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'atm_c13_filename',
- 'use_c13'=>$use_c13, 'use_cn'=>$nl_flags->{'use_cn'}, 'use_c13_timeseries'=>$nl->get_value('use_c13_timeseries'),
- 'ssp_rcp'=>$nl_flags->{'ssp_rcp'} );
- }
- } else {
- if ( defined($nl->get_value('use_c13_timeseries')) ||
- defined($nl->get_value('atm_c13_filename')) ) {
- $log->fatal_error("use_c13 is FALSE and use_c13_timeseries or atm_c13_filename set");
- }
+ if ( &value_is_true($use_c13) ) {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_c13_timeseries', 'bgc_mode'=>$nl_flags->{'bgc_mode'}, 'phys'=>$nl_flags->{'phys'});
+ my $use_c13_timeseries = $nl->get_value('use_c13_timeseries');
+ if ( &value_is_true($use_c13_timeseries) ) {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'atm_c13_filename',
+ 'use_c13'=>$use_c13, 'use_cn'=>$nl_flags->{'use_cn'}, 'use_c13_timeseries'=>$nl->get_value('use_c13_timeseries'),
+ 'ssp_rcp'=>$nl_flags->{'ssp_rcp'} );
}
} else {
if ( defined($nl->get_value('use_c13_timeseries')) ||
defined($nl->get_value('atm_c13_filename')) ) {
- $log->fatal_error("use_c13 NOT set to .true., but use_c13_bompspike/atm_c13_filename defined.");
+ $log->fatal_error("use_c13 is FALSE and use_c13_timeseries or atm_c13_filename set");
}
}
} else {
- if ( defined($use_c13) ||
- defined($use_c14) ||
- defined($nl->get_value('use_c14_bombspike')) ||
+ if ( &value_is_true($use_c13) ||
+ &value_is_true($use_c14) ||
+ &value_is_true($nl->get_value('use_c14_bombspike')) ||
defined($nl->get_value('atm_c14_filename')) ||
- defined($nl->get_value('use_c13_timeseries')) ||
+ &value_is_true($nl->get_value('use_c13_timeseries')) ||
defined($nl->get_value('atm_c13_filename')) ) {
$log->fatal_error("bgc=sp and C isotope namelist variables were set, both can't be used at the same time");
}
diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml
index 574b6feec9..50e3cf68ad 100644
--- a/bld/namelist_files/namelist_defaults_ctsm.xml
+++ b/bld/namelist_files/namelist_defaults_ctsm.xml
@@ -110,6 +110,17 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
Medlyn2011Ball-Berry1987
+
+.false.
+.false.
+.false.
+.false.
+
+.true.
+.true.
+.true.
+.true.
+
lnd/clm2/isotopes/atm_delta_C13_CMIP6_1850-2015_yearly_v2.0_c190528.nclnd/clm2/isotopes/atm_delta_C13_CMIP6_SSP119_1850-2100_yearly_c181209.nc
@@ -484,13 +495,11 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
Jordan1991Sturm1997
-
Jordan1991
-Sturm1997
+Jordan1991
-
Jordan1991
-Jordan1991
+Sturm1997
-lnd/clm2/paramdata/ctsm60_params.c250311.nc
+lnd/clm2/paramdata/ctsm5.3.041.Nfix_params.v13.c250221_upplim250.nclnd/clm2/paramdata/clm50_params.c250311.nclnd/clm2/paramdata/clm45_params.c250311.nc
@@ -1288,15 +1297,15 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
lnd/clm2/initdata_esmf/ctsm5.3/ctsm53019_f09_BNF_pSASU.clm2.r.0161-01-01-00000.nc
+ phys="clm6_0" use_init_interp=".true."
+>lnd/clm2/initdata_esmf/ctsm5.4/ctsm53041_54surfdata_snowTherm_100_pSASU.clm2.r.0161-01-01-00000_64bitoffset.nc
lnd/clm2/initdata_esmf/ctsm5.3/ctsm53019_f09_BNF_pSASU.clm2.r.0161-01-01-00000.nc
+>lnd/clm2/initdata_esmf/ctsm5.4/ctsm53041_54surfdata_ne30_102_pSASU.clm2.r.0081-01-01-00000_64bitoffset.nc
lnd/clm2/initdata_esmf/ctsm5.3/ctsm53019_f09_BNF_hist.clm2.r.2000-01-01-00000.nc
+>lnd/clm2/initdata_esmf/ctsm5.4/ctsm53041_54surfdata_ne30_102_HIST.clm2.r.2000-01-01-00000.nc
lnd/clm2/initdata_esmf/ctsm5.3/ctsm53019_f09_BNF_hist.clm2.r.2000-01-01-00000.nc
+>lnd/clm2/initdata_esmf/ctsm5.4/ctsm53041_54surfdata_ne30_102_HIST.clm2.r.2000-01-01-00000.nc
diff --git a/cime_config/testdefs/ExpectedTestFails.xml b/cime_config/testdefs/ExpectedTestFails.xml
index 79add82fed..9d41952366 100644
--- a/cime_config/testdefs/ExpectedTestFails.xml
+++ b/cime_config/testdefs/ExpectedTestFails.xml
@@ -62,6 +62,20 @@
+
+
+ FAIL
+ #3252
+ Works with finidat = 'ctsm53041_54surfdata_snowTherm_100_pSASU.clm2.r.0161-01-01-00000.nc' and fails with finidat = 'ctsm53041_54surfdata_snowTherm_100_pSASU.clm2.r.0161-01-01-00000_64bitoffset.nc'.
+
+
+
+
+ FAIL
+ #3252
+ Works with finidat = 'ctsm53041_54surfdata_snowTherm_100_pSASU.clm2.r.0161-01-01-00000.nc' and fails with finidat = 'ctsm53041_54surfdata_snowTherm_100_pSASU.clm2.r.0161-01-01-00000_64bitoffset.nc'.
+
+ FAIL
diff --git a/cime_config/testdefs/testlist_clm.xml b/cime_config/testdefs/testlist_clm.xml
index 6bb09b5833..943cd37e65 100644
--- a/cime_config/testdefs/testlist_clm.xml
+++ b/cime_config/testdefs/testlist_clm.xml
@@ -150,7 +150,7 @@
-
+
@@ -561,7 +561,7 @@
-
+
@@ -569,7 +569,7 @@
-
+
@@ -577,7 +577,7 @@
-
+
@@ -1349,7 +1349,7 @@
-
+
@@ -1605,7 +1605,7 @@
-
+
@@ -2283,7 +2283,7 @@
-
+
@@ -2292,7 +2292,7 @@
-
+
@@ -2759,7 +2759,7 @@
-
+
@@ -2889,7 +2889,7 @@
-
+
@@ -2931,7 +2931,7 @@
-
+
@@ -2946,7 +2946,7 @@
-
+
@@ -3382,7 +3382,7 @@
-
+
@@ -3431,7 +3431,7 @@
-
+
@@ -4398,7 +4398,7 @@
-
+
diff --git a/doc/ChangeLog b/doc/ChangeLog
index f16cfe585a..0c1927c239 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,4 +1,96 @@
===============================================================
+Tag name: ctsm5.3.060
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Tue 24 Jun 2025 02:13:05 PM MDT
+One-line Summary: Preliminary update of ctsm54 defaults (answer changing)
+
+Purpose and description of changes
+----------------------------------
+
+ Brings to master some of the work done in #3206, which I merged to the ctsm5.4 alpha branch recently as tag alpha-ctsm5.4.CMIP7.02.ctsm5.3.055.
+
+ Allows Cecile to run coupled without having to adjust clm things manually: updates namelist defaults and IC files that have been limited to the ctsm5.4 branch so far.
+
+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
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
+ Resolves #3116 modify snow thermal conductivity defaults
+ Resolves #3005 ctsm54 initial condition files
+
+Notes of particular relevance for users
+---------------------------------------
+Changes made to namelist defaults (e.g., changed parameter values):
+ a3ce6a7 changes the default snow thermal conductivity schemes over lakes and glaciers in clm6 cases
+
+Changes to the datasets (e.g., parameter, surface or initial files):
+ a75e488 introduces new paramfile to clm6 cases
+ 3a8c432 introduces new f09 and ne30 finidat files for 1850 and 2000 clm6 cases
+ Reverted preexisting changes to the default raw datasets that came in with #3206 (from the ctsm54 branch)
+ Reverted changes to the f09 and ne30 fsurdat/landuse files that came in with b1890ac
+
+Changes to documentation:
+ None, yet
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+ The next 2 tests are now labeled EXPECTED FAILURE in the RUN phase, to be addressed in issue #3252:
+ LII2FINIDATAREAS_D_P256x2_Ld1.f09_g17.I1850Clm50BgcCrop.derecho_intel.clm-default--clm-matrixcnOn_ignore_warnings
+ LII2FINIDATAREAS_D_P256x2_Ld1.f09_g17.I1850Clm50BgcCrop.derecho_intel.clm-default
+
+Testing summary:
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ derecho - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- OK (see Changes to tests above)
+ izumi ------- OK
+
+ fates tests: (-c fates-sci.1.84.0_api.40.0.0-ctsm5.3.051 -g fates-sci.1.84.0_api.40.0.0-ctsm5.3.060)
+ derecho ----- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: Yes
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: various
+ - what platforms/compilers: all
+ - nature of change: larger than roundoff/same climate
+
+ See above in changes to namelist defaults and datasets for the sources of change.
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/3268
+
+===============================================================
+===============================================================
Tag name: ctsm5.3.059
Originator(s): erik (Erik Kluzek)
Date: Mon 23 Jun 2025 01:39:37 AM MDT
diff --git a/doc/ChangeSum b/doc/ChangeSum
index f5bfed6ef6..522c814f4a 100644
--- a/doc/ChangeSum
+++ b/doc/ChangeSum
@@ -1,5 +1,6 @@
Tag Who Date Summary
============================================================================================================================
+ ctsm5.3.060 slevis 06/24/2025 Preliminary update of ctsm54 defaults (answer changing)
ctsm5.3.059 erik 06/23/2025 Bring in various cleanup efforts found in previous testing after the chill changes came in
ctsm5.3.058 samrabin 06/16/2025 Fix clm6 compset aliases
ctsm5.3.057 glemieux 06/13/2025 Fix PEM test for on-the-fly parameter file generation
diff --git a/python/ctsm/toolchain/gen_mksurfdata_jobscript_single.py b/python/ctsm/toolchain/gen_mksurfdata_jobscript_single.py
index d517ecf244..c3f762380e 100755
--- a/python/ctsm/toolchain/gen_mksurfdata_jobscript_single.py
+++ b/python/ctsm/toolchain/gen_mksurfdata_jobscript_single.py
@@ -37,7 +37,7 @@ def base_get_parser(default_js_name="mksurfdata_jobscript_single.sh"):
default_account = os.environ.get("ACCOUNT")
if default_account is None:
- default_account = "P93300641"
+ default_account = "P93300041"
parser.add_argument(
"--account",
help="""account number (default: %(default)s)""",