diff --git a/.config_files.xml b/.config_files.xml
index c6dcbbcdb3..d1a592e5db 100644
--- a/.config_files.xml
+++ b/.config_files.xml
@@ -5,31 +5,31 @@
charunset
- $SRCROOT
- $SRCROOT
- $SRCROOT/components/cpl7/components/data_comps_mct/dlnd
- $SRCROOT/components/cdeps/dlnd
- $SRCROOT/components/cpl7/components/stub_comps_mct/slnd
- $SRCROOT/components/cpl7/components/xcpl_comps_mct/xlnd
- $CIMEROOT/src/components/stub_comps_nuopc/slnd
- $CIMEROOT/src/components/xcpl_comps_nuopc/xlnd
+ $SRCROOT
+ $SRCROOT/components/slim/
+ $SRCROOT/components/cpl7/components/data_comps_$COMP_INTERFACE/dlnd
+ $SRCROOT/components/cdeps/dlnd
+ $SRCROOT/components/cpl7/components/stub_comps_$COMP_INTERFACE/slnd
+ $CIMEROOT/CIME/non_py/src/components/stub_comps_$COMP_INTERFACE/slnd
+ $SRCROOT/components/cpl7/components/xcpl_comps_$COMP_INTERFACE/xlnd
+ $CIMEROOT/CIME/non_py/src/components/xcpl_comps_$COMP_INTERFACE/xlndcase_compsenv_case.xmlRoot directory of the case land model component
- $CIMEROOT/config/xml_schemas/config_compsets.xsd
+ $CIMEROOT/CIME/data/config/xml_schemas/config_compsets.xsd
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index a3795e4c6b..8708f8e0c2 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -1,4 +1,5 @@
# Ran python directory through black python formatter
+d229b5c6689efc4c2a6cef077515c4ccd5c18ff6
4cd83cb3ee6d85eb909403487abf5eeaf4d98911
0aa2957c1f8603c63fa30b11295c06cfddff44a5
2cdb380febb274478e84cd90945aee93f29fa2e6
@@ -7,3 +8,25 @@ e44dc469439e02e9ee582dab274d890ebdfab104
b88e1cd1b28e3609684c79a2ec0e88f26cfc362b
51c102c5df2e0ef971b5f8eeeb477567899af63a
7dacad70e74e2ec97f6492d4e7a3cb5dd498bcd7
+b771971e3299c4fa56534b93421f7a2b9c7282fd
+9de88bb57ea9855da408cbec1dc8acb9079eda47
+8bc4688e52ea23ef688e283698f70a44388373eb
+c8bd4c6f98c0b411391b4355da449507db3aab4e
+4ee49e3e516ca7dee5df378f65664f93a7db4415
+0207bc98dd5c75cd69a0e788bc53e41093712f5c
+e4d38681df23ccca0ae29581a45f8362574e0630
+0a5a9e803b56ec1bbd6232eff1c99dbbeef25eb7
+810cb346f05ac1aabfff931ab1a2b7b584add241
+5933b0018f8e29413e30dda9b906370d147bad45
+025d5e7c2e80263717fb029101d65cbbf261c3c4
+a9d96219902cf609636886c7073a84407f450d9a
+d866510188d26d51bcd6d37239283db690af7e82
+0dcd0a3c1abcaffe5529f8d79a6bc34734b195c7
+# Ran SystemTests and python/ctsm through black python formatter
+5364ad66eaceb55dde2d3d598fe4ce37ac83a93c
+8056ae649c1b37f5e10aaaac79005d6e3a8b2380
+0bc3f00115d86d026a977918661c93779b3b19f9
+540b256d1f3382f4619d7b0877c32d54ce5c40b6
+8a168bb0895f4f2421608dd2589398e13a6663e6
+183fc26a6691bbdf87f515dc47924a64be3ced9b
+6fccf682eaf718615407d9bacdd3903b8786a03d
diff --git a/.github/workflows/assign-to-project.yml b/.github/workflows/assign-to-project.yml
new file mode 100644
index 0000000000..225c223bde
--- /dev/null
+++ b/.github/workflows/assign-to-project.yml
@@ -0,0 +1,23 @@
+name: Auto Assign to Project(s)
+
+on:
+ issues:
+ types: [opened, labeled]
+ pull_request:
+ types: [opened, labeled]
+ issue_comment:
+ types: [created]
+
+jobs:
+ assign_high_priority:
+ runs-on: ubuntu-latest
+ name: Assign to High Priority project
+ steps:
+ - name: Assign issues and pull requests with priority-high label to project 25
+ uses: srggrs/assign-one-project-github-action@1.3.1
+ if: |
+ contains(github.event.issue.labels.*.name, 'priority: high') ||
+ contains(github.event.pull_request.labels.*.name, 'priority: high')
+ with:
+ project: 'https://github.com/ESCOMP/CTSM/projects/25'
+ column_name: 'Needs triage'
diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml
index a2115d2833..3759fa84c3 100644
--- a/.github/workflows/black.yml
+++ b/.github/workflows/black.yml
@@ -16,6 +16,22 @@ jobs:
# Use options and version identical to the conda environment
# Using pyproject.toml makes sure this testing is consistent with our python directory testing
options: "--check --config python/pyproject.toml"
- src: "./python"
- # Version should be coordinated with the ctsm_py conda environment under the python directory
+ src: "./python"
+ # Version should be coordinated with the ctsm_pylib conda environment under the python directory
+ version: "22.3.0"
+ # Actions identical to above for each directory and source file we need to check (arrays aren't allowed for src: field)
+ - uses: psf/black@stable
+ with:
+ options: "--check --config python/pyproject.toml"
+ src: "./cime_config/SystemTests"
+ version: "22.3.0"
+ - uses: psf/black@stable
+ with:
+ options: "--check --config python/pyproject.toml"
+ src: "./cime_config/buildlib"
+ version: "22.3.0"
+ - uses: psf/black@stable
+ with:
+ options: "--check --config python/pyproject.toml"
+ src: "./cime_config/buildnml"
version: "22.3.0"
diff --git a/.gitignore b/.gitignore
index 4b998f4dcb..ca701132a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -105,6 +105,13 @@ unit_test_build
/tools/mkmapdata/regrid.o*
/tools/mkmapdata/map*.nc
+# run_neon output directories
+/tools/site_and_regional/listing.csv
+/tools/site_and_regional/????/
+/tools/site_and_regional/????.ad/
+/tools/site_and_regional/????.postad/
+/tools/site_and_regional/????.transient/
+
# build output
*.o
*.mod
diff --git a/Externals.cfg b/Externals.cfg
index 491405a33b..539995247b 100644
--- a/Externals.cfg
+++ b/Externals.cfg
@@ -8,7 +8,7 @@ required = True
local_path = components/cism
protocol = git
repo_url = https://github.com/ESCOMP/CISM-wrapper
-tag = cismwrap_2_1_95
+tag = cismwrap_2_1_96
externals = Externals_CISM.cfg
required = True
@@ -23,7 +23,7 @@ required = True
local_path = components/mosart
protocol = git
repo_url = https://github.com/ESCOMP/MOSART
-tag = mosart1_0_45
+tag = mosart1_0_48
required = True
[mizuRoute]
@@ -34,9 +34,9 @@ hash = 34723c2
required = True
[ccs_config]
-tag = ccs_config_cesm0.0.38
+tag = ccs_config_noresm0.0.22
protocol = git
-repo_url = https://github.com/ESMCI/ccs_config_cesm.git
+repo_url = https://github.com/NorESMhub/ccs_config_noresm.git
local_path = ccs_config
required = True
@@ -44,18 +44,18 @@ required = True
local_path = cime
protocol = git
repo_url = https://github.com/ESMCI/cime
-tag = cime6.0.45
+tag = cime6.0.175
required = True
[cmeps]
-tag = cmeps0.13.71
+tag = cmeps0.14.43
protocol = git
repo_url = https://github.com/ESCOMP/CMEPS.git
local_path = components/cmeps
required = True
[cdeps]
-tag = cdeps0.12.65
+tag = cdeps1.0.24
protocol = git
repo_url = https://github.com/ESCOMP/CDEPS.git
local_path = components/cdeps
@@ -63,14 +63,14 @@ externals = Externals_CDEPS.cfg
required = True
[cpl7]
-tag = cpl7.0.14
+tag = cpl77.0.7
protocol = git
repo_url = https://github.com/ESCOMP/CESM_CPL7andDataComps
local_path = components/cpl7
required = True
[share]
-tag = share1.0.13
+tag = share1.0.17
protocol = git
repo_url = https://github.com/ESCOMP/CESM_share
local_path = share
@@ -84,7 +84,7 @@ local_path = libraries/mct
required = True
[parallelio]
-tag = pio2_5_7
+tag = pio2_6_2
protocol = git
repo_url = https://github.com/NCAR/ParallelIO
local_path = libraries/parallelio
diff --git a/Externals_CLM.cfg b/Externals_CLM.cfg
index 2284518c58..a6fae66356 100644
--- a/Externals_CLM.cfg
+++ b/Externals_CLM.cfg
@@ -2,7 +2,7 @@
local_path = src/fates
protocol = git
repo_url = https://github.com/NGEET/fates
-tag = sci.1.58.1_api.24.1.0
+tag = sci.1.71.0_api.33.0.0
required = True
[externals_description]
diff --git a/README.md b/README.md
index c56c0d4852..9de22e3663 100644
--- a/README.md
+++ b/README.md
@@ -43,9 +43,11 @@ CTSM code management is provided primarily by:
Software engineering team:
- [Erik Kluzek](https://github.com/ekluzek)
- [Bill Sacks](https://github.com/billsacks)
-- [Mariana Vertenstein](https://github.com/mvertens)
-- [Negin Sobhani](https://github.com/negin513)
- [Sam Levis](https://github.com/slevisconsulting)
+- [Adrianna Foster](https://github.com/adrifoster)
+- [Sam Rabin](https://github.com/samsrabin)
+- [Greg Lemieux](https://github.com/glemieux)
+- [Ryan Knox](https://github.com/rgknox)
Science team:
- [Dave Lawrence](https://github.com/dlawrenncar)
@@ -53,5 +55,7 @@ Science team:
- [Danica Lombardozzi](https://github.com/danicalombardozzi)
- [Keith Oleson](https://github.com/olyson)
- [Sean Swenson](https://github.com/swensosc)
-- [Mike Barlage](https://github.com/barlage)
+- [Jackie Shuman](https://github.com/jkshuman)
+- [Peter Lawrence](https://github.com/lawrencepj1)
- [Rosie Fisher](https://github.com/rosiealice)
+- Gordon Bonan
diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm
index d9eeb1e5a0..dae7b5f7f0 100755
--- a/bld/CLMBuildNamelist.pm
+++ b/bld/CLMBuildNamelist.pm
@@ -91,11 +91,13 @@ OPTIONS
This toggles off the namelist variable: use_cn
bgc = Carbon Nitrogen with methane, nitrification, vertical soil C,
CENTURY or MIMICS decomposition
- This toggles on the namelist variables:
+ This toggles on the namelist variables:
use_cn, use_lch4, use_nitrif_denitrif
- fates = FATES/Ecosystem Demography with below ground BGC
- This toggles on the namelist variables:
- use_fates
+ fates = FATES/Ecosystem Demography with below ground BGC
+ CENTURY or MIMICS decomposition
+ This toggles on the namelist variables:
+ use_fates. use_lch4 and use_nitrif_denitrif are optional
+
(Only for CLM4.5/CLM5.0)
-[no-]chk_res Also check [do NOT check] to make sure the resolution and
land-mask is valid.
@@ -168,7 +170,8 @@ OPTIONS
(default is 0) (standard option with land-ice model is 10)
-glc_use_antarctica Set defaults appropriate for runs that include Antarctica
-help [or -h] Print usage to STDOUT.
- -light_res Resolution of lightning dataset to use for CN fire (360x720 or 94x192)
+ -light_res Resolution of lightning dataset to use for CN or FATES fire (360x720, 106x174, or 94x192)
+ 106x174 can only be used for NEON sites
-lilac If CTSM is being run through LILAC (normally not used)
(LILAC is the Lightweight Infrastructure for Land-Atmosphere Coupling)
-ignore_ic_date Ignore the date on the initial condition files
@@ -610,7 +613,7 @@ sub process_namelist_user_input {
process_namelist_commandline_infile($opts, $definition, $nl, $envxml_ref);
# Apply the commandline options and make sure the user didn't change it above
- process_namelist_commandline_options($opts, $nl_flags, $definition, $defaults, $nl, $physv);
+ process_namelist_commandline_options($opts, $nl_flags, $definition, $defaults, $nl, $envxml_ref, $physv);
# The last two process command line arguments for usr_name and use_case
# They require that process_namelist_commandline_options was called before this
@@ -631,10 +634,10 @@ sub process_namelist_commandline_options {
# Obtain default values for the following build-namelist input arguments
# : res, mask, ssp_rcp, sim_year, sim_year_range, and clm_accelerated_spinup.
- my ($opts, $nl_flags, $definition, $defaults, $nl, $physv) = @_;
+ my ($opts, $nl_flags, $definition, $defaults, $nl, $envxml_ref, $physv) = @_;
setup_cmdl_chk_res($opts, $defaults);
- setup_cmdl_resolution($opts, $nl_flags, $definition, $defaults);
+ setup_cmdl_resolution($opts, $nl_flags, $definition, $defaults, $envxml_ref);
setup_cmdl_mask($opts, $nl_flags, $definition, $defaults, $nl);
setup_cmdl_configuration_and_structure($opts, $nl_flags, $definition, $defaults, $nl);
setup_cmdl_bgc($opts, $nl_flags, $definition, $defaults, $nl);
@@ -665,7 +668,7 @@ sub setup_cmdl_chk_res {
}
sub setup_cmdl_resolution {
- my ($opts, $nl_flags, $definition, $defaults) = @_;
+ my ($opts, $nl_flags, $definition, $defaults, $envxml_ref) = @_;
my $var = "res";
my $val;
@@ -683,11 +686,32 @@ sub setup_cmdl_resolution {
$val = "e_string( $nl_flags->{'res'} );
if ( ! $definition->is_valid_value( $var, $val ) ) {
my @valid_values = $definition->get_valid_values( $var );
- if ( ! defined($opts->{'clm_usr_name'}) || $nl_flags->{'res'} ne $opts->{'clm_usr_name'} ) {
+ if ( $nl_flags->{'res'} ne "CLM_USRDAT" ) {
$log->fatal_error("$var has a value ($val) that is NOT valid. Valid values are: @valid_values");
}
}
}
+ if ( $nl_flags->{'res'} eq "CLM_USRDAT" ) {
+ if ( ! defined($opts->{'clm_usr_name'}) ) {
+ $log->fatal_error("Resolution is CLM_USRDAT, but --clm_usr_name option is NOT set, and it is required for CLM_USRDAT resolutions");
+ }
+ }
+ #
+ # For NEON sites
+ #
+ $nl_flags->{'neon'} = ".false.";
+ $nl_flags->{'neonsite'} = "";
+ if ( $nl_flags->{'res'} eq "CLM_USRDAT" ) {
+ if ( $opts->{'clm_usr_name'} eq "NEON" ) {
+ $nl_flags->{'neon'} = ".true.";
+ $nl_flags->{'neonsite'} = $envxml_ref->{'NEONSITE'};
+ $log->verbose_message( "This is a NEON site with NEONSITE = " . $nl_flags->{'neonsite'} );
+ }
+ }
+ if ( ! &value_is_true( $nl_flags->{'neon'} ) ) {
+ $log->verbose_message( "This is NOT a NEON site" );
+ }
+
}
#-------------------------------------------------------------------------------
@@ -755,26 +779,12 @@ sub setup_cmdl_fates_mode {
}
}
- # The following variables may be set by the user and are compatible with use_fates
- # no need to set defaults, covered in a different routine
- my @list = ( "use_lch4" );
- foreach my $var ( @list ) {
- if ( defined($nl->get_value($var)) ) {
- $nl_flags->{$var} = $nl->get_value($var);
- $val = $nl_flags->{$var};
- my $group = $definition->get_group_name($var);
- $nl->set_variable_value($group, $var, $val);
- if ( ! $definition->is_valid_value( $var, $val ) ) {
- my @valid_values = $definition->get_valid_values( $var );
- $log->fatal_error("$var has a value ($val) that is NOT valid. Valid values are: @valid_values");
- }
- }
- }
} else {
# dis-allow fates specific namelist items with non-fates runs
my @list = ( "fates_spitfire_mode", "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys",
- "use_fates_cohort_age_tracking",
- "use_fates_inventory_init","use_fates_fixed_biogeog","use_fates_nocomp","use_fates_sp","fates_inventory_ctrl_filename","use_fates_logging","fates_parteh_mode","use_fates_tree_damage" );
+ "use_fates_cohort_age_tracking","use_fates_inventory_init","use_fates_fixed_biogeog",
+ "use_fates_nocomp","use_fates_sp","fates_inventory_ctrl_filename","use_fates_logging",
+ "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries" );
# dis-allow fates specific namelist items with non-fates runs
foreach my $var ( @list ) {
if ( defined($nl->get_value($var)) ) {
@@ -952,59 +962,84 @@ sub setup_cmdl_fire_light_res {
my $var = "light_res";
my $val = $opts->{$var};
+ if ( &value_is_true($nl->get_value('use_cn')) ) {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fire_method');
+ }
+ my $fire_method = remove_leading_and_trailing_quotes( $nl->get_value('fire_method') );
if ( $val eq "default" ) {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var,
'phys'=>$nl_flags->{'phys'}, 'use_cn'=>$nl_flags->{'use_cn'},
+ 'neon'=>$nl_flags->{'neon'},
'fates_spitfire_mode'=>$nl->get_value('fates_spitfire_mode'),
- 'use_fates'=>$nl_flags->{'use_fates'}, fire_method=>$nl->get_value('fire_method') );
+ 'use_fates'=>$nl_flags->{'use_fates'}, fire_method=>$fire_method );
$val = remove_leading_and_trailing_quotes( $nl->get_value($var) );
$nl_flags->{$var} = $val;
} else {
- my $fire_method = remove_leading_and_trailing_quotes( $nl->get_value('fire_method') );
if ( defined($fire_method) && $val ne "none" ) {
if ( $fire_method eq "nofire" ) {
$log->fatal_error("-$var option used with fire_method='nofire'. -$var can ONLY be used without the nofire option");
+ }
+ }
+ my $stream_fldfilename_lightng = remove_leading_and_trailing_quotes( $nl->get_value('stream_fldfilename_lightng') );
+ if ( defined($stream_fldfilename_lightng) && $val ne "none" ) {
+ $log->fatal_error("-$var option used while also explicitly setting stream_fldfilename_lightng filename which is a contradiction. Use one or the other not both.");
+ }
+ if ( ! &value_is_true($nl->get_value('use_cn')) ) {
+ if ( &value_is_true($nl_flags->{'use_fates'}) ) {
+ if ( $nl->get_value('fates_spitfire_mode') < 2) {
+ if ( $val ne "none" ) {
+ $log->fatal_error("-$var option used when FATES is on, but fates_spitfire_mode does NOT use lightning data");
+ }
+ } else {
+ if ( $val eq "none" ) {
+ $log->fatal_error("-$var option is set to none, but FATES is on and fates_spitfire_mode requires lightning data");
+ }
+ }
+ } else {
+ $log->fatal_error("-$var option used when FATES off and CN is NOT on. -$var can only be used when BGC is set to bgc or fates");
+ }
+ } else {
+ if ( $val eq "none" and $fire_method ne "nofire" ) {
+ $log->fatal_error("-$var option is set to none, but CN is on (with bgc: cn or bgc) which is a contradiction");
+ }
+ }
+ $nl_flags->{$var} = $val;
+ }
+ # Check that NEON data is only used for NEON sites
+ if ( $val eq "106x174" ) {
+ if ( ! &value_is_true($nl_flags->{'neon'}) ) {
+ if ( defined($opts->{'clm_usr_name'}) ) {
+ $log->warning("The NEON lightning dataset does NOT cover the entire globe, make sure it covers the region for your grid");
+ } else {
+ $log->fatal_error("The NEON lightning dataset can NOT be used for global grids or regions or points outside of its area as it does NOT cover the entire globe.");
}
- }
- my $stream_fldfilename_lightng = remove_leading_and_trailing_quotes( $nl->get_value('stream_fldfilename_lightng') );
- if ( defined($stream_fldfilename_lightng) && $val ne "none" ) {
- $log->fatal_error("-$var option used while also explicitly setting stream_fldfilename_lightng filename which is a contradiction. Use one or the other not both.");
- }
- if ( ! &value_is_true($nl->get_value('use_cn')) ) {
- $log->fatal_error("-$var option used CN is NOT on. -$var can only be used when CN is on (with bgc: cn or bgc)");
- }
- if ( &value_is_true($nl->get_value('use_cn')) && $val eq "none" ) {
- $log->fatal_error("-$var option is set to none, but CN is on (with bgc: cn or bgc) which is a contradiction");
- }
- $nl_flags->{$var} = $val;
- }
- my $group = $definition->get_group_name($var);
- $nl->set_variable_value($group, $var, quote_string($nl_flags->{$var}) );
- if ( ! $definition->is_valid_value( $var, $nl_flags->{$var}, 'noquotes'=>1 ) ) {
- my @valid_values = $definition->get_valid_values( $var );
- $log->fatal_error("$var has a value (".$nl_flags->{$var}.") that is NOT valid. Valid values are: @valid_values");
- }
- $log->verbose_message("Using $nl_flags->{$var} for $var.");
- #
- # Set flag if cn-fires are on or not
- #
- $var = "cnfireson";
- if ( &value_is_true($nl->get_value('use_cn')) ) {
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fire_method');
- }
- my $fire_method = remove_leading_and_trailing_quotes( $nl->get_value('fire_method') );
- if ( defined($fire_method) && ! &value_is_true($nl_flags->{'use_cn'}) && ! &value_is_true($nl_flags->{'use_fates'}) ) {
- $log->fatal_error("fire_method is being set while use_cn and use_fates are both false.");
- }
- if ( defined($fire_method) && $fire_method eq "nofire" ) {
- $nl_flags->{$var} = ".false.";
-# } elsif ( &value_is_true($nl->get_value('use_cn')) || $nl_flags->{'fates_spitfire_mode'} > 1 ) {
- } elsif ( &value_is_true($nl->get_value('use_cn')) || &value_is_true($nl->get_value('use_fates')) ) {
- $nl_flags->{$var} = ".true.";
- } else {
- $nl_flags->{$var} = ".false.";
- }
+ }
}
+ # check for valid values...
+ my $group = $definition->get_group_name($var);
+ $nl->set_variable_value($group, $var, quote_string($nl_flags->{$var}) );
+ if ( ! $definition->is_valid_value( $var, $nl_flags->{$var}, 'noquotes'=>1 ) ) {
+ my @valid_values = $definition->get_valid_values( $var );
+ $log->fatal_error("$var has a value (".$nl_flags->{$var}.") that is NOT valid. Valid values are: @valid_values");
+ }
+ $log->verbose_message("Using $nl_flags->{$var} for $var.");
+ #
+ # Set flag if cn-fires are on or not, only for BGC (not FATES)
+ #
+ $var = "cnfireson";
+ my $fire_method = remove_leading_and_trailing_quotes( $nl->get_value('fire_method') );
+ if ( defined($fire_method) && ! &value_is_true($nl_flags->{'use_cn'}) && ! &value_is_true($nl_flags->{'use_fates'}) ) {
+ $log->fatal_error("fire_method is being set while use_cn and use_fates are both false.");
+ }
+ if ( defined($fire_method) && $fire_method eq "nofire" ) {
+ $nl_flags->{$var} = ".false.";
+# } elsif ( &value_is_true($nl->get_value('use_cn')) || $nl_flags->{'fates_spitfire_mode'} > 1 ) {
+ } elsif ( &value_is_true($nl->get_value('use_cn')) || &value_is_true($nl->get_value('use_fates')) ) {
+ $nl_flags->{$var} = ".true.";
+ } else {
+ $nl_flags->{$var} = ".false.";
+ }
+}
#-------------------------------------------------------------------------------
@@ -1536,6 +1571,8 @@ sub process_namelist_inline_logic {
setup_logic_irrigate($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_start_type($opts, $nl_flags, $nl);
setup_logic_decomp_performance($opts, $nl_flags, $definition, $defaults, $nl);
+ setup_logic_roughness_methods($opts, $nl_flags, $definition, $defaults, $nl, $physv);
+ setup_logic_snicar_methods($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_snow($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_glacier($opts, $nl_flags, $definition, $defaults, $nl, $envxml_ref);
setup_logic_dynamic_plant_nitrogen_alloc($opts, $nl_flags, $definition, $defaults, $nl, $physv);
@@ -1550,7 +1587,7 @@ sub process_namelist_inline_logic {
setup_logic_grainproduct($opts, $nl_flags, $definition, $defaults, $nl, $physv);
setup_logic_soilstate($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_demand($opts, $nl_flags, $definition, $defaults, $nl);
- setup_logic_surface_dataset($opts, $nl_flags, $definition, $defaults, $nl);
+ setup_logic_surface_dataset($opts, $nl_flags, $definition, $defaults, $nl, $envxml_ref);
setup_logic_dynamic_subgrid($opts, $nl_flags, $definition, $defaults, $nl);
if ( remove_leading_and_trailing_quotes($nl_flags->{'clm_start_type'}) ne "branch" ) {
setup_logic_initial_conditions($opts, $nl_flags, $definition, $defaults, $nl, $physv);
@@ -1559,6 +1596,7 @@ sub process_namelist_inline_logic {
setup_logic_supplemental_nitrogen($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);
setup_logic_misc($opts, $nl_flags, $definition, $defaults, $nl);
#########################################
@@ -1592,9 +1630,14 @@ sub process_namelist_inline_logic {
setup_logic_urban($opts, $nl_flags, $definition, $defaults, $nl);
###############################
- # namelist group: crop #
+ # namelist group: crop_inparm #
+ ###############################
+ setup_logic_crop_inparm($opts, $nl_flags, $definition, $defaults, $nl);
+
+ ###############################
+ # namelist group: tillage #
###############################
- setup_logic_crop($opts, $nl_flags, $definition, $defaults, $nl);
+ setup_logic_tillage($opts, $nl_flags, $definition, $defaults, $nl, $physv);
###############################
# namelist group: ch4par_in #
@@ -1662,6 +1705,11 @@ sub process_namelist_inline_logic {
##################################
setup_logic_lai_streams($opts, $nl_flags, $definition, $defaults, $nl);
+ ##################################
+ # namelist group: cropcal_streams #
+ ##################################
+ setup_logic_cropcal_streams($opts, $nl_flags, $definition, $defaults, $nl);
+
##########################################
# namelist group: soil_moisture_streams #
##########################################
@@ -1687,11 +1735,6 @@ sub process_namelist_inline_logic {
#############################################
setup_logic_rooting_profile($opts, $nl_flags, $definition, $defaults, $nl);
- #############################################
- # namelist group: friction_velocity #
- #############################################
- setup_logic_friction_vel($opts, $nl_flags, $definition, $defaults, $nl);
-
#############################
# namelist group: cngeneral #
#############################
@@ -1711,6 +1754,11 @@ sub process_namelist_inline_logic {
#############################################
setup_logic_canopyfluxes($opts, $nl_flags, $definition, $defaults, $nl);
+ ##########################################################
+ # namelist group: friction_velocity (after canopyfluxes) #
+ ##########################################################
+ setup_logic_friction_vel($opts, $nl_flags, $definition, $defaults, $nl);
+
#############################################
# namelist group: canopyhydrology_inparm #
#############################################
@@ -1755,6 +1803,11 @@ sub process_namelist_inline_logic {
# namelist group: clm_initinterp_inparm #
#########################################
setup_logic_initinterp($opts, $nl_flags, $definition, $defaults, $nl);
+
+ ###############################
+ # namelist group: exice_streams #
+ ###############################
+ setup_logic_exice($opts, $nl_flags, $definition, $defaults, $nl);
}
#-------------------------------------------------------------------------------
@@ -1950,10 +2003,83 @@ sub setup_logic_decomp_performance {
#-------------------------------------------------------------------------------
+sub setup_logic_roughness_methods {
+ my ($opts, $nl_flags, $definition, $defaults, $nl, $physv) = @_;
+
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'z0param_method',
+ 'phys'=>$nl_flags->{'phys'} );
+
+ my $var = remove_leading_and_trailing_quotes( $nl->get_value("z0param_method") );
+ if ( $var ne "Meier2022" && $var ne "ZengWang2007" ) {
+ $log->fatal_error("$var is incorrect entry for the namelist variable z0param_method; expected Meier2022 or ZengWang2007");
+ }
+ my $phys = $physv->as_string();
+ if ( $phys eq "clm4_5" || $phys eq "clm5_0" ) {
+ if ( $var eq "Meier2022" ) {
+ $log->fatal_error("z0param_method = $var and phys = $phys, but this method has been tested only with clm5_1 and later versions; to use with earlier versions, disable this error, and add Meier2022 parameters to the corresponding params file");
+ }
+ }
+}
+#-------------------------------------------------------------------------------
+
+sub setup_logic_snicar_methods {
+ my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
+
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snicar_snw_shape' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snicar_solarspec' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snicar_dust_optics' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snicar_numrad_snw' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snicar_snobc_intmix' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snicar_snodst_intmix' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snicar_use_aerosol' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_snicar_frc' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'do_sno_oc' );
+
+ # Error checking in loop
+ my %supportedSettings = ( 'snicar_solarspec' => "'mid_latitude_winter'", 'snicar_dust_optics' => "'sahara'", 'snicar_numrad_snw' => '5', 'snicar_snobc_intmix' => '.false.', 'snicar_snodst_intmix' => '.false.', 'snicar_use_aerosol' => '.true.', 'do_sno_oc' => '.false.' );
+ keys %supportedSettings;
+ while ( my ($key, $val) = each %supportedSettings ) {
+ my $var = $nl->get_value($key);
+ if ( $var ne $val ) {
+ $log->warning("$key=$val is the supported option; $var is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!");
+ }
+ }
+
+ # Error checking not in loop
+ my $key1 = 'snicar_snw_shape';
+ my $var1 = $nl->get_value($key1);
+ my $val1a = "'sphere'"; # supported value for this option
+ my $val1b = "'hexagonal_plate'"; # supported value for this option
+ if (($var1 ne $val1a) && ($var1 ne $val1b)) {
+ $log->warning("$key1=$val1a and $val1b are supported; $var1 is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!");
+ }
+
+ # snicar_snobc_intmix and snicar_snodst_intmix cannot both be true
+ my $key1 = 'snicar_snobc_intmix';
+ my $key2 = 'snicar_snodst_intmix';
+ my $var1 = $nl->get_value($key1);
+ my $var2 = $nl->get_value($key2);
+ my $val1 = $supportedSettings{$key1}; # supported value for this option
+ if (($var1 eq $var2) && ($var1 ne $val1)) {
+ $log->warning("$key1 = $var1 and $key2 = $var2 do not work together!");
+ }
+}
+
+#-------------------------------------------------------------------------------
+
sub setup_logic_snow {
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fsnowoptics' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snow_thermal_cond_method' );
+
+ my $var = $nl->get_value('snow_thermal_cond_method');
+ if ( $var ne "'Jordan1991'" && $var ne "'Sturm1997'" ) {
+ $log->fatal_error("$var is incorrect entry for the namelist variable snow_thermal_cond_method; expected Jordan1991 or Sturm1997");
+ }
+
+ my $numrad_snw = $nl->get_value('snicar_numrad_snw');
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fsnowoptics',
+ 'snicar_numrad_snw' => $numrad_snw);
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fsnowaging' );
}
@@ -2116,7 +2242,7 @@ sub setup_logic_urban {
#-------------------------------------------------------------------------------
-sub setup_logic_crop {
+sub setup_logic_crop_inparm {
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
if ( &value_is_true($nl->get_value('use_crop')) ) {
@@ -2134,12 +2260,32 @@ sub setup_logic_crop {
}
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, "initial_seed_at_planting",
'use_crop'=>$nl->get_value('use_crop') );
+
+ my $crop_residue_removal_frac = $nl->get_value('crop_residue_removal_frac');
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'crop_residue_removal_frac' );
+ if ( $crop_residue_removal_frac < 0.0 or $crop_residue_removal_frac > 1.0 ) {
+ $log->fatal_error("crop_residue_removal_frac must be in range [0, 1]");
+ }
} else {
- error_if_set( $nl, "Can NOT be set without crop on", "baset_mapping", "baset_latvary_slope", "baset_latvary_intercept" );
+ error_if_set( $nl, "Can NOT be set without crop on", "baset_mapping", "baset_latvary_slope", "baset_latvary_intercept", "crop_residue_removal_frac" );
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'crop_fsat_equals_zero' );
}
}
+#-------------------------------------------------------------------------------
+
+sub setup_logic_tillage {
+ my ($opts, $nl_flags, $definition, $defaults, $nl, $physv) = @_;
+
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'tillage_mode',
+ 'use_crop'=>$nl_flags->{'use_crop'}, 'phys'=>$physv->as_string() );
+
+ my $tillage_mode = remove_leading_and_trailing_quotes( $nl->get_value( "tillage_mode" ) );
+ if ( $tillage_mode ne "off" && $tillage_mode ne "" && not &value_is_true($nl_flags->{'use_crop'}) ) {
+ $log->fatal_error( "Tillage only works on crop columns, so use_crop must be true if tillage is enabled." );
+ }
+}
+
#-------------------------------------------------------------------------------
sub error_if_set {
# do a fatal_error and exit if any of the input variable names are set
@@ -2159,6 +2305,7 @@ sub setup_logic_soilstate {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'organic_frac_squared' );
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_bedrock',
'use_fates'=>$nl_flags->{'use_fates'}, 'vichydro'=>$nl_flags->{'vichydro'} );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_excess_ice'); # excess ice flag should be read before stream vars
my $var1 = "soil_layerstruct_predefined";
my $var2 = "soil_layerstruct_userdefined";
@@ -2209,6 +2356,7 @@ sub setup_logic_demand {
$settings{'use_lch4'} = $nl_flags->{'use_lch4'};
$settings{'use_nitrif_denitrif'} = $nl_flags->{'use_nitrif_denitrif'};
$settings{'use_crop'} = $nl_flags->{'use_crop'};
+ $settings{'neon'} = $nl_flags->{'neon'};
my $demand = $nl->get_value('clm_demand');
if (defined($demand)) {
@@ -2261,7 +2409,7 @@ sub setup_logic_surface_dataset {
# consistent with it
# MUST BE AFTER: setup_logic_demand which is where flanduse_timeseries is set
#
- my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
+ my ($opts, $nl_flags, $definition, $defaults, $nl, $xmlvar_ref) = @_;
$nl_flags->{'flanduse_timeseries'} = "null";
my $flanduse_timeseries = $nl->get_value('flanduse_timeseries');
@@ -2286,26 +2434,42 @@ sub setup_logic_surface_dataset {
if ( ! &value_is_true($nl_flags->{'use_fates'}) ) {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var,
'hgrid'=>$nl_flags->{'res'}, 'ssp_rcp'=>$nl_flags->{'ssp_rcp'},
+ 'neon'=>$nl_flags->{'neon'}, 'neonsite'=>$nl_flags->{'neonsite'},
'sim_year'=>$nl_flags->{'sim_year'}, 'irrigate'=>".true.", 'use_vichydro'=>$nl_flags->{'use_vichydro'},
- 'use_crop'=>".true.", 'glc_nec'=>$nl_flags->{'glc_nec'}, 'nofail'=>1);
+ 'use_crop'=>".true.", 'glc_nec'=>$nl_flags->{'glc_nec'}, 'use_fates'=>$nl_flags->{'use_fates'}, 'nofail'=>1);
}
# If didn't find the crop version check for the exact match
- if ( ! defined($nl->get_value($var) ) ) {
+ my $fsurdat = $nl->get_value($var);
+ if ( ! defined($fsurdat) ) {
if ( ! &value_is_true($nl_flags->{'use_fates'}) ) {
$log->verbose_message( "Crop version of $var NOT found, searching for an exact match" );
}
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var,
'hgrid'=>$nl_flags->{'res'}, 'ssp_rcp'=>$nl_flags->{'ssp_rcp'}, 'use_vichydro'=>$nl_flags->{'use_vichydro'},
- 'sim_year'=>$nl_flags->{'sim_year'}, 'irrigate'=>$nl_flags->{'irrigate'},
+ 'sim_year'=>$nl_flags->{'sim_year'}, 'irrigate'=>$nl_flags->{'irrigate'}, 'use_fates'=>$nl_flags->{'use_fates'},
+ 'neon'=>$nl_flags->{'neon'}, 'neonsite'=>$nl_flags->{'neonsite'},
'use_crop'=>$nl_flags->{'use_crop'}, 'glc_nec'=>$nl_flags->{'glc_nec'}, 'nofail'=>1 );
- if ( ! defined($nl->get_value($var) ) ) {
+ if ( ! defined($fsurdat) ) {
$log->verbose_message( "Exact match of $var NOT found, searching for version with irrigate true" );
}
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var,
'hgrid'=>$nl_flags->{'res'}, 'ssp_rcp'=>$nl_flags->{'ssp_rcp'}, 'use_vichydro'=>$nl_flags->{'use_vichydro'},
- 'sim_year'=>$nl_flags->{'sim_year'}, 'irrigate'=>".true.",
+ 'sim_year'=>$nl_flags->{'sim_year'}, 'irrigate'=>".true.", 'use_fates'=>$nl_flags->{'use_fates'},
+ 'neon'=>$nl_flags->{'neon'}, 'neonsite'=>$nl_flags->{'neonsite'},
'use_crop'=>$nl_flags->{'use_crop'}, 'glc_nec'=>$nl_flags->{'glc_nec'} );
}
+ #
+ # Expand the XML variables for NEON cases so that NEONSITE will be used
+ #
+ if ( &value_is_true($nl_flags->{'neon'}) ) {
+ my $fsurdat = $nl->get_value($var);
+ my $newval = SetupTools::expand_xml_var( $fsurdat, $xmlvar_ref );
+ if ( $newval ne $fsurdat ) {
+ my $group = $definition->get_group_name($var);
+ $nl->set_variable_value($group, $var, $newval);
+ $log->verbose_message( "This is a NEON site and the fsurdat file selected is: $newval" );
+ }
+ }
}
#-------------------------------------------------------------------------------
@@ -2491,6 +2655,7 @@ sub setup_logic_dynamic_subgrid {
setup_logic_do_transient_lakes($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_do_transient_urban($opts, $nl_flags, $definition, $defaults, $nl);
setup_logic_do_harvest($opts, $nl_flags, $definition, $defaults, $nl);
+ setup_logic_do_grossunrep($opts, $nl_flags, $definition, $defaults, $nl);
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'reset_dynbal_baselines');
if ( &value_is_true($nl->get_value('reset_dynbal_baselines')) &&
@@ -2836,6 +3001,63 @@ sub setup_logic_do_harvest {
#-------------------------------------------------------------------------------
+sub setup_logic_do_grossunrep {
+ #
+ # Set do_grossunrep default value, and perform error checking on do_grossunrep
+ #
+ # Assumes the following are already set in the namelist (although it's okay
+ # for them to be unset if that will be their final state):
+ # - flanduse_timeseries
+ # - use_cn
+ # - use_fates
+ #
+ my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
+
+ my $var = 'do_grossunrep';
+
+ # Start by assuming a default value of '.true.'. 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
+ # value is indeed false (e.g., that the user didn't try to set it to true).
+
+ my $default_val = ".false.";
+
+ # cannot_be_true will be set to a non-empty string in any case where
+ # do_grossunrep should not be true; if it turns out that do_grossunrep IS true
+ # in any of these cases, a fatal error will be generated
+ my $cannot_be_true = "";
+
+ if (string_is_undef_or_empty($nl->get_value('flanduse_timeseries'))) {
+ $cannot_be_true = "$var can only be set to true when running a transient case (flanduse_timeseries non-blank)";
+ }
+ elsif (&value_is_true($nl->get_value('use_fates'))) {
+ $cannot_be_true = "$var currently doesn't work with FATES";
+ }
+ elsif (!&value_is_true($nl->get_value('use_cn'))) {
+ $cannot_be_true = "$var can only be set to true when running with CN (use_cn = true)";
+ }
+
+ if ($cannot_be_true) {
+ $default_val = ".false.";
+ }
+
+ if (!$cannot_be_true) {
+ # Note that, if the variable cannot be true, we don't call add_default
+ # - so that we don't clutter up the namelist with variables that don't
+ # matter for this case
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var, val=>$default_val);
+ }
+
+ # Make sure the value is false when it needs to be false - i.e., that the
+ # user hasn't tried to set a true value at an inappropriate time.
+
+ if (&value_is_true($nl->get_value($var)) && $cannot_be_true) {
+ $log->fatal_error($cannot_be_true);
+ }
+
+}
+
+#-------------------------------------------------------------------------------
sub setup_logic_spinup {
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
@@ -2888,24 +3110,30 @@ sub setup_logic_supplemental_nitrogen {
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
if ( $nl_flags->{'bgc_mode'} ne "sp" && $nl_flags->{'bgc_mode'} ne "fates" && &value_is_true($nl_flags->{'use_crop'}) ) {
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl,
- 'suplnitro', 'use_cn'=>$nl_flags->{'use_cn'}, 'use_crop'=>$nl_flags->{'use_crop'});
- }
+ # If this is non-fates, non-sp and crop is active
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl,
+ 'suplnitro', 'use_cn'=>$nl_flags->{'use_cn'}, 'use_crop'=>$nl_flags->{'use_crop'});
+ } elsif ( $nl_flags->{'bgc_mode'} eq "fates" && not &value_is_true( $nl_flags->{'use_fates_sp'}) ) {
+ # Or... if its fates but not fates-sp
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl,
+ 'suplnitro', 'use_fates'=>$nl_flags->{'use_fates'});
+ }
+
#
# Error checking for suplnitro
#
my $suplnitro = $nl->get_value('suplnitro');
if ( defined($suplnitro) ) {
if ( $nl_flags->{'bgc_mode'} eq "sp" ) {
- $log->fatal_error("supplemental Nitrogen (suplnitro) is set, but neither CN nor CNDV is active!");
+ $log->fatal_error("supplemental Nitrogen (suplnitro) is set, but neither CN nor CNDV nor FATES is active!");
}
if ( ! &value_is_true($nl_flags->{'use_crop'}) && $suplnitro =~ /PROG_CROP_ONLY/i ) {
$log->fatal_error("supplemental Nitrogen is set to run over prognostic crops, but prognostic crop is NOT active!");
}
if ( $suplnitro =~ /ALL/i ) {
- if ( $nl_flags->{'bgc_spinup'} eq "on" ) {
+ if ( $nl_flags->{'bgc_spinup'} eq "on" && $nl_flags->{'bgc_mode'} ne "fates" ) {
$log->warning("There is no need to use a bgc_spinup mode when supplemental Nitrogen is on for all PFT's, as these modes spinup Nitrogen" );
}
}
@@ -3222,6 +3450,12 @@ sub setup_logic_luna {
'use_cn'=>$nl_flags->{'use_cn'} );
}
$nl_flags->{'use_luna'} = $nl->get_value('use_luna');
+
+ # LUNA can NOT be on with FATES
+ if ( &value_is_true( $nl_flags->{'use_luna'} ) && &value_is_true( $nl_flags->{'use_fates'} )) {
+ $log->fatal_error("Cannot turn use_luna to true when bgc=fates" );
+ }
+
my $vcmax_opt= $nl->get_value('vcmax_opt');
# lnc_opt only applies if luna is on or for vcmax_opt=3/4
if ( &value_is_true( $nl_flags->{'use_luna'} ) || $vcmax_opt == 3 || $vcmax_opt == 4 ) {
@@ -3388,18 +3622,18 @@ sub setup_logic_nitrogen_deposition {
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
#
- # Nitrogen deposition for bgc=CN
+ # Nitrogen deposition for bgc=CN or fates
#
- if ( $nl_flags->{'bgc_mode'} =~/bgc/ ) {
+ if ( ($nl_flags->{'bgc_mode'} =~/bgc/) ) { # or ($nl_flags->{'bgc_mode'} =~/fates/) ) {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'ndepmapalgo', 'phys'=>$nl_flags->{'phys'},
'use_cn'=>$nl_flags->{'use_cn'}, 'hgrid'=>$nl_flags->{'res'},
'clm_accelerated_spinup'=>$nl_flags->{'clm_accelerated_spinup'} );
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'ndep_taxmode', 'phys'=>$nl_flags->{'phys'},
- 'use_cn'=>$nl_flags->{'use_cn'},
- 'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'} );
+ 'use_cn'=>$nl_flags->{'use_cn'},
+ 'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'} );
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'ndep_varlist', 'phys'=>$nl_flags->{'phys'},
- 'use_cn'=>$nl_flags->{'use_cn'},
- 'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'} );
+ 'use_cn'=>$nl_flags->{'use_cn'},
+ 'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'} );
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_year_first_ndep', 'phys'=>$nl_flags->{'phys'},
'use_cn'=>$nl_flags->{'use_cn'}, 'sim_year'=>$nl_flags->{'sim_year'},
'sim_year_range'=>$nl_flags->{'sim_year_range'});
@@ -3683,6 +3917,10 @@ sub setup_logic_fire_emis {
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
if ($opts->{'fire_emis'} ) {
+ if ( &value_is_true( $nl_flags->{'use_fates'} ) ) {
+ $log->warning("Fire emission can NOT be on when FATES is also on.\n" .
+ " DON'T use the '-fire_emis' option when '-bgc fates' is activated");
+ }
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fire_emis_factors_file');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fire_emis_specifier');
} else {
@@ -3783,8 +4021,7 @@ sub setup_logic_lai_streams {
if ( &value_is_true($nl_flags->{'use_crop'}) && &value_is_true($nl->get_value('use_lai_streams')) ) {
$log->fatal_error("turning use_lai_streams on is incompatable with use_crop set to true.");
}
- if ( $nl_flags->{'bgc_mode'} eq "sp" ) {
-
+ if ( $nl_flags->{'bgc_mode'} eq "sp" || ($nl_flags->{'bgc_mode'} eq "fates" && &value_is_true($nl->get_value('use_fates_sp')) )) {
if ( &value_is_true($nl->get_value('use_lai_streams')) ) {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_lai_streams');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'lai_mapalgo',
@@ -3810,21 +4047,80 @@ sub setup_logic_lai_streams {
}
}
} else {
- # If bgc is CN/CNDV then make sure none of the LAI settings are set
- if ( defined($nl->get_value('stream_year_first_lai')) ||
- defined($nl->get_value('stream_year_last_lai')) ||
- defined($nl->get_value('model_year_align_lai')) ||
- defined($nl->get_value('lai_tintalgo' )) ||
+ # If bgc is BGC/BGCDV then make sure none of the LAI settings are set
+ if ( &value_is_true($nl->get_value('use_lai_streams'))) {
+ $log->fatal_error("When not in SP mode use_lai_streams cannot be .true.\n" .
+ "(eg. don't use this option with BGC or non-SP FATES), \n" .
+ "Update compset to use SP)");
+ }
+ if ( defined($nl->get_value('stream_year_first_lai')) ||
+ defined($nl->get_value('stream_year_last_lai')) ||
+ defined($nl->get_value('model_year_align_lai')) ||
+ defined($nl->get_value('lai_tintalgo' )) ||
defined($nl->get_value('stream_fldfilename_lai')) ) {
- $log->fatal_error("When bgc is NOT SP none of the following can be set: stream_year_first_lai,\n" .
+ $log->fatal_error("When not in SP mode none of the following can be set: stream_year_first_lai,\n" .
"stream_year_last_lai, model_year_align_lai, lai_tintalgo nor\n" .
- "stream_fldfilename_lai (eg. don't use this option with BGC,CN,CNDV nor BGDCV).");
+ "stream_fldfilename_lai (eg. don't use this option with BGC or FATES-SP).");
}
}
}
#-------------------------------------------------------------------------------
+sub setup_logic_cropcal_streams {
+ my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
+
+ # Set first and last stream years
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_year_first_cropcal',
+ 'sim_year'=>$nl_flags->{'sim_year'},
+ 'sim_year_range'=>$nl_flags->{'sim_year_range'});
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_year_last_cropcal',
+ 'sim_year'=>$nl_flags->{'sim_year'},
+ 'sim_year_range'=>$nl_flags->{'sim_year_range'});
+
+ # Set align year, if first and last years are different
+ if ( $nl->get_value('stream_year_first_cropcal') !=
+ $nl->get_value('stream_year_last_cropcal') ) {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl,
+ 'model_year_align_cropcal', 'sim_year'=>$nl_flags->{'sim_year'},
+ 'sim_year_range'=>$nl_flags->{'sim_year_range'});
+ }
+
+ # Set up other crop calendar parameters
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'generate_crop_gdds');
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_mxmat');
+
+ # Option checks
+ my $generate_crop_gdds = $nl->get_value('generate_crop_gdds') ;
+ my $use_mxmat = $nl->get_value('use_mxmat') ;
+ my $swindow_start_file = $nl->get_value('stream_fldFileName_swindow_start') ;
+ my $swindow_end_file = $nl->get_value('stream_fldFileName_swindow_end') ;
+ my $gdd_file = $nl->get_value('stream_fldFileName_cultivar_gdds') ;
+ my $mesh_file = $nl->get_value('stream_meshfile_cropcal') ;
+ if ( ($swindow_start_file eq '' and $swindow_start_file ne '') or ($swindow_start_file ne '' and $swindow_start_file eq '') ) {
+ $log->fatal_error("When specifying sowing window dates, you must provide both swindow_start_file and swindow_end_file. To specify exact sowing dates, use the same file." );
+ }
+ if ( $generate_crop_gdds eq '.true.' ) {
+ if ( $use_mxmat eq '.true.' ) {
+ $log->fatal_error("If generate_crop_gdds is true, you must also set use_mxmat to false" );
+ }
+ if ( $swindow_start_file eq '' or $swindow_end_file eq '' ) {
+ $log->fatal_error("If generate_crop_gdds is true, you must specify stream_fldFileName_swindow_start and stream_fldFileName_swindow_end")
+ }
+ if ( $swindow_start_file ne $swindow_end_file ) {
+ $log->fatal_error("If generate_crop_gdds is true, you must specify exact sowing dates by setting stream_fldFileName_swindow_start and stream_fldFileName_swindow_end to the same file")
+ }
+ if ( $gdd_file ne '' ) {
+ $log->fatal_error("If generate_crop_gdds is true, do not specify stream_fldFileName_cultivar_gdds")
+ }
+ }
+ if ( $mesh_file eq '' and ( $swindow_start_file ne '' or $gdd_file ne '' ) ) {
+ $log->fatal_error("If prescribing crop sowing dates and/or maturity requirements, you must specify stream_meshfile_cropcal")
+ }
+}
+
+#-------------------------------------------------------------------------------
+
sub setup_logic_soilwater_movement {
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
@@ -3898,10 +4194,11 @@ sub setup_logic_rooting_profile {
#-------------------------------------------------------------------------------
sub setup_logic_friction_vel {
- #
+ # Must be after canopyfluxes so that use_biomass_heat_storage will be set
my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'zetamaxstable' );
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'zetamaxstable',
+ 'use_biomass_heat_storage'=>$nl_flags->{'use_biomass_heat_storage'}, 'phys'=>$nl_flags->{'phys'} );
}
#-------------------------------------------------------------------------------
@@ -3926,6 +4223,11 @@ sub setup_logic_canopyfluxes {
if ( &value_is_true($nl->get_value('use_biomass_heat_storage') ) && &value_is_true( $nl_flags->{'use_fates'}) ) {
$log->fatal_error('use_biomass_heat_storage can NOT be set to true when fates is on');
}
+ if ( &value_is_true($nl->get_value('use_biomass_heat_storage')) ) {
+ $nl_flags->{'use_biomass_heat_storage'} = ".true.";
+ } else {
+ $nl_flags->{'use_biomass_heat_storage'} = ".false.";
+ }
}
#-------------------------------------------------------------------------------
@@ -3955,7 +4257,6 @@ sub setup_logic_snowpack {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'snow_overburden_compaction_method');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'lotmp_snowdensity_method');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'upplim_destruct_metamorph');
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fresh_snw_rds_max');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'reset_snow');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'reset_snow_glc');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'reset_snow_glc_ela');
@@ -4113,12 +4414,19 @@ sub setup_logic_fates {
if (&value_is_true( $nl_flags->{'use_fates'}) ) {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fates_paramfile', 'phys'=>$nl_flags->{'phys'});
my @list = ( "fates_spitfire_mode", "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys",
- "use_fates_inventory_init","use_fates_fixed_biogeog","use_fates_nocomp",
- "use_fates_logging","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage" );
+ "use_fates_inventory_init","use_fates_fixed_biogeog","use_fates_nocomp","fates_seeddisp_cadence",
+ "use_fates_logging","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage","use_fates_luh" );
foreach my $var ( @list ) {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var, 'use_fates'=>$nl_flags->{'use_fates'},
'use_fates_sp'=>$nl_flags->{'use_fates_sp'} );
}
+ my $suplnitro = $nl->get_value('suplnitro');
+ my $parteh_mode = $nl->get_value('fates_parteh_mode');
+ if ( ($parteh_mode == 1) && ($suplnitro !~ /ALL/) && not &value_is_true( $nl_flags->{'use_fates_sp'}) ) {
+ $log->fatal_error("supplemental Nitrogen (suplnitro) is NOT set to ALL, FATES is on, " .
+ "but and FATES-SP is not active, but fates_parteh_mode is 1, so Nitrogen is not active" .
+ "Change suplnitro back to ALL");
+ }
#
# For FATES SP mode make sure no-competetiion, and fixed-biogeography are also set
# And also check for other settings that can't be trigged on as well
@@ -4135,14 +4443,14 @@ sub setup_logic_fates {
# spit-fire can't be on with FATES SP mode is active
if ( $nl->get_value('fates_spitfire_mode') > 0 ) {
$log->fatal_error('fates_spitfire_mode can NOT be set to greater than 0 when use_fates_sp is true');
+ }
}
- }
}
my $var = "use_fates_inventory_init";
if ( defined($nl->get_value($var)) ) {
if ( &value_is_true($nl->get_value($var)) ) {
$var = "fates_inventory_ctrl_filename";
- my $fname = substr $nl->get_value($var), 1, -1; # ignore first and last positions of string because those are quote characters
+ my $fname = remove_leading_and_trailing_quotes( $nl->get_value($var) );
if ( ! defined($nl->get_value($var)) ) {
$log->fatal_error("$var is required when use_fates_inventory_init is set" );
} elsif ( ! -f "$fname" ) {
@@ -4150,9 +4458,92 @@ sub setup_logic_fates {
}
}
}
+ my $var = "use_fates_luh";
+ if ( defined($nl->get_value($var)) ) {
+ if ( &value_is_true($nl->get_value($var)) ) {
+ $var = "fluh_timeseries";
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var, 'phys'=>$nl_flags->{'phys'}, 'hgrid'=>$nl_flags->{'res'}, 'sim_year_range'=>$nl_flags->{'sim_year_range'}, nofail=>1 );
+ my $fname = remove_leading_and_trailing_quotes( $nl->get_value($var) );
+ if ( ! defined($nl->get_value($var)) ) {
+ $log->fatal_error("$var is required when use_fates_luh is set" );
+ } elsif ( ! -f "$fname" ) {
+ $log->fatal_error("$fname does NOT point to a valid filename" );
+ }
+ }
+ }
}
}
+#-------------------------------------------------------------------------------
+sub setup_logic_exice {
+ #
+ # excess ice streams
+ #
+ my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
+ my $use_exice = $nl->get_value( 'use_excess_ice' );
+ my $use_exice_streams = $nl->get_value( 'use_excess_ice_streams' );
+ # IF excess ice streams is on
+ if (defined($use_exice_streams) && value_is_true($use_exice_streams)) {
+ # Can only be true if excess ice is also on, otherwise fail
+ if (defined($use_exice) && not value_is_true($use_exice)) {
+ $log->fatal_error("use_excess_ice_streams can NOT be TRUE when use_excess_ice is FALSE" );
+ }
+ # Otherwise if ice streams are off
+ } else {
+ my @list = ( "stream_meshfile_exice", "stream_fldfilename_exice" );
+ # fail is excess ice streams files are set
+ foreach my $var ( @list ) {
+ if ( defined($nl->get_value($var)) ) {
+ $log->fatal_error("$var should NOT be set when use_excess_ice_streams=FALSE" );
+ }
+ }
+ # mapalgo can only be none, if excess ice streams are off
+ my $map_algo = $nl->get_value("stream_mapalgo_exice");
+ if ( defined($map_algo) && ($map_algo ne "none") ) {
+ $log->fatal_error("stream_mapalgo_exice can ONLY be none when use_excess_ice_streams=FALSE" );
+ }
+ }
+ # If excess ice is on
+ if (defined($use_exice) && value_is_true($use_exice)) {
+ # IF nuopc driver and excess ice streams are on get the stream defaults
+ if (defined($use_exice_streams) && value_is_true($use_exice_streams)) {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_fldfilename_exice');
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_mapalgo_exice');
+ # If excess ice streams on, but NOT the NUOPC driver fail
+ if ( not $opts->{'driver'} eq "nuopc" ) {
+ $log->fatal_error("nuopc driver is required when use_excess_ice_streams is set to true" );
+ # NUOPC driver needs a mesh file
+ } else {
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_meshfile_exice');
+ }
+ }
+ }
+
+
+} # end exice streams
+
+#-------------------------------------------------------------------------------
+
+sub setup_logic_z0param {
+ #
+ # Set default z0 paramterization
+ #
+ my ($opts, $nl_flags, $definition, $defaults, $nl) = @_;
+
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'z0param_method');
+
+ my $z0param_method = remove_leading_and_trailing_quotes($nl->get_value('z0param_method' ));
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'use_z0m_snowmelt',
+ 'z0param_method'=>$z0param_method );
+
+ my $use_z0m_snowmelt = $nl->get_value( 'use_z0m_snowmelt' );
+
+ if ( $z0param_method eq "ZengWang2007" && defined($use_z0m_snowmelt) && value_is_true($use_z0m_snowmelt)) {
+ $log->fatal_error("use_z0m_snowmelt must be .false. when z0param_method = $z0param_method.\n $@");
+ }
+
+}
+
#-------------------------------------------------------------------------------
sub setup_logic_misc {
@@ -4172,7 +4563,7 @@ sub setup_logic_misc {
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'for_testing_use_second_grain_pool');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'for_testing_use_repr_structure_pool');
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'for_testing_no_crop_seed_replenishment');
- add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'hist_master_list_file');
+ add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'hist_fields_list_file');
}
#-------------------------------------------------------------------------------
@@ -4196,6 +4587,7 @@ sub write_output_files {
my @groups;
@groups = qw(clm_inparm ndepdyn_nml popd_streams urbantv_streams light_streams
soil_moisture_streams lai_streams atm2lnd_inparm lnd2atm_inparm clm_canopyhydrology_inparm cnphenology
+ cropcal_streams
clm_soilhydrology_inparm dynamic_subgrid cnvegcarbonstate
finidat_consistency_checks dynpft_consistency_checks
clm_initinterp_inparm century_soilbgcdecompcascade
@@ -4203,8 +4595,8 @@ sub write_output_files {
soilwater_movement_inparm rooting_profile_inparm
soil_resis_inparm bgc_shared canopyfluxes_inparm aerosol
clmu_inparm clm_soilstate_inparm clm_nitrogen clm_snowhydrology_inparm
- cnprecision_inparm clm_glacier_behavior crop irrigation_inparm
- surfacealbedo_inparm water_tracers_inparm);
+ cnprecision_inparm clm_glacier_behavior crop_inparm irrigation_inparm
+ surfacealbedo_inparm water_tracers_inparm tillage_inparm);
#@groups = qw(clm_inparm clm_canopyhydrology_inparm clm_soilhydrology_inparm
# finidat_consistency_checks dynpft_consistency_checks);
@@ -4223,6 +4615,7 @@ sub write_output_files {
push @groups, "nitrif_inparm";
push @groups, "lifire_inparm";
push @groups, "ch4finundated";
+ push @groups, "exice_streams";
push @groups, "soilbgc_decomp";
push @groups, "clm_canopy_inparm";
if (remove_leading_and_trailing_quotes($nl->get_value('snow_cover_fraction_method')) eq 'SwensonLawrence2012') {
@@ -4560,6 +4953,8 @@ sub check_use_case_name {
} else {
$log->fatal_error($diestring);
}
+ } elsif ( $use_case =~ /^([0-9]+|PI)-PD_*($desc)_transient$/ ) {
+ # valid name
} elsif ( $use_case =~ /^([0-9]+)_*($desc)_control$/ ) {
# valid name
} elsif ( $use_case =~ /^($desc)_pd$/ ) {
diff --git a/bld/env_run.xml b/bld/env_run.xml
index 8bf59d0911..f3b7467168 100644
--- a/bld/env_run.xml
+++ b/bld/env_run.xml
@@ -9,5 +9,6 @@ Sample env_run.xml file that allows build-namelist to be run for testing in this
-->
+
diff --git a/bld/namelist_files/createMapEntry.pl b/bld/namelist_files/createMapEntry.pl
index 561683bb05..f9009ba86f 100755
--- a/bld/namelist_files/createMapEntry.pl
+++ b/bld/namelist_files/createMapEntry.pl
@@ -23,7 +23,7 @@
my $scriptName;
($scriptName = $0) =~ s!(.*)/!!; # get name of script
my $cwd = getcwd();
- my $CSMDATA = "/glade/p/cesm/cseg/inputdata";
+ my $CSMDATA = "/glade/campaign/cesm/cesmdata/cseg/inputdata";
if ($#ARGV != 0 ) {
usage();
diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml
index 2686d62b9a..d3b3cc9715 100644
--- a/bld/namelist_files/namelist_defaults_ctsm.xml
+++ b/bld/namelist_files/namelist_defaults_ctsm.xml
@@ -25,6 +25,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
379.0388.8397.5
+408.83284.7284.7
@@ -66,8 +67,8 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
.false..false.
-
-.false.
+
+.false..true.
@@ -145,7 +146,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
NONE
-NONE
+ALL0.50,0.30
@@ -209,9 +210,11 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
1.d-2
-2.0d00
-0.5d00
-0.5d00
+2.0d00
+2.0d00
+0.5d00
+0.5d00
+2.0d00.true.
@@ -322,6 +325,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
403
+
.true.1.0
@@ -427,10 +431,6 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
175.d00175.d00
-54.526d00
-204.526d00
-204.526d00
-
0.08d00.false.
@@ -441,6 +441,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
1.e9SwensonLawrence2012
+Jordan1991
-lnd/clm2/paramdata/ctsm51_params.c211112.nc
-lnd/clm2/paramdata/clm50_params.c211112.nc
-lnd/clm2/paramdata/clm45_params.c211112.nc
+lnd/clm2/paramdata/ctsm51_params.c240207b.nc
+lnd/clm2/paramdata/clm50_params.c240207b.nc
+lnd/clm2/paramdata/clm45_params.c240207b.nc
-lnd/clm2/paramdata/fates_params_api.24.0.0_12pft_c220608.nc
+lnd/clm2/paramdata/fates_params_api.32.0.0_12pft_c231215.nc
+
+
+
+
+
+ZengWang2007
+Meier2022
+
+.true.
+.false.
@@ -508,6 +519,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
.true..false..false.
+.false..true.
@@ -542,6 +554,9 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
.true..true.
+0.d+0
+0.5d00
+
constantvarytropicsbylat
@@ -560,6 +575,8 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
DependsOnLat.false.Constant
+.false.
+.true..false.
@@ -664,6 +681,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
set up. If more finidat files are added you may need to add more of these.
Or one specific file will be chosen over another.
-->
+
hgrid=0.9x1.25 maxpft=17 mask=gx1v7 use_cn=.true. use_crop=.false. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
@@ -708,6 +726,11 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
>hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.false. glc_nec=10 do_transient_pfts=.false.
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.false. glc_nec=10 do_transient_pfts=.false.
+
+
hgrid=1.9x2.5 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
@@ -756,11 +779,26 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
>hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
@@ -791,6 +829,42 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
>hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
+
+hgrid=0.9x1.25 maxpft=79 mask=gx1v7 use_cn=.true. use_crop=.true. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
+
@@ -819,7 +893,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
hgrid="ne0np4.ARCTICGRIS.ne30x8" use_cn=".false." maxpft="17"
>hgrid=ne0np4.ARCTICGRIS.ne30x8 maxpft=17 mask=tx0.1v2 use_cn=.false. use_crop=.false. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
-p
+
hgrid=ne0np4CONUS.ne30x8 maxpft=17 mask=tx0.1v2 use_cn=.false. use_crop=.false. irrigate=.true. glc_nec=10 do_transient_pfts=.false.
-
+lnd/clm2/initdata_map/clmi.B1850Clm50BgcCrop.0161-01-01.0.9x1.25_gx1v7_simyr1850_c200729.nc
+
+
lnd/clm2/surfdata_map/surfdata_0.125nldas2_hist_16pfts_Irrig_CMIP6_simyr2005_c190412.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_brazil_hist_78pfts_CMIP6_simyr2000_c230123.nc
+
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_5x5_amazon_hist_16pfts_Irrig_CMIP6_simyr2000_c190214.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_brazil_hist_16pfts_Irrig_CMIP6_simyr2000_c190214.nc
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1.9x2.5_hist_78pfts_CMIP6_simyr2000_c190304.nc
+
+lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_360x720cru_78pfts_CMIP6_simyr2000_c170824.nc
lnd/clm2/surfdata_map/release-clm5.0.24/surfdata_0.125x0.125_hist_78pfts_CMIP6_simyr2005_c190624.nc
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_10x15_hist_78pfts_CMIP6_simyr2000_c190214.nc
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_4x5_hist_78pfts_CMIP6_simyr2000_c190214.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_numaIA_hist_78pfts_CMIP6_simyr2000_c190214.nc
-
-lnd/clm2/surfdata_map/ctsm1.0.dev094-2-g633be0eb/surfdata_1x1_smallvilleIA_hist_78pfts_CMIP6_simyr2000_c200521.nc
-
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_numaIA_hist_78pfts_CMIP6_simyr2000_c230123.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_smallvilleIA_hist_78pfts_CMIP6_simyr2000_c230123.nc
+
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa480_hist_78pfts_CMIP6_simyr2000_c211110.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa240_hist_78pfts_CMIP6_simyr2000_c211115.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa120_hist_78pfts_CMIP6_simyr2000_c211108.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa60_hist_78pfts_CMIP6_simyr2000_c211110.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa30_hist_78pfts_CMIP6_simyr2000_c211111.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa15_hist_78pfts_CMIP6_simyr2000_c211111.nc
+
+
+lnd/clm2/surfdata_map/ctsm5.1.dev120//surfdata_ne3np4.pg3_hist_78pfts_CMIP6_simyr2000_c230405.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev120/surfdata_ne5np4.pg3_hist_78pfts_CMIP6_simyr2000_c230405.nc
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_ne16np4_hist_78pfts_CMIP6_simyr2000_c190214.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev120/surfdata_ne16np4.pg3_hist_78pfts_CMIP6_simyr2000_c230405.nc
lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne30np4_hist_78pfts_CMIP6_simyr2000_c200426.nc
@@ -1111,12 +1221,12 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.ARCTIC.ne30x4_hist_78pft
lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts_CMIP6_simyr2000_c200426.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_vancouverCAN_hist_16pfts_Irrig_CMIP6_simyr2000_c190214.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_mexicocityMEX_hist_16pfts_Irrig_CMIP6_simyr2000_c190214.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_urbanc_alpha_hist_16pfts_Irrig_CMIP6_simyr2000_c190214.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_vancouverCAN_hist_78pfts_CMIP6_simyr2000_c230123.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_mexicocityMEX_hist_78pfts_CMIP6_simyr2000_c230123.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_urbanc_alpha_hist_78pfts_CMIP6_simyr2000_c230123.nc
@@ -1131,8 +1241,18 @@ lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_10x15_hist_16pfts_Irrig_CMIP6_s
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_4x5_hist_16pfts_Irrig_CMIP6_simyr1850_c190214.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_brazil_hist_16pfts_Irrig_CMIP6_simyr1850_c190214.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa480_hist_78pfts_CMIP6_simyr1850_c211110.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa240_hist_78pfts_CMIP6_simyr1850_c211115.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa120_hist_78pfts_CMIP6_simyr1850_c211108.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa60_hist_78pfts_CMIP6_simyr1850_c211110.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa30_hist_78pfts_CMIP6_simyr1850_c211111.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_mpasa15_hist_78pfts_CMIP6_simyr1850_c211111.nc
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_ne30np4_hist_16pfts_Irrig_CMIP6_simyr1850_c190303.nc
@@ -1159,19 +1279,25 @@ lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1.9x2.5_hist_78pfts_CMIP6_simyr
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_10x15_hist_78pfts_CMIP6_simyr1850_c190214.nc
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_4x5_hist_78pfts_CMIP6_simyr1850_c190214.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_smallvilleIA_hist_78pfts_CMIP6_simyr1850_c190214.nc
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_numaIA_hist_78pfts_CMIP6_simyr1850_c190214.nc
-
-
-lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_1x1_brazil_hist_78pfts_CMIP6_simyr1850_c190214.nc
-
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_smallvilleIA_hist_78pfts_CMIP6_simyr1850_c230123.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_numaIA_hist_78pfts_CMIP6_simyr1850_c230123.nc
+
+
+lnd/clm2/surfdata_map/ctsm5.1.dev116/surfdata_1x1_brazil_hist_78pfts_CMIP6_simyr1850_c230123.nc
+
+
+lnd/clm2/surfdata_map/ctsm5.1.dev120/surfdata_ne3np4.pg3_hist_78pfts_CMIP6_simyr1850_c230405.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev120/surfdata_ne5np4.pg3_hist_78pfts_CMIP6_simyr1850_c230405.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev120/surfdata_ne16np4.pg3_hist_78pfts_CMIP6_simyr1850_c230405.nc
lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne30np4_hist_78pfts_CMIP6_simyr1850_c200426.nc
lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne30np4.pg2_hist_78pfts_CMIP6_simyr1850_c200426.nc
-
+
lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne30np4.pg3_hist_78pfts_CMIP6_simyr1850_c200426.nc
lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne120np4_hist_78pfts_CMIP6_simyr1850_c200427.nc
@@ -1190,8 +1316,25 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
lnd/clm2/surfdata_map/surfdata_0.9x1.25_hist_16pfts_nourb_CMIP6_simyrPtVg_c181114.nc
+
+
+lnd/clm2/surfdata_map/NEON/16PFT_mixed/surfdata_1x1_NEON_${NEONSITE}_hist_16pfts_Irrig_CMIP6_simyr2000_c230120.nc
+
+lnd/clm2/surfdata_map/NEON/surfdata_1x1_NEON_${NEONSITE}_hist_78pfts_CMIP6_simyr2000_c230601.nc
+
+
+
+
+
lnd/clm2/surfdata_map/landuse.timeseries_0.9x1.25_hist_16pfts_Irrig_CMIP6_simyr1850-2015_c170824.nclnd/clm2/surfdata_map/release-clm5.0.18/landuse.timeseries_48x96_hist_16pfts_Irrig_CMIP6_simyr1850-2015_c190214.nc
-lnd/clm2/surfdata_map/landuse.timeseries_1x1_brazil_hist_16pfts_Irrig_CMIP6_simyr1850-2015_c170824.nc
-lnd/clm2/surfdata_map/landuse.timeseries_ne30np4_hist_16pfts_Irrig_CMIP6_simyr1850-2015_c170824.nc
+lnd/clm2/surfdata_map/release-clm5.0.30/landuse.timeseries_ne30np4_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c200426.nc
+lnd/clm2/surfdata_map/release-clm5.0.30/landuse.timeseries_ne30np4.pg3_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c200426.nclnd/clm2/surfdata_map/landuse.timeseries_ne0np4.ARCTIC.ne30x4_hist_78pfts_CMIP6_simyr1850-2015_c191023.nc
+>lnd/clm2/surfdata_map/release-clm5.0.30/landuse.timeseries_ne0np4.ARCTIC.ne30x4_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c200426.nc
@@ -1231,10 +1374,29 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
use_crop=".true." >lnd/clm2/surfdata_map/landuse.timeseries_48x96_hist_78pfts_CMIP6_simyr1850-2015_c170824.nc
lnd/clm2/surfdata_map/landuse.timeseries_1x1_brazil_hist_78pfts_CMIP6_simyr1850-2015_c170824.nc
+>lnd/clm2/surfdata_map/ctsm5.1.dev116/landuse.timeseries_1x1_brazil_hist_78pfts_CMIP6_simyr1850-2015_c230123.nc
lnd/clm2/surfdata_map/landuse.timeseries_1x1_numaIA_hist_78pfts_CMIP6_simyr1850-2015_c170917.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_mpasa480_hist_78pfts_CMIP6_simyr1850-2015_c211110.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_mpasa240_hist_78pfts_CMIP6_simyr1850-2015_c211115.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_mpasa120_hist_78pfts_CMIP6_simyr1850-2015_c211108.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_mpasa60_hist_78pfts_CMIP6_simyr1850-2015_c211110.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_mpasa30_hist_78pfts_CMIP6_simyr1850-2015_c211111.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_mpasa15_hist_78pfts_CMIP6_simyr1850-2015_c211111.nc
+
+lnd/clm2/surfdata_map/ctsm5.1.dev120/landuse.timeseries_ne3np4.pg3_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c230405.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev120/landuse.timeseries_ne5np4.pg3_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c230405.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev120/landuse.timeseries_ne16np4.pg3_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c230405.nclnd/clm2/surfdata_map/release-clm5.0.30/landuse.timeseries_ne30np4_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c200426.nclnd/clm2/surfdata_map/release-clm5.0.30/landuse.timeseries_C96_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c200317.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev120/landuse.timeseries_ne3np4.pg3_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c230405.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev120/landuse.timeseries_ne5np4.pg3_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c230405.nc
+lnd/clm2/surfdata_map/ctsm5.1.dev120/landuse.timeseries_ne16np4.pg3_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c230405.nclnd/clm2/surfdata_map/release-clm5.0.30/landuse.timeseries_ne30np4_SSP5-8.5_78pfts_CMIP6_simyr1850-2100_c200426.nclnd/clm2/surfdata_map/release-clm5.0.18/landuse.timeseries_10x15_SSP5-3.4_16pfts_Irrig_CMIP6_simyr1850-2100_c190228.nc
+
+
+lnd/clm2/surfdata_map/fates-sci.1.68.3_api.31.0.0_tools.1.0.1/LUH2_states_transitions_management.timeseries_4x5_hist_simyr1850-2015_c231101.nc
+
+
+lnd/clm2/surfdata_map/fates-sci.1.68.3_api.31.0.0_tools.1.0.1/LUH2_states_transitions_management.timeseries_4x5_hist_simyr1850-2015_c231101.nc
+
.true..true.
@@ -1433,8 +1610,24 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
-lnd/clm2/snicardata/snicar_optics_5bnd_c090915.nc
-lnd/clm2/snicardata/snicar_drdt_bst_fit_60_c070416.nc
+lnd/clm2/snicardata/snicar_drdt_bst_fit_60_c070416.nc
+
+5
+
+lnd/clm2/snicardata/snicar_optics_480bnd_c012422.nc
+lnd/clm2/snicardata/snicar_optics_5bnd_c013122.nc
+
+hexagonal_plate
+sphere
+sphere
+
+.false.
+mid_latitude_winter
+sahara
+.false.
+.false.
+.true.
+.false.2015
@@ -1449,6 +1642,9 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
21012015
+2018
+2018
+
20102010
@@ -1556,10 +1752,16 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
nnnn
+
+1850
+2100
+1850
+
nonenone
+106x17494x19294x192360x720
@@ -1570,12 +1772,18 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
360x720360x720360x720
+106x174
+106x174
+106x174
+106x17400010001atm/datm7/NASA_LIS/clmforc.Li_2012_climo1995-2011.T62.lnfm_Total_c140423.ncatm/datm7/NASA_LIS/clmforc.Li_2012_climo1995-2011.T62_ESMFmesh_cdf5_110621.nc
+atm/datm7/NASA_LIS/clmforc.Li_2016_climo1995-2013.360x720.lnfm_Total_NEONarea_c210625.nc
+atm/datm7/NASA_LIS/ESMF_MESH.Li_2016.360x720.NEONarea_cdf5_c221104.ncatm/datm7/NASA_LIS/clmforc.Li_2016_climo1995-2013.360x720.lnfm_Total_c160825.ncatm/datm7/NASA_LIS/clmforc.Li_2016_climo1995-2013.360x720_ESMFmesh_cdf5_150621.nc
@@ -1601,6 +1809,9 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
21002015
+2018
+2018
+
20102010
@@ -1619,6 +1830,9 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
20002000
+2018
+2018
+
20102010
@@ -1706,6 +1920,12 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
21062015
+2018
+2018
+
+2010
+2010
+
20002000
@@ -2548,7 +2768,9 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
.false..false..false.
+.false.1
+0.true..false.
@@ -2578,4 +2800,24 @@ lnd/clm2/surfdata_map/release-clm5.0.30/surfdata_ne0np4.CONUS.ne30x8_hist_78pfts
general
+
+
+
+
+.false.
+
+lnd/clm2/paramdata/exice_init_0.125x0.125_c20220516.nc
+lnd/clm2/paramdata/exice_init_0.125x0.125_ESMFmesh_cdf5_c20220802.nc
+bilinear
+
+
+
+
+
+off
+low
+
+.false.
+0.26d00
+
diff --git a/bld/namelist_files/namelist_defaults_overall.xml b/bld/namelist_files/namelist_defaults_overall.xml
index c4ccac6467..96db00478a 100644
--- a/bld/namelist_files/namelist_defaults_overall.xml
+++ b/bld/namelist_files/namelist_defaults_overall.xml
@@ -44,8 +44,10 @@ determine default values for namelists.
-flanduse_timeseries
-flanduse_timeseries
+null
+null
+flanduse_timeseries
+flanduse_timeseries
diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml
index a08795dd1f..3e3735b903 100644
--- a/bld/namelist_files/namelist_definition_ctsm.xml
+++ b/bld/namelist_files/namelist_definition_ctsm.xml
@@ -150,6 +150,54 @@ specify spatially variable soil thickness. If not present, use bottom
of soil column (nlevsoi).
+
+number of wavelength bands used in SNICAR snow albedo calculation
+(snicar_numrad_snw=5 is the only supported option; others are EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+type of downward solar radiation spectrum for SNICAR snow albedo calculation
+(snicar_solarspec='mid_latitude_winter' is the only supported option; others are EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+dust optics type for SNICAR snow albedo calculation
+(snicar_dust_optics='sahara' is the only supported option; others are EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+snow grain shape used in SNICAR snow albedo calculation
+(snicar_dust_optics='hexagonal_plate' is supported in ctsm5.1 and 'sphere' in older model versions; others are EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+Toggle to turn on/off aerosol deposition flux in snow in SNICAR
+(snicar_use_aerosol='.false.' is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+option to activate BC-snow internal mixing in SNICAR snow albedo calculation
+(snicar_snobc_intmix='.true.' is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+option to activate dust-snow internal mixing in SNICAR snow albedo calculation
+(snicar_snodst_intmix='.true.' is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+option to activate organic carbon (OC) in SNICAR snow albedo calculation
+(do_sno_oc='.true.' is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
Index of rooting profile for water
@@ -638,6 +686,17 @@ Switch deciding which nutrient model to use in FATES.
(Only relevant if FATES is on)
+
+Switch defining the cadence at which seeds are dispersed across
+gridcells. Setting the switch value to zero turns off dispersal.
+Setting the switch to 1, 2, or 3 sets the dispersal cadence to
+daily, monthly or yearly. The daily cadence is primarily
+recommended for test and debug only. Note that turning this
+feature on will result in more memory usage.
+(Only relevant if FATES is on)
+
+
Toggle to turn on the tree damage module in FATES
@@ -718,6 +777,22 @@ Full pathname to the inventory initialization control file.
(Only relevant if FATES is on).
+
+
+If TRUE, enable use of land use harmonization (LUH) state and transition data from luh_timeseries file.
+(Also, only valid for use_fates = true and is incompatible with transient runs currently.)
+
+
+
+
+Full pathname of unified land use harmonization (LUH) data file. This causes the land-use
+types to vary over time.
+(Required, if use_fates_luh=T)
+(Only relevant if FATES is on).
+
+
Toggle to turn on the LUNA model, to effect Photosynthesis by leaf Nitrogen
@@ -764,9 +839,9 @@ SNICAR (SNow, ICe, and Aerosol Radiative model) optical data file name
SNICAR (SNow, ICe, and Aerosol Radiative model) snow aging data file name
-
-If TRUE, write master field list to separate file for documentation purposes
+If TRUE, write list of all output fields to separate file for documentation purposes
Toggle to use 25 lake layers instead of 10
-(extralaklayers=".true." is EXPERIMENTAL NOT SUPPORTED! Nor is it Tested!)
+(extralaklayers=".true." is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
Toggle to turn on the VIC hydrologic parameterizations
-(vichydro=".true." is EXPERIMENTAL NOT SUPPORTED!)
+(vichydro=".true." is EXPERIMENTAL, UNSUPPORTED!)
+
+Fraction of post-harvest crop residues (leaf and stem) to move to
+1-year product pool instead of letting them fall as litter.
+Default: 0.0
+
+
+ group="crop_inparm" valid_values="constant,varytropicsbylat" value="constant">
Type of mapping to use for base temperature for prognostic crop model
constant = Just use baset from the PFT parameter file
varytropicsbylat = Vary the tropics by latitude
+ group="crop_inparm" valid_values="" value="0.4d00">
Only used when baset_mapping == varytropicsbylat
Slope with latitude in degrees to vary tropical baset by
+ group="crop_inparm" valid_values="" value="12.0d00">
Only used when baset_mapping == varytropicsbylat
Intercept at zero latitude to add to baset from the PFT parameter file
@@ -1129,6 +1211,16 @@ Phenology onset depends on the vegetation type
(only used when CN is on)
+
+Set to .true. in order to override crop harvesting logic and to instead harvest the day before the next sowing date. Used to generate growing-degree day outputs that can be used with an external script to generate new GDD requirement ("cultivar") files.
+
+
+
+Set to .false. in order to ignore crop PFT parameter for maximum growing season length (mxmat). Must be set to .false. when generate_crop_gdds is .true.
+
+
Method for determining what the minimum critical day length for seasonal decidious leaf offset depends on
@@ -1141,9 +1233,8 @@ DependsOnLatAndVeg - Arctic vegetation depends on latitude as above, but tempera
-Toggle to turn on calculation of SNow and Ice Aerosol Radiation model (SNICAR) radiative forcing
-(snicar_frc=".true." is EXPERIMENTAL NOT SUPPORTED!)
+ group="clm_inparm" value=".false.">
+Toggle to turn on calculation of SNow and Ice Aerosol Radiation model (SNICAR) albedo forcing diagnostics for each aerosol species
Toggle to turn on use of LAI streams in place of the LAI on the surface dataset when using Satellite Phenology mode.
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
+
+
+
+
+
+
+First year to loop over for crop calendar data
+
+
+
+Last year to loop over for crop calendar data
+
+
+
+Simulation year that aligns with stream_year_first_cropcal value
+
+
+
+By default, a value in stream_fldFileName_swindow_start or _end outside the range [1, 365] (or 366 in leap years) will cause the run to fail. Set this to .true. to instead fall back on the paramfile sowing windows.
+
+
+
+Filename of input stream data for date (day of year) of start of sowing window. Cells with the same sowing window start and end date are always planted on that date, regardless of climatic conditions/history.
+
+
+
+Filename of input stream data for date (day of year) of end of sowing window. Cells with the same sowing window start and end date are always planted on that date, regardless of climatic conditions/history.
+
+
+
+Filename of input stream data for cultivar growing degree-day targets
+
+
+
+Filename of input stream data for crop calendar inputs
+
+
@@ -1992,9 +2128,9 @@ to use for methane model
-Resolution of Lightning dataset to use for CN fire model
-(only applies when CN and the CN fire model are turned on)
+ group="default_settings" valid_values="none,360x720,106x174,94x192">
+Resolution of Lightning dataset to use for CN or FATES fire model
+(only applies when CN or FATES and the fire model is turned on)
+ valid_values="512x1024,360x720cru,128x256,64x128,48x96,94x192,0.23x0.31,0.47x0.63,0.9x1.25,1.9x2.5,2.5x3.33,4x5,10x15,0.125nldas2,5x5_amazon,1x1_vancouverCAN,1x1_mexicocityMEX,1x1_asphaltjungleNJ,1x1_brazil,1x1_urbanc_alpha,1x1_numaIA,1x1_smallvilleIA,0.25x0.25,0.5x0.5,3x3min,5x5min,10x10min,0.33x0.33,0.125x0.125,ne3np4.pg3,ne4np4,ne5np4.pg3,ne16np4,ne16np4.pg3,ne30np4.pg2,ne30np4.pg3,ne30np4,ne60np4,ne120np4,ne120np4.pg2,ne120np4.pg3,ne0np4CONUS.ne30x8,ne0np4.ARCTIC.ne30x4,ne0np4.ARCTICGRIS.ne30x8,ne240np4,1km-merge-10min,C24,C48,C96,C192,C384,mpasa480,mpasa240,mpasa120,mpasa60,mpasa30,mpasa15">
Horizontal resolutions
Note: 0.25x0.25, 0.5x0.5, 5x5min, 10x10min, 3x3min, 1km-merge-10min and 0.33x0.33 are only used for CLM toolsI
@@ -2043,7 +2179,7 @@ Land mask description
+ valid_values="clm4_5_CRUv7,clm4_5_GSWP3v1,clm4_5_cam6.0,clm5_0_cam6.0,clm5_0_CRUv7,clm5_0_GSWP3v1,clm5_1_GSWP3v1,clm5_1_cam6.0">
General configuration of model version and atmospheric forcing to tune the model to run under.
This sets the model to run with constants and initial conditions that were set to run well under
the configuration of model version and atmospheric forcing. To run well constants would need to be changed
@@ -2057,7 +2193,7 @@ If 1, turn on the MEGAN model for BVOC's (Biogenic Volitile Organic Compounds)
+"PtVg,1000,850,1100,1350,1600,1850,1855,1865,1875,1885,1895,1905,1915,1925,1935,1945,1955,1965,1975,1979,1980,1982,1985,1995,2000,2005,2010,2013,2015,2018,2025,2035,2045,2055,2065,2075,2085,2095,2105">
Year to simulate and to provide datasets for (such as surface datasets, initial conditions, aerosol-deposition, Nitrogen deposition rates etc.)
A sim_year of 1000 corresponds to data used for testing only, NOT corresponding to any real datasets.
A sim_year greater than 2015 corresponds to ssp_rcp scenario data
@@ -2179,7 +2315,7 @@ Profile over which to distribute C and N coming from surface pools (leaves, stem
If true, no denitrification or nitrification in frozen soil layers.
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
If TRUE, weight btran (vegetation soil moisture availability) by unfrozen layers only, assuming that vegetation
will allocate roots preferentially to the active layer.
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
If TRUE, weight btran (vegetation soil moisture availability) by the active layer, as defined by the greatest thaw depth over the current and prior years.
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
@@ -2300,7 +2436,7 @@ How much Carbon to initialize vegetation pools (leafc/frootc and storage) to whe
Flexible CN ratio used for Phenology
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
Vcmax calculation for Photosynthesis
- vcmax_opt = 4 As for vcmax_opt=0, but using leafN, and exponential if tree (EXPERIMENTAL NOT TESTED!)
+ vcmax_opt = 4 As for vcmax_opt=0, but using leafN, and exponential if tree (EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
vcmax_opt = 3 Based on leafN and VCAD (used with Luna for crop and C4 vegetation)
vcmax_opt = 0 Based on canopy top and foilage Nitrogen limitation factor from params file (clm4.5)
@@ -2320,13 +2456,13 @@ Vcmax calculation for Photosynthesis
Evergreen phenology option for CNPhenology
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
Carbon respiration option to burn off carbon when CN ratio is too high (do NOT use when FUN is on)
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
@@ -2384,7 +2520,7 @@ then don't fix aere (see ch4Mod.F90).
If TRUE, turn on methane biogeochemistry model for lake columns, using a simplified version of the CH4 submodel.
-(EXPERIMENTAL)
+(EXPERIMENTAL, UNSUPPORTED!)
If TRUE, use the fine root carbon predicted by CN when calculating the aerenchyma area, rather than the parametrization
based on annual NPP, aboveground NPP fraction, and LAI.
-(EXPERIMENTAL and NOT tested)
+(EXPERIMENTAL, UNSUPPORTED, and UNTESTED!)
@@ -2475,6 +2611,13 @@ If TRUE, apply harvest from flanduse_timeseries file.
(Also, only valid for use_cn = true.)
+
+If TRUE, apply gross unrepresented landuse/land-cover change from flanduse_timeseries file.
+(Only valid for transient runs, where there is a flanduse_timeseries file.)
+(Also, only valid for use_cn = true.)
+
+
If TRUE, reset baseline values of total column water and energy in the
@@ -2663,11 +2806,6 @@ Snow compaction overburden exponential factor (1/K)
Not used for snow_overburden_compaction_method=Vionnet2012
-
-maximum warm (at freezing) fresh snow effective radius [microns]
-
-
If set to .true., then reset the snow pack over non-glacier columns to a small value.
@@ -2725,6 +2863,11 @@ NiuYang2007: Niu and Yang 2007
SwensonLawrence2012: Swenson and Lawrence 2012
+
+Parameterization to use for snow thermal conductivity
+
+
@@ -2742,6 +2885,24 @@ the related bulk quantities.
If .true., run with water isotopes
+
+
+
+
+
+Parameterization/parameters to use for surface roughness
+ZengWang2007: Zeng and Wang 2007
+Meier2022: Meier et al. in prep. 2022
+
+
+
+If FALSE use constant snow z0m
+If TRUE use parameterization of snow z0m as a function of accumulated
+snow melt of Brock et al. (2006)
+
+
@@ -2796,4 +2957,56 @@ use case.)
+
+
+
+
+If TRUE turn on the excess ice physics, (Lee et al., 2014; Cai et al., 2020)
+
+
+
+If TRUE and use_excess_ice is TRUE, use the excess ice stream to determine the initial values of the excess ice field
+if FALSE and use_excess_ice is TRUE, expect excess ice to come from the initial conditions or restart file
+Expect to be FALSE is use_excess_ice is FALSE
+
+
+
+Filename of input stream data for excess ice data
+
+
+
+mesh filename of input stream data for excess ice
+
+
+
+Mapping method from excess ice input stream data to the model resolution
+ bilinear = bilinear interpolation
+ nn = nearest neighbor
+ none = no interpolation
+
+
+
+
+
+
+
+Whether to till crop soil, and if so, with what intensity.
+
+
+
+Toggle to use original (Graham et al. 2021) tillage logic, with bug for seasons crossing into a new calendar year
+
+
+
+Maximum depth to till soil (m). Default 0.26; original (Graham et al., 2021) value was unintentionally 0.32.
+
+
diff --git a/bld/namelist_files/use_cases/2018-PD_transient.xml b/bld/namelist_files/use_cases/2018-PD_transient.xml
new file mode 100644
index 0000000000..96f14207ad
--- /dev/null
+++ b/bld/namelist_files/use_cases/2018-PD_transient.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+Simulate transient Nitrogen-deposition, aerosol deposition, urban, and fire related (pop-density, lightning) changes from 2018 to current day with a mix of historical data, and future scenario data
+Simulate transient Nitrogen-deposition, aerosol deposition, urban, and fire related (pop-density, lightning) changes from 2018 to current day with a mix of historical data, and future scenario data
+Simulate transient urban and aerosol deposition changes from 2018 to current day with a mix of historical data, and future scenario data
+
+
+
+2018
+
+1850-2100
+
+
+SSP3-7.0
+
+2018
+2022
+2018
+
+2018
+2022
+2018
+
+2018
+2022
+2018
+
+
diff --git a/bld/namelist_files/use_cases/2018_control.xml b/bld/namelist_files/use_cases/2018_control.xml
new file mode 100644
index 0000000000..28554074c4
--- /dev/null
+++ b/bld/namelist_files/use_cases/2018_control.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+Conditions to simulate 2018 land-use
+
+2018
+
+constant
+
+
+SSP3-7.0
+
+
diff --git a/bld/namelist_files/use_cases/README b/bld/namelist_files/use_cases/README
index 4ccaf00bdc..e55fd9285b 100644
--- a/bld/namelist_files/use_cases/README
+++ b/bld/namelist_files/use_cases/README
@@ -17,6 +17,10 @@ Transient cases:
20thC$desc_transient (means nominal 1850-2000 although some datasets are 1850-2005)
+ or
+
+ yyyy-PD_$desc_transient (means nominal year yyyy through present day (PD) (with the year for PD advancing)
+
Control cases:
yyyy$desc_control
@@ -30,6 +34,7 @@ Where
yyyy = Simulation year (such as 1850 or 2000).
yyyy-yyyy = Range of simulation years to run over (i.e.. 1850-2000).
+yyyy-PD = Range of simulation years to run over until present day (i.e.. 2018-2024).
$ssp_rcp = Shared Socieconomic Pathway (SSP) Representative concentration pathway (RCP) description string
for future scenarios:
SSP#-#.# (for example: SSP5-8.5, SSP1-2.6, SSP4-6.0
diff --git a/bld/unit_testers/build-namelist_test.pl b/bld/unit_testers/build-namelist_test.pl
index f6c8d75937..9b579dd9ce 100755
--- a/bld/unit_testers/build-namelist_test.pl
+++ b/bld/unit_testers/build-namelist_test.pl
@@ -42,7 +42,7 @@ sub make_env_run {
my %settings = @_;
# Set default settings
- my %env_vars = ( DIN_LOC_ROOT=>"MYDINLOCROOT", GLC_TWO_WAY_COUPLING=>"FALSE" );
+ my %env_vars = ( DIN_LOC_ROOT=>"MYDINLOCROOT", GLC_TWO_WAY_COUPLING=>"FALSE", NEONSITE=>"" );
# Set any settings that came in from function call
foreach my $item ( keys(%settings) ) {
$env_vars{$item} = $settings{$item};
@@ -139,7 +139,7 @@ sub cat_and_create_namelistinfile {
$inputdata_rootdir = $ENV{'CSMDATA'};
} else {
# use yellowstone location as default
- $inputdata_rootdir="/glade/p/cesm/cseg/inputdata";
+ $inputdata_rootdir="/glade/campaign/cesm/cesmdata/cseg/inputdata";
print("WARNING: -csmdata nor CSMDATA are set, using default yellowstone location: $inputdata_rootdir\n");
}
@@ -163,9 +163,10 @@ sub cat_and_create_namelistinfile {
#
# Figure out number of tests that will run
#
-my $ntests = 1846;
+my $ntests = 1999;
+
if ( defined($opts{'compare'}) ) {
- $ntests += 1254;
+ $ntests += 1353;
}
plan( tests=>$ntests );
@@ -319,24 +320,30 @@ sub cat_and_create_namelistinfile {
foreach my $driver ( "mct", "nuopc" ) {
print " For $driver driver\n\n";
# configuration, structure, irrigate, verbose, clm_demand, ssp_rcp, test, sim_year, use_case
- foreach my $options ( "-configuration nwp",
- "-structure fast",
- "-namelist '&a irrigate=.true./'", "-verbose", "-ssp_rcp SSP1-2.6", "-test", "-sim_year 1850",
- "-namelist '&a use_lai_streams=.true.,use_soil_moisture_streams=.true./'",
- "-use_case 1850_control",
+ foreach my $options ( "-res 0.9x1.25 -configuration nwp",
+ "-res 0.9x1.25 -structure fast",
+ "-res 0.9x1.25 -namelist '&a irrigate=.true./'", "-res 0.9x1.25 -verbose", "-res 0.9x1.25 -ssp_rcp SSP1-2.6", "-res 0.9x1.25 -test", "-res 0.9x1.25 -sim_year 1850",
+ "-res 0.9x1.25 -namelist '&a use_lai_streams=.true.,use_soil_moisture_streams=.true./'",
+ "-res 0.9x1.25 -namelist '&a use_excess_ice=.true. use_excess_ice_streams=.true./'",
+ "-res 0.9x1.25 -namelist '&a use_excess_ice=.true. use_excess_ice_streams=.false./'",
+ "-res 0.9x1.25 -use_case 1850_control",
"-res 1x1pt_US-UMB -clm_usr_name 1x1pt_US-UMB -namelist '&a fsurdat=\"/dev/null\"/'",
"-res 1x1_brazil",
- "-clm_start_type startup", "-namelist '&a irrigate=.false./' -crop -bgc bgc",
- "-envxml_dir . -infile myuser_nl_clm",
- "-ignore_ic_date -clm_start_type branch -namelist '&a nrevsn=\"thing.nc\"/' -bgc bgc -crop",
- "-clm_start_type branch -namelist '&a nrevsn=\"thing.nc\",use_init_interp=T/'",
- "-ignore_ic_date -clm_start_type startup -namelist '&a finidat=\"thing.nc\"/' -bgc bgc -crop",
+ "-res 0.9x1.25 -clm_start_type startup", "-namelist '&a irrigate=.false./' -crop -bgc bgc",
+ "-res 0.9x1.25 -infile myuser_nl_clm",
+ "-res 0.9x1.25 -ignore_ic_date -clm_start_type branch -namelist '&a nrevsn=\"thing.nc\"/' -bgc bgc -crop",
+ "-res 0.9x1.25 -clm_start_type branch -namelist '&a nrevsn=\"thing.nc\",use_init_interp=T/'",
+ "-res 0.9x1.25 -ignore_ic_date -clm_start_type startup -namelist '&a finidat=\"thing.nc\"/' -bgc bgc -crop",
) {
my $file = $startfile;
&make_env_run();
- my $base_options = "-res 0.9x1.25 -envxml_dir . -driver $driver";
+ my $base_options = "-envxml_dir . -driver $driver";
if ( $driver eq "mct" ) {
$base_options = "$base_options -lnd_frac $DOMFILE";
+ # Skip the MCT test for excess ice streams
+ if ( $options =~ /use_excess_ice_streams=.true./ ) {
+ next;
+ }
} else {
$base_options = "$base_options -namelist '&a force_send_to_atm = .false./'";
}
@@ -374,7 +381,7 @@ sub cat_and_create_namelistinfile {
"JORN", "LAJA", "MOAB", "OAES", "OSBS", "SCBI", "SOAP", "STER", "TOOL",
"UNDE", "YELL"
) {
- &make_env_run();
+ &make_env_run( NEONSITE=>"$site" );
#
# Concatonate default usermods and specific sitetogether expanding env variables while doing that
#
@@ -393,7 +400,7 @@ sub cat_and_create_namelistinfile {
#
# Now run the site
#
- my $options = "-res CLM_USRDAT -clm_usr_name NEON -no-megan -bgc bgc -sim_year 2000 -infile $namelistfile";
+ my $options = "--res CLM_USRDAT --clm_usr_name NEON --no-megan --bgc bgc --use_case 2018_control --infile $namelistfile";
eval{ system( "$bldnml -envxml_dir . $options > $tempfile 2>&1 " ); };
is( $@, '', "options: $options" );
$cfiles->checkfilesexist( "$options", $mode );
@@ -466,6 +473,9 @@ sub cat_and_create_namelistinfile {
"-bgc bgc -use_case 2000_control -namelist \"&a fire_method='nofire'/\" -crop",
"-res 0.9x1.25 -bgc sp -use_case 1850_noanthro_control -drydep -fire_emis",
"-res 0.9x1.25 -bgc bgc -use_case 1850_noanthro_control -drydep -fire_emis -light_res 360x720",
+ "--bgc bgc --light_res none --namelist \"&a fire_method='nofire'/\"",
+ "--bgc fates --light_res 360x720 --no-megan --namelist \"&a fates_spitfire_mode=2/\"",
+ "--bgc fates --light_res none --no-megan --namelist \"&a fates_spitfire_mode=1/\"",
) {
my $file = $startfile;
&make_env_run();
@@ -521,8 +531,33 @@ sub cat_and_create_namelistinfile {
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm4_5",
},
- "soilm_stream wo use" =>{ options=>"-res 0.9x1.25 -envxml_dir .",
- namelst=>"use_soil_moisture_streams = .false.,stream_fldfilename_soilm='missing_file'",
+ "soilm_stream off w file" =>{ options=>"-res 0.9x1.25 -envxml_dir .",
+ namelst=>"use_soil_moisture_streams = .false.,stream_fldfilename_soilm='file_provided_when_off'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "exice_stream off w file" =>{ options=>"-res 0.9x1.25 -envxml_dir .",
+ namelst=>"use_excess_ice=.true., use_excess_ice_streams = .false.,stream_fldfilename_exice='file_provided_when_off'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "exice_stream off w mesh" =>{ options=>"-res 0.9x1.25 -envxml_dir .",
+ namelst=>"use_excess_ice=.true., use_excess_ice_streams = .false.,stream_meshfile_exice='file_provided_when_off'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "exice off, but stream on" =>{ options=>"-res 0.9x1.25 -envxml_dir .",
+ namelst=>"use_excess_ice=.false., use_excess_ice_streams = .true.,stream_fldfilename_exice='file_provided', stream_meshfile_exice='file_provided'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "exice stream off, but setmap"=>{ options=>"-res 0.9x1.25 -envxml_dir .",
+ namelst=>"use_excess_ice=.true., use_excess_ice_streams = .false.,stream_mapalgo_exice='bilinear'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "exice stream on, but mct" =>{ options=>"--res 0.9x1.25 --envxml_dir . --driver mct --lnd_frac $DOMFILE ",
+ namelst=>"use_excess_ice=.true., use_excess_ice_streams=.true.",
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm5_0",
},
@@ -686,6 +721,11 @@ sub cat_and_create_namelistinfile {
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm5_0",
},
+ "NEONlightresButGlobal" =>{ options=>"--res 4x5 --bgc bgc --envxml_dir . --light_res 106x740",
+ namelst=>"",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_1",
+ },
"spno-fire" =>{ options=>"-bgc sp -envxml_dir . -use_case 2000_control",
namelst=>"fire_method='nofire'",
GLC_TWO_WAY_COUPLING=>"FALSE",
@@ -971,6 +1011,26 @@ sub cat_and_create_namelistinfile {
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm5_1",
},
+ "FATESwspitfireOffLigtOn" =>{ options=>"-bgc fates -envxml_dir . -no-megan -light_res 360x720",
+ namelst=>"fates_spitfire_mode=0",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_1",
+ },
+ "useFATESWluna" =>{ options=>"--bgc fates --envxml_dir . --no-megan",
+ namelst=>"use_luna=TRUE",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_1",
+ },
+ "useFATESWfun" =>{ options=>"--bgc fates --envxml_dir . --no-megan",
+ namelst=>"use_fun=TRUE",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_1",
+ },
+ "useFATESWOsuplnitro" =>{ options=>"--bgc fates --envxml_dir . --no-megan",
+ namelst=>"suplnitro='NONE'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_1",
+ },
"FireNoneButBGCfireon" =>{ options=>"-bgc bgc -envxml_dir . -light_res none",
namelst=>"fire_method='li2021gswpfrc'",
GLC_TWO_WAY_COUPLING=>"FALSE",
@@ -1001,11 +1061,26 @@ sub cat_and_create_namelistinfile {
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm4_5",
},
+ "useinventorybutnotfile" =>{ options=>"--res 0.9x1.25 --bgc fates --envxml_dir . --no-megan",
+ namelst=>"use_fates_luh=.true.",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm4_5",
+ },
+ "inventoryfileDNE" =>{ options=>"-bgc fates -envxml_dir . -no-megan",
+ namelst=>"use_fates_luh=.true., fluh_timeseries='zztop'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm4_5",
+ },
"useMEGANwithFATES" =>{ options=>"-bgc fates -envxml_dir . -megan",
namelst=>"",
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm4_5",
},
+ "useFIREEMISwithFATES" =>{ options=>"-bgc fates -envxml_dir . -fire_emis --no-megan",
+ namelst=>"",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm4_5",
+ },
"useDRYDEPwithFATES" =>{ options=>"--bgc fates --envxml_dir . --no-megan --drydep",
namelst=>"",
GLC_TWO_WAY_COUPLING=>"FALSE",
@@ -1056,6 +1131,21 @@ sub cat_and_create_namelistinfile {
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm5_0",
},
+ "dogrossandsp" =>{ options=>"--envxml_dir . --bgc sp --use_case 20thC_transient",
+ namelst=>"do_grossunrep=.true.",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "dogrossandfates" =>{ options=>"--envxml_dir . --bgc fates --use_case 20thC_transient --no-megan",
+ namelst=>"do_grossunrep=.true.",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "dogrossandnottrans" =>{ options=>"--envxml_dir . --bgc bgc --use_case 2000_control",
+ namelst=>"do_grossunrep=.true.",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
"nocropwfert" =>{ options=>"-envxml_dir . -bgc sp -no-crop",
namelst=>"use_fertilizer=T",
GLC_TWO_WAY_COUPLING=>"FALSE",
@@ -1146,6 +1236,26 @@ sub cat_and_create_namelistinfile {
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm5_0",
},
+ "fates_non_sp_laistreams" =>{ options=>"--envxml_dir . --bgc fates",
+ namelst=>"use_lai_streams=.true., use_fates_sp=.false.",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "bgc_non_sp_laistreams" =>{ options=>"--envxml_dir . -bgc bgc",
+ namelst=>"use_lai_streams=.true.",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "bgc_laistreams_input" =>{ options=>"--envxml_dir . --bgc bgc",
+ namelst=>"stream_year_first_lai=1999",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
+ "crop_laistreams_input" =>{ options=>"--envxml_dir . --bgc sp --crop",
+ namelst=>"use_lai_streams=.true.",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_0",
+ },
);
foreach my $key ( keys(%failtest) ) {
print( "$key\n" );
@@ -1207,6 +1317,11 @@ sub cat_and_create_namelistinfile {
GLC_TWO_WAY_COUPLING=>"FALSE",
phys=>"clm5_1",
},
+ "NotNEONbutNEONlightres" =>{ options=>"--res CLM_USRDAT --clm_usr_name regional --envxml_dir . --bgc bgc --light_res 106x174",
+ namelst=>"fsurdat='build-namelist_test.pl'",
+ GLC_TWO_WAY_COUPLING=>"FALSE",
+ phys=>"clm5_1",
+ },
);
foreach my $key ( keys(%warntest) ) {
print( "$key\n" );
@@ -1439,7 +1554,7 @@ sub cat_and_create_namelistinfile {
my $usecase = "20thC_transient";
my $GLC_NEC = 10;
foreach my $res ( @tran_res ) {
- $options = "-res $res -use_case $usecase -envxml_dir . -namelist '&a start_ymd=18500101/'";
+ $options = "-res $res -use_case $usecase -envxml_dir . -namelist '&a start_ymd=18500101/' -bgc bgc -crop -namelist '&a do_grossunrep=T/'";
&make_env_run();
eval{ system( "$bldnml $options > $tempfile 2>&1 " ); };
is( $@, '', "$options" );
diff --git a/bld/unit_testers/xFail/expectedClmTestFails.xml b/bld/unit_testers/xFail/expectedClmTestFails.xml
index 12c954d38b..c7cbfee488 100644
--- a/bld/unit_testers/xFail/expectedClmTestFails.xml
+++ b/bld/unit_testers/xFail/expectedClmTestFails.xml
@@ -34,19 +34,6 @@
-
-
-
- Doesn't check for valid values
-
-
-
-
-
-
-
-
diff --git a/cime_config/SystemTests/__init__.py b/cime_config/SystemTests/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cime_config/SystemTests/fsurdatmodifyctsm.py b/cime_config/SystemTests/fsurdatmodifyctsm.py
index 899ab1aead..03e437d5c4 100644
--- a/cime_config/SystemTests/fsurdatmodifyctsm.py
+++ b/cime_config/SystemTests/fsurdatmodifyctsm.py
@@ -5,114 +5,90 @@
import os
import re
-import subprocess
from CIME.SystemTests.system_tests_common import SystemTestsCommon
from CIME.XML.standard_module_setup import *
from CIME.SystemTests.test_utils.user_nl_utils import append_to_user_nl_files
+# For calling fsurdat_modifier
+from argparse import Namespace
+
+_CTSM_PYTHON = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)), os.pardir, os.pardir, "python"
+)
+sys.path.insert(1, _CTSM_PYTHON)
+
logger = logging.getLogger(__name__)
-class FSURDATMODIFYCTSM(SystemTestsCommon):
+class FSURDATMODIFYCTSM(SystemTestsCommon):
def __init__(self, case):
"""
initialize an object interface to the SMS system test
"""
SystemTestsCommon.__init__(self, case)
- if not os.path.exists(os.path.join(self._get_caseroot(),
- 'done_FSURDATMODIFYCTSM_setup.txt')):
+ if not os.path.exists(
+ os.path.join(self._get_caseroot(), "done_FSURDATMODIFYCTSM_setup.txt")
+ ):
# Create out-of-the-box lnd_in to obtain fsurdat_in
- case.create_namelists(component='lnd')
+ case.create_namelists(component="lnd")
# If fsurdat_in does not exist, download it from the server
case.check_all_input_data()
- lnd_in_path = os.path.join(self._get_caseroot(), 'CaseDocs/lnd_in')
- with open (lnd_in_path,'r') as lnd_in:
+ lnd_in_path = os.path.join(self._get_caseroot(), "CaseDocs/lnd_in")
+ with open(lnd_in_path, "r") as lnd_in:
for line in lnd_in:
fsurdat_in = re.match(r" *fsurdat *= *'(.*)'", line)
if fsurdat_in:
self._fsurdat_in = fsurdat_in.group(1)
break
- self._fsurdat_out = os.path.join(self._get_caseroot(), 'fsurdat.nc')
- self._ctsm_root = self._case.get_value( 'COMP_ROOT_DIR_LND')
- self._cfg_file_path = os.path.join(self._get_caseroot(),
- 'modify_fsurdat.cfg')
+ self._fsurdat_out = os.path.join(self._get_caseroot(), "fsurdat.nc")
+ self._ctsm_root = self._case.get_value("COMP_ROOT_DIR_LND")
+ self._cfg_file_path = os.path.join(self._get_caseroot(), "modify_fsurdat.cfg")
+ logger.info(" create config file to modify")
self._create_config_file()
+ logger.info(" run modify_fsurdat")
self._run_modify_fsurdat()
+ logger.info(" modify user_nl files")
self._modify_user_nl()
- with open('done_FSURDATMODIFYCTSM_setup.txt', 'w') as fp:
+ with open("done_FSURDATMODIFYCTSM_setup.txt", "w") as fp:
pass
def _create_config_file(self):
- cfg_template_path = os.path.join(self._ctsm_root,
- 'tools/modify_input_files/modify_fsurdat_template.cfg')
+ cfg_template_path = os.path.join(
+ self._ctsm_root, "tools/modify_input_files/modify_fsurdat_template.cfg"
+ )
- with open (self._cfg_file_path,'w') as cfg_out:
- with open (cfg_template_path,'r') as cfg_in:
+ with open(self._cfg_file_path, "w") as cfg_out:
+ with open(cfg_template_path, "r") as cfg_in:
for line in cfg_in:
- if re.match(r' *fsurdat_in *=', line):
- line = 'fsurdat_in = {}'.format(self._fsurdat_in)
- elif re.match(r' *fsurdat_out *=', line):
- line = 'fsurdat_out = {}'.format(self._fsurdat_out)
- elif re.match(r' *idealized *=', line):
- line = 'idealized = True'
+ if re.match(r" *fsurdat_in *=", line):
+ line = "fsurdat_in = {}".format(self._fsurdat_in)
+ elif re.match(r" *fsurdat_out *=", line):
+ line = "fsurdat_out = {}".format(self._fsurdat_out)
+ elif re.match(r" *idealized *=", line):
+ line = "idealized = True"
cfg_out.write(line)
-
def _run_modify_fsurdat(self):
- tool_path = os.path.join(self._ctsm_root,
- 'tools/modify_input_files/fsurdat_modifier')
- # Need to specify a specific python version that has the required
- # dependencies
- python_path = _get_python_path()
- subprocess.check_call([python_path, tool_path, self._cfg_file_path])
+ fsurdat_modifier_args = Namespace(
+ cfg_path=self._cfg_file_path,
+ debug=False,
+ fsurdat_in="UNSET",
+ fsurdat_out="UNSET",
+ overwrite=False,
+ silent=False,
+ verbose=False,
+ )
+ from ctsm.modify_input_files.fsurdat_modifier import fsurdat_modifier
+
+ fsurdat_modifier(fsurdat_modifier_args)
def _modify_user_nl(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "fsurdat = '{}'".format(self._fsurdat_out))
-
-def _get_python_path():
- """Get path to ncar_pylib's python on cheyenne
-
- This is needed because we need a python environment that includes xarray
- and its dependencies. This is currently hard-coded for cheyenne until we
- come up with a robust way in CIME of ensuring that the correc python
- environment is loaded.
-
- """
- out = subprocess.check_output(['/glade/u/apps/opt/ncar_pylib/ncar_pylib',
- '-l'], universal_newlines=True)
-
- # First look for a loaded ('L') python
- path = _find_path_from_pylib_output(out, 'L')
- # If no loaded python found, look for a default ('D') python
- if path is None:
- path = _find_path_from_pylib_output(out, 'D')
-
- if path is None:
- raise RuntimeError('No python found')
-
- return os.path.join(path, 'bin', 'python')
-
-def _find_path_from_pylib_output(ncar_pylib_output, char):
- """Given line-by-line output from ncar_pylib, return the path to python if found
-
- Args:
- - ncar_pylib_output: line-by-line output from ncar_pylib
- - char: the character to look for in the leading parenthetical expression (typically 'L' or 'D')
-
- Returns a path to python, or None if not found
- """
- # The line of interest looks like the following (for char = 'L'):
- # (L) ... /path/to/python
- regex = r'\(' + char + r'\).* (/\S+)'
- for line in ncar_pylib_output.splitlines():
- match_line = re.match(regex, line)
- if match_line:
- return match_line.group(1)
-
- return None
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="fsurdat = '{}'".format(self._fsurdat_out),
+ )
diff --git a/cime_config/SystemTests/funitctsm.py b/cime_config/SystemTests/funitctsm.py
index 8634a74c2f..783e5b5d85 100644
--- a/cime_config/SystemTests/funitctsm.py
+++ b/cime_config/SystemTests/funitctsm.py
@@ -14,8 +14,8 @@
logger = logging.getLogger(__name__)
-class FUNITCTSM(FUNIT):
+class FUNITCTSM(FUNIT):
def __init__(self, case):
FUNIT.__init__(self, case)
diff --git a/cime_config/SystemTests/lciso.py b/cime_config/SystemTests/lciso.py
index 12a74d5d5c..a9edba8e80 100644
--- a/cime_config/SystemTests/lciso.py
+++ b/cime_config/SystemTests/lciso.py
@@ -14,24 +14,28 @@
logger = logging.getLogger(__name__)
-class LCISO(SystemTestsCompareTwo):
+class LCISO(SystemTestsCompareTwo):
def __init__(self, case):
self.comp = case.get_value("COMP_LND")
- SystemTestsCompareTwo.__init__(self, case,
- separate_builds = False,
- run_two_suffix = 'cisoallon',
- run_one_description = 'carbon isotopes off',
- run_two_description = 'c13 and c14 isotopes on as well as C isotope time series',
- ignore_fieldlist_diffs = True)
+ SystemTestsCompareTwo.__init__(
+ self,
+ case,
+ separate_builds=False,
+ run_two_suffix="cisoallon",
+ run_one_description="carbon isotopes off",
+ run_two_description="c13 and c14 isotopes on as well as C isotope time series",
+ ignore_fieldlist_diffs=True,
+ )
def _case_one_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = self.comp,
- contents = "use_c13=F, use_c14=F")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(), component=self.comp, contents="use_c13=F, use_c14=F"
+ )
def _case_two_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = self.comp,
- contents = "use_c13=.true.,use_c14=.true.,use_c13_timeseries=.true.,use_c14_bombspike=.true." )
-
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component=self.comp,
+ contents="use_c13=.true.,use_c14=.true.,use_c13_timeseries=.true.,use_c14_bombspike=.true.",
+ )
diff --git a/cime_config/SystemTests/lgrain2.py b/cime_config/SystemTests/lgrain2.py
index 129c3275e3..f4e19ad930 100644
--- a/cime_config/SystemTests/lgrain2.py
+++ b/cime_config/SystemTests/lgrain2.py
@@ -19,22 +19,29 @@
logger = logging.getLogger(__name__)
-class LGRAIN2(SystemTestsCompareTwo):
+class LGRAIN2(SystemTestsCompareTwo):
def __init__(self, case):
- SystemTestsCompareTwo.__init__(self, case,
- separate_builds = False,
- run_two_suffix = 'grain1',
- run_one_description = 'use a second grain pool',
- run_two_description = 'use a single grain pool',
- ignore_fieldlist_diffs = True)
+ SystemTestsCompareTwo.__init__(
+ self,
+ case,
+ separate_builds=False,
+ run_two_suffix="grain1",
+ run_one_description="use a second grain pool",
+ run_two_description="use a single grain pool",
+ ignore_fieldlist_diffs=True,
+ )
def _case_one_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "for_testing_use_second_grain_pool=.true.")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="for_testing_use_second_grain_pool=.true.",
+ )
def _case_two_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "for_testing_use_second_grain_pool=.false.")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="for_testing_use_second_grain_pool=.false.",
+ )
diff --git a/cime_config/SystemTests/lii.py b/cime_config/SystemTests/lii.py
index d89bd0aa09..de274256a3 100644
--- a/cime_config/SystemTests/lii.py
+++ b/cime_config/SystemTests/lii.py
@@ -35,22 +35,24 @@
logger = logging.getLogger(__name__)
-class LII(SystemTestsCompareTwo):
+class LII(SystemTestsCompareTwo):
def __init__(self, case):
- SystemTestsCompareTwo.__init__(self, case,
- separate_builds = False,
- run_two_suffix = 'no_interp',
- run_one_description = 'use_init_interp set to true',
- run_two_description = 'use_init_interp set to false')
+ SystemTestsCompareTwo.__init__(
+ self,
+ case,
+ separate_builds=False,
+ run_two_suffix="no_interp",
+ run_one_description="use_init_interp set to true",
+ run_two_description="use_init_interp set to false",
+ )
def _case_one_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "use_init_interp = .true.")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(), component="clm", contents="use_init_interp = .true."
+ )
def _case_two_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "use_init_interp = .false.")
-
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(), component="clm", contents="use_init_interp = .false."
+ )
diff --git a/cime_config/SystemTests/lii2finidatareas.py b/cime_config/SystemTests/lii2finidatareas.py
index f7a0a2f10e..337e46bf39 100644
--- a/cime_config/SystemTests/lii2finidatareas.py
+++ b/cime_config/SystemTests/lii2finidatareas.py
@@ -58,13 +58,15 @@
logger = logging.getLogger(__name__)
-class LII2FINIDATAREAS(LII):
+class LII2FINIDATAREAS(LII):
def __init__(self, case):
super(LII2FINIDATAREAS, self).__init__(case)
def _case_one_setup(self):
super(LII2FINIDATAREAS, self)._case_one_setup()
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "init_interp_method = 'use_finidat_areas'")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="init_interp_method = 'use_finidat_areas'",
+ )
diff --git a/cime_config/SystemTests/lilacsmoke.py b/cime_config/SystemTests/lilacsmoke.py
index eec54579a5..66a94068da 100644
--- a/cime_config/SystemTests/lilacsmoke.py
+++ b/cime_config/SystemTests/lilacsmoke.py
@@ -27,57 +27,61 @@
from CIME.SystemTests.system_tests_common import SystemTestsCommon
from CIME.utils import run_cmd, run_cmd_no_fail, symlink_force, new_lid, safe_copy, append_testlog
from CIME.build import post_build
-from CIME.test_status import NAMELIST_PHASE, GENERATE_PHASE, BASELINE_PHASE, TEST_PASS_STATUS, TEST_FAIL_STATUS
+from CIME.test_status import (
+ NAMELIST_PHASE,
+ GENERATE_PHASE,
+ BASELINE_PHASE,
+ TEST_PASS_STATUS,
+ TEST_FAIL_STATUS,
+)
from CIME.XML.standard_module_setup import *
logger = logging.getLogger(__name__)
-_LILAC_RUNTIME_FILES = ['lnd_in', 'lnd_modelio.nml', 'lilac_in']
+_LILAC_RUNTIME_FILES = ["lnd_in", "lnd_modelio.nml", "lilac_in"]
-class LILACSMOKE(SystemTestsCommon):
+class LILACSMOKE(SystemTestsCommon):
def __init__(self, case):
SystemTestsCommon.__init__(self, case)
def build_phase(self, sharedlib_only=False, model_only=False):
if not sharedlib_only:
- lndroot = self._case.get_value('COMP_ROOT_DIR_LND')
- exeroot = self._case.get_value('EXEROOT')
+ lndroot = self._case.get_value("COMP_ROOT_DIR_LND")
+ exeroot = self._case.get_value("EXEROOT")
build_dir = self._lilac_build_dir()
- script_path = os.path.abspath(os.path.join(lndroot, 'lilac', 'build_ctsm'))
+ script_path = os.path.abspath(os.path.join(lndroot, "lilac", "build_ctsm"))
# We only run the initial build command if the build_dir doesn't exist
# yet. This is to support rebuilding the test case. (The first time through,
# the build_dir won't exist yet; subsequent times, it will already exist, so
# we skip to the rebuild command.)
if not os.path.isdir(build_dir):
- machine = self._case.get_value('MACH')
- compiler = self._case.get_value('COMPILER')
- debug = self._case.get_value('DEBUG')
+ machine = self._case.get_value("MACH")
+ compiler = self._case.get_value("COMPILER")
+ debug = self._case.get_value("DEBUG")
# It would be possible to do this testing via the python interface rather
# than through a separate subprocess. However, we do it through a
# subprocess in order to test the full build_ctsm script, including
# command-line parsing.
- cmd = '{script_path} {build_dir} --machine {machine} --compiler {compiler}'.format(
- script_path=script_path,
- build_dir=build_dir,
- machine=machine,
- compiler=compiler)
+ cmd = "{script_path} {build_dir} --machine {machine} --compiler {compiler}".format(
+ script_path=script_path, build_dir=build_dir, machine=machine, compiler=compiler
+ )
# It isn't straightforward to determine if pnetcdf is available on a
# machine. To keep things simple, always run without pnetcdf.
- cmd += ' --no-pnetcdf'
+ cmd += " --no-pnetcdf"
if debug:
- cmd += ' --build-debug'
- self._run_build_cmd(cmd, exeroot, 'build_ctsm.bldlog')
+ cmd += " --build-debug"
+ self._run_build_cmd(cmd, exeroot, "build_ctsm.bldlog")
# We call the build script with --rebuild even for an initial build. This is
# so we make sure to test the code path for --rebuild. (This is also needed if
# the user rebuilds the test case, in which case this will be the only command
# run, since the build_dir will already exist.)
- cmd = '{script_path} {build_dir} --rebuild'.format(
- script_path=script_path,
- build_dir=build_dir)
- self._run_build_cmd(cmd, exeroot, 'rebuild_ctsm.bldlog')
+ cmd = "{script_path} {build_dir} --rebuild".format(
+ script_path=script_path, build_dir=build_dir
+ )
+ self._run_build_cmd(cmd, exeroot, "rebuild_ctsm.bldlog")
self._build_atm_driver()
@@ -95,51 +99,62 @@ def build_phase(self, sharedlib_only=False, model_only=False):
post_build(self._case, logs=[], build_complete=True)
def _build_atm_driver(self):
- caseroot = self._case.get_value('CASEROOT')
- lndroot = self._case.get_value('COMP_ROOT_DIR_LND')
- blddir = os.path.join(caseroot, 'lilac_atm_driver', 'bld')
+ caseroot = self._case.get_value("CASEROOT")
+ lndroot = self._case.get_value("COMP_ROOT_DIR_LND")
+ blddir = os.path.join(caseroot, "lilac_atm_driver", "bld")
if not os.path.exists(blddir):
os.makedirs(blddir)
- symlink_force(os.path.join(lndroot, 'lilac', 'atm_driver', 'Makefile'),
- os.path.join(blddir, 'Makefile'))
- symlink_force(os.path.join(lndroot, 'lilac', 'atm_driver', 'atm_driver.F90'),
- os.path.join(blddir, 'atm_driver.F90'))
- symlink_force(os.path.join(self._lilac_build_dir(), 'case', 'Macros.make'),
- os.path.join(blddir, 'Macros.make'))
-
- makevars = 'COMPILER={compiler} DEBUG={debug} CTSM_MKFILE={ctsm_mkfile}'.format(
- compiler=self._case.get_value('COMPILER'),
- debug=str(self._case.get_value('DEBUG')).upper(),
- ctsm_mkfile=os.path.join(self._lilac_build_dir(), 'ctsm.mk'))
- makecmd = 'make {makevars} atm_driver'.format(makevars=makevars)
+ symlink_force(
+ os.path.join(lndroot, "lilac", "atm_driver", "Makefile"),
+ os.path.join(blddir, "Makefile"),
+ )
+ symlink_force(
+ os.path.join(lndroot, "lilac", "atm_driver", "atm_driver.F90"),
+ os.path.join(blddir, "atm_driver.F90"),
+ )
+ symlink_force(
+ os.path.join(self._lilac_build_dir(), "case", "Macros.make"),
+ os.path.join(blddir, "Macros.make"),
+ )
+
+ makevars = "COMPILER={compiler} DEBUG={debug} CTSM_MKFILE={ctsm_mkfile}".format(
+ compiler=self._case.get_value("COMPILER"),
+ debug=str(self._case.get_value("DEBUG")).upper(),
+ ctsm_mkfile=os.path.join(self._lilac_build_dir(), "ctsm.mk"),
+ )
+ makecmd = "make {makevars} atm_driver".format(makevars=makevars)
# Normally the user will source either ctsm_build_environment.sh or
# ctsm_build_environment.csh before building the atmosphere model. In the context
# of this test case, case.load_env does the equivalent.
self._case.load_env()
- self._run_build_cmd(makecmd, blddir, 'atm_driver.bldlog')
+ self._run_build_cmd(makecmd, blddir, "atm_driver.bldlog")
def _create_link_to_atm_driver(self):
- caseroot = self._case.get_value('CASEROOT')
- run_exe = (self._case.get_value('run_exe')).strip()
+ caseroot = self._case.get_value("CASEROOT")
+ run_exe = (self._case.get_value("run_exe")).strip()
# Make a symlink to the atm_driver executable so that the case's run command finds
# it in the expected location
- symlink_force(os.path.join(caseroot, 'lilac_atm_driver', 'bld', 'atm_driver.exe'),
- run_exe)
+ symlink_force(os.path.join(caseroot, "lilac_atm_driver", "bld", "atm_driver.exe"), run_exe)
def _create_runtime_inputs(self):
- caseroot = self._case.get_value('CASEROOT')
+ caseroot = self._case.get_value("CASEROOT")
runtime_inputs = self._runtime_inputs_dir()
# NOTE: *** this test is currently tied to this single 10x15 grid resolution ***
- lnd_grid = self._case.get_value('LND_GRID')
- expect(lnd_grid == '10x15',
- "this test is currently tied to this single 10x15 grid resolution")
- lnd_domain_file = os.path.join(self._case.get_value('DIN_LOC_ROOT'),"share","domains",
- "domain.lnd.fv10x15_gx3v7.180321.nc")
+ lnd_grid = self._case.get_value("LND_GRID")
+ expect(
+ lnd_grid == "10x15", "this test is currently tied to this single 10x15 grid resolution"
+ )
+ lnd_domain_file = os.path.join(
+ self._case.get_value("DIN_LOC_ROOT"),
+ "share",
+ "domains",
+ "domain.lnd.fv10x15_gx3v7.180321.nc",
+ )
# Cheat a bit here: Get the fsurdat file from the already-generated lnd_in file in
# the host test case - i.e., from the standard cime-based preview_namelists. But
@@ -147,75 +162,96 @@ def _create_runtime_inputs(self):
# we expect the user to identify fsurdat manually; in this testing situation, we
# need to come up with some way to replace this manual identification, so cheating
# feels acceptable.
- self._case.create_namelists(component='lnd')
+ self._case.create_namelists(component="lnd")
fsurdat = self._extract_var_from_namelist(
- nl_filename=os.path.join(caseroot, 'CaseDocs', 'lnd_in'),
- varname='fsurdat')
+ nl_filename=os.path.join(caseroot, "CaseDocs", "lnd_in"), varname="fsurdat"
+ )
- self._fill_in_variables_in_file(filepath=os.path.join(runtime_inputs, 'ctsm.cfg'),
- replacements={'lnd_domain_file':lnd_domain_file,
- 'fsurdat':fsurdat})
+ self._fill_in_variables_in_file(
+ filepath=os.path.join(runtime_inputs, "ctsm.cfg"),
+ replacements={"lnd_domain_file": lnd_domain_file, "fsurdat": fsurdat},
+ )
# The user_nl_ctsm in the case directory is set up based on the standard testmods
# mechanism. We use that one in place of the standard user_nl_ctsm, since the one
# in the case directory may contain test-specific modifications.
- shutil.copyfile(src=os.path.join(caseroot, 'user_nl_ctsm'),
- dst=os.path.join(runtime_inputs, 'user_nl_ctsm'))
-
- script_to_run = os.path.join(runtime_inputs, 'make_runtime_inputs')
- self._run_build_cmd('{} --rundir {}'.format(script_to_run, runtime_inputs),
- runtime_inputs,
- 'make_runtime_inputs.log')
+ shutil.copyfile(
+ src=os.path.join(caseroot, "user_nl_ctsm"),
+ dst=os.path.join(runtime_inputs, "user_nl_ctsm"),
+ )
+
+ script_to_run = os.path.join(runtime_inputs, "make_runtime_inputs")
+ self._run_build_cmd(
+ "{} --rundir {}".format(script_to_run, runtime_inputs),
+ runtime_inputs,
+ "make_runtime_inputs.log",
+ )
# In lilac_in, we intentionally use the land mesh file for both atm_mesh_filename
# and lnd_mesh_filename
- lnd_mesh = self._case.get_value('LND_DOMAIN_MESH')
- casename = self._case.get_value('CASE')
- self._fill_in_variables_in_file(filepath=os.path.join(runtime_inputs, 'lilac_in'),
- replacements={'caseid':casename,
- 'atm_mesh_filename':lnd_mesh,
- 'lnd_mesh_filename':lnd_mesh,
- 'lilac_histfreq_option':'ndays'},
- placeholders={'caseid':'ctsm_lilac',
- 'lilac_histfreq_option':'never'})
+ lnd_mesh = self._case.get_value("LND_DOMAIN_MESH")
+ casename = self._case.get_value("CASE")
+ self._fill_in_variables_in_file(
+ filepath=os.path.join(runtime_inputs, "lilac_in"),
+ replacements={
+ "caseid": casename,
+ "atm_mesh_filename": lnd_mesh,
+ "lnd_mesh_filename": lnd_mesh,
+ "lilac_histfreq_option": "ndays",
+ },
+ placeholders={"caseid": "ctsm_lilac", "lilac_histfreq_option": "never"},
+ )
# We run download_input_data partly because it may be needed and partly to test
# this script.
- script_to_run = os.path.join(runtime_inputs, 'download_input_data')
- self._run_build_cmd('{} --rundir {}'.format(script_to_run, runtime_inputs),
- runtime_inputs,
- 'download_input_data.log')
+ script_to_run = os.path.join(runtime_inputs, "download_input_data")
+ self._run_build_cmd(
+ "{} --rundir {}".format(script_to_run, runtime_inputs),
+ runtime_inputs,
+ "download_input_data.log",
+ )
def _setup_atm_driver_rundir(self):
"""Set up the directory from which we will actually do the run"""
- lndroot = self._case.get_value('COMP_ROOT_DIR_LND')
+ lndroot = self._case.get_value("COMP_ROOT_DIR_LND")
rundir = self._atm_driver_rundir()
if not os.path.exists(rundir):
os.makedirs(rundir)
- shutil.copyfile(src=os.path.join(lndroot, 'lilac', 'atm_driver', 'atm_driver_in'),
- dst=os.path.join(rundir, 'atm_driver_in'))
+ shutil.copyfile(
+ src=os.path.join(lndroot, "lilac", "atm_driver", "atm_driver_in"),
+ dst=os.path.join(rundir, "atm_driver_in"),
+ )
# As elsewhere: assume the land variables also apply to the atmosphere
- lnd_mesh = self._case.get_value('LND_DOMAIN_MESH')
- lnd_nx = self._case.get_value('LND_NX')
- lnd_ny = self._case.get_value('LND_NY')
- expect(self._case.get_value('STOP_OPTION') == 'ndays',
- 'LILAC testing currently assumes STOP_OPTION of ndays, not {}'.format(
- self._case.get_value('STOP_OPTION')))
- stop_n = self._case.get_value('STOP_N')
- casename = self._case.get_value('CASE')
- self._fill_in_variables_in_file(filepath=os.path.join(rundir, 'atm_driver_in'),
- replacements={'caseid':casename,
- 'atm_mesh_file':lnd_mesh,
- 'atm_global_nx':str(lnd_nx),
- 'atm_global_ny':str(lnd_ny),
- 'atm_stop_day':str(stop_n+1),
- 'atm_ndays_all_segs':str(stop_n)})
+ lnd_mesh = self._case.get_value("LND_DOMAIN_MESH")
+ lnd_nx = self._case.get_value("LND_NX")
+ lnd_ny = self._case.get_value("LND_NY")
+ expect(
+ self._case.get_value("STOP_OPTION") == "ndays",
+ "LILAC testing currently assumes STOP_OPTION of ndays, not {}".format(
+ self._case.get_value("STOP_OPTION")
+ ),
+ )
+ stop_n = self._case.get_value("STOP_N")
+ casename = self._case.get_value("CASE")
+ self._fill_in_variables_in_file(
+ filepath=os.path.join(rundir, "atm_driver_in"),
+ replacements={
+ "caseid": casename,
+ "atm_mesh_file": lnd_mesh,
+ "atm_global_nx": str(lnd_nx),
+ "atm_global_ny": str(lnd_ny),
+ "atm_stop_day": str(stop_n + 1),
+ "atm_ndays_all_segs": str(stop_n),
+ },
+ )
for file_to_link in _LILAC_RUNTIME_FILES:
- symlink_force(os.path.join(self._runtime_inputs_dir(), file_to_link),
- os.path.join(rundir, file_to_link))
+ symlink_force(
+ os.path.join(self._runtime_inputs_dir(), file_to_link),
+ os.path.join(rundir, file_to_link),
+ )
init_generated_files_dir = os.path.join(rundir, "init_generated_files")
if not os.path.exists(init_generated_files_dir):
@@ -236,8 +272,8 @@ def _cmpgen_namelists(self):
because that one will have compared the test's standard CaseDocs with the files
generated from here - and those two sets of namelists can be quite different.
"""
- caseroot = self._case.get_value('CASEROOT')
- casedocs = os.path.join(caseroot, 'CaseDocs')
+ caseroot = self._case.get_value("CASEROOT")
+ casedocs = os.path.join(caseroot, "CaseDocs")
if os.path.exists(casedocs):
shutil.rmtree(casedocs)
os.makedirs(casedocs)
@@ -245,12 +281,13 @@ def _cmpgen_namelists(self):
# case_cmpgen_namelists uses the existence of drv_in to decide whether namelists
# need to be regenerated. We do NOT want it to regenerate namelists, so we give it
# the file it wants.
- with open(os.path.join(casedocs, 'drv_in'), 'a') as drv_in:
+ with open(os.path.join(casedocs, "drv_in"), "a") as drv_in:
pass
- for onefile in _LILAC_RUNTIME_FILES + ['atm_driver_in']:
- safe_copy(os.path.join(self._atm_driver_rundir(), onefile),
- os.path.join(casedocs, onefile))
+ for onefile in _LILAC_RUNTIME_FILES + ["atm_driver_in"]:
+ safe_copy(
+ os.path.join(self._atm_driver_rundir(), onefile), os.path.join(casedocs, onefile)
+ )
success = self._case.case_cmpgen_namelists()
# The setting of the NLCOMP phase status in case_cmpgen_namelists doesn't work
@@ -259,8 +296,11 @@ def _cmpgen_namelists(self):
# overwriting whatever was set by case_cmpgen_namelists). So we need to set it
# here.
with self._test_status:
- self._test_status.set_status(NAMELIST_PHASE, TEST_PASS_STATUS if success else TEST_FAIL_STATUS,
- comments="(used lilac namelists)")
+ self._test_status.set_status(
+ NAMELIST_PHASE,
+ TEST_PASS_STATUS if success else TEST_FAIL_STATUS,
+ comments="(used lilac namelists)",
+ )
def _extract_var_from_namelist(self, nl_filename, varname):
"""Tries to find a variable named varname in the given file; returns its value
@@ -272,7 +312,7 @@ def _extract_var_from_namelist(self, nl_filename, varname):
match = re.search(r'^ *{} *= *[\'"]([^\'"]+)'.format(varname), line)
if match:
return match.group(1)
- expect(False, '{} not found in {}'.format(varname, nl_filename))
+ expect(False, "{} not found in {}".format(varname, nl_filename))
def _fill_in_variables_in_file(self, filepath, replacements, placeholders=None):
"""For the given file, make the given replacements
@@ -286,35 +326,37 @@ def _fill_in_variables_in_file(self, filepath, replacements, placeholders=None):
if placeholders is None:
placeholders = {}
- orig_filepath = '{}.orig'.format(filepath)
+ orig_filepath = "{}.orig".format(filepath)
if not os.path.exists(orig_filepath):
- shutil.copyfile(src=filepath,
- dst=orig_filepath)
+ shutil.copyfile(src=filepath, dst=orig_filepath)
os.remove(filepath)
counts = dict.fromkeys(replacements, 0)
with open(orig_filepath) as orig_file:
- with open(filepath, 'w') as new_file:
+ with open(filepath, "w") as new_file:
for orig_line in orig_file:
line = orig_line
for varname in replacements:
if varname in placeholders:
this_placeholder = placeholders[varname]
else:
- this_placeholder = 'FILL_THIS_IN'
+ this_placeholder = "FILL_THIS_IN"
line, replacement_done = self._fill_in_variable(
line=line,
varname=varname,
value=replacements[varname],
- placeholder=this_placeholder)
+ placeholder=this_placeholder,
+ )
if replacement_done:
counts[varname] += 1
break
new_file.write(line)
for varname in counts:
- expect(counts[varname] > 0,
- 'Did not find any instances of <{}> to replace in {}'.format(varname, filepath))
+ expect(
+ counts[varname] > 0,
+ "Did not find any instances of <{}> to replace in {}".format(varname, filepath),
+ )
def _fill_in_variable(self, line, varname, value, placeholder):
"""Fill in a placeholder variable in a config or namelist file
@@ -324,9 +366,11 @@ def _fill_in_variable(self, line, varname, value, placeholder):
line is for varname; otherwise returns line unchanged
- replacement_done is True if the replacement was done, otherwise False
"""
- if re.search(r'^ *{} *='.format(varname), line):
- expect(placeholder in line,
- 'Placeholder to replace ({}) not found in <{}>'.format(placeholder, line.strip()))
+ if re.search(r"^ *{} *=".format(varname), line):
+ expect(
+ placeholder in line,
+ "Placeholder to replace ({}) not found in <{}>".format(placeholder, line.strip()),
+ )
newline = line.replace(placeholder, value)
replacement_done = True
else:
@@ -335,13 +379,13 @@ def _fill_in_variable(self, line, varname, value, placeholder):
return (newline, replacement_done)
def _lilac_build_dir(self):
- return os.path.join(self._case.get_value('CASEROOT'), 'lilac_build')
+ return os.path.join(self._case.get_value("CASEROOT"), "lilac_build")
def _runtime_inputs_dir(self):
- return os.path.join(self._lilac_build_dir(), 'runtime_inputs')
+ return os.path.join(self._lilac_build_dir(), "runtime_inputs")
def _atm_driver_rundir(self):
- return os.path.join(self._case.get_value('CASEROOT'), 'lilac_atm_driver', 'run')
+ return os.path.join(self._case.get_value("CASEROOT"), "lilac_atm_driver", "run")
@staticmethod
def _run_build_cmd(cmd, exeroot, logfile):
@@ -378,9 +422,9 @@ def _link_to_output_files(self):
directory. But then we need to create these links afterwards for the sake of
baseline generation / comparison.
"""
- casename = self._case.get_value('CASE')
- rundir = self._case.get_value('RUNDIR')
- pattern = '{}*.nc'.format(casename)
+ casename = self._case.get_value("CASE")
+ rundir = self._case.get_value("RUNDIR")
+ pattern = "{}*.nc".format(casename)
# First remove any old files from the run directory
old_files = glob.glob(os.path.join(rundir, pattern))
diff --git a/cime_config/SystemTests/lreprstruct.py b/cime_config/SystemTests/lreprstruct.py
index 27dab77592..a03fb1815b 100644
--- a/cime_config/SystemTests/lreprstruct.py
+++ b/cime_config/SystemTests/lreprstruct.py
@@ -22,31 +22,54 @@
logger = logging.getLogger(__name__)
-class LREPRSTRUCT(SystemTestsCompareTwo):
+class LREPRSTRUCT(SystemTestsCompareTwo):
def __init__(self, case):
- SystemTestsCompareTwo.__init__(self, case,
- separate_builds = False,
- run_two_suffix = 'grain1',
- run_one_description = 'use a reproductive structure pool',
- run_two_description = 'use a single grain pool',
- ignore_fieldlist_diffs = True)
+ SystemTestsCompareTwo.__init__(
+ self,
+ case,
+ separate_builds=False,
+ run_two_suffix="grain1",
+ run_one_description="use a reproductive structure pool",
+ run_two_description="use a single grain pool",
+ ignore_fieldlist_diffs=True,
+ )
def _case_one_setup(self):
# We don't really need a second grain pool for this test, but we might as well do
# this to further exercise the looping over different reproductive components.
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "for_testing_use_second_grain_pool=.true.")
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "for_testing_use_repr_structure_pool=.true.")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="for_testing_use_second_grain_pool=.true.",
+ )
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="for_testing_use_repr_structure_pool=.true.",
+ )
+
+ # Replace any GRAIN outputs with the same outputs for REPRODUCTIVE1 and REPRODUCTIVE2
+ user_nl_clm_path = os.path.join(self._get_caseroot(), "user_nl_clm")
+ with open(user_nl_clm_path) as f:
+ user_nl_clm_text = f.read()
+ for grain_output in re.findall("GRAIN\w*", user_nl_clm_text):
+ user_nl_clm_text = user_nl_clm_text.replace(
+ grain_output,
+ grain_output.replace("GRAIN", "REPRODUCTIVE1")
+ + "', '"
+ + grain_output.replace("GRAIN", "REPRODUCTIVE2"),
+ )
+ with open(user_nl_clm_path, "w") as f:
+ f.write(user_nl_clm_text)
def _case_two_setup(self):
# This is needed in the nearly-standard case to prevent grain from being used to
# replenish crop seed deficits, thus making grain act like the reproductive
# structure pools. (It wouldn't hurt to do this in case one as well, but it
# shouldn't be needed there, since we shouldn't have any grain there anyway.)
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "for_testing_no_crop_seed_replenishment=.true.")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="for_testing_no_crop_seed_replenishment=.true.",
+ )
diff --git a/cime_config/SystemTests/lvg.py b/cime_config/SystemTests/lvg.py
index 36fae196b2..4b990313f5 100644
--- a/cime_config/SystemTests/lvg.py
+++ b/cime_config/SystemTests/lvg.py
@@ -16,22 +16,28 @@
logger = logging.getLogger(__name__)
-class LVG(SystemTestsCompareTwo):
+class LVG(SystemTestsCompareTwo):
def __init__(self, case):
- SystemTestsCompareTwo.__init__(self, case,
- separate_builds = False,
- run_two_suffix = 'more_virtual',
- run_one_description = 'standard set of virtual columns',
- run_two_description = 'add virtual columns over Antarctica')
+ SystemTestsCompareTwo.__init__(
+ self,
+ case,
+ separate_builds=False,
+ run_two_suffix="more_virtual",
+ run_one_description="standard set of virtual columns",
+ run_two_description="add virtual columns over Antarctica",
+ )
def _case_one_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "glacier_region_behavior = 'single_at_atm_topo', 'virtual', 'virtual', 'multiple'")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="glacier_region_behavior = 'single_at_atm_topo', 'virtual', 'virtual', 'multiple'",
+ )
def _case_two_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "glacier_region_behavior = 'single_at_atm_topo', 'virtual', 'virtual', 'virtual'")
-
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="glacier_region_behavior = 'single_at_atm_topo', 'virtual', 'virtual', 'virtual'",
+ )
diff --git a/cime_config/SystemTests/lwiso.py b/cime_config/SystemTests/lwiso.py
index 1083e2ff36..37cfd42603 100644
--- a/cime_config/SystemTests/lwiso.py
+++ b/cime_config/SystemTests/lwiso.py
@@ -17,15 +17,18 @@
logger = logging.getLogger(__name__)
-class LWISO(SystemTestsCompareTwo):
+class LWISO(SystemTestsCompareTwo):
def __init__(self, case):
- SystemTestsCompareTwo.__init__(self, case,
- separate_builds = False,
- run_two_suffix = 'nowiso',
- run_one_description = 'water isotopes on',
- run_two_description = 'water isotopes off',
- ignore_fieldlist_diffs = True)
+ SystemTestsCompareTwo.__init__(
+ self,
+ case,
+ separate_builds=False,
+ run_two_suffix="nowiso",
+ run_one_description="water isotopes on",
+ run_two_description="water isotopes off",
+ ignore_fieldlist_diffs=True,
+ )
def _case_one_setup(self):
# BUG(wjs, 2019-07-30, ESCOMP/ctsm#495) We currently can't turn on actual water
@@ -33,12 +36,15 @@ def _case_one_setup(self):
# enable_water_tracer_consistency_checks rather than enable_water_isotopes;
# eventually, though, we should change this to the latter. (See
# .)
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "enable_water_tracer_consistency_checks=.true.")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="enable_water_tracer_consistency_checks=.true.",
+ )
def _case_two_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "enable_water_tracer_consistency_checks=.false.")
-
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="enable_water_tracer_consistency_checks=.false.",
+ )
diff --git a/cime_config/SystemTests/rxcropmaturity.py b/cime_config/SystemTests/rxcropmaturity.py
new file mode 100644
index 0000000000..5d3b07bfbf
--- /dev/null
+++ b/cime_config/SystemTests/rxcropmaturity.py
@@ -0,0 +1,443 @@
+"""
+CTSM-specific test that first performs a GDD-generating run, then calls
+Python code to generate the maturity requirement file. This is then used
+in a sowing+maturity forced run, which finally is tested to ensure
+correct behavior.
+
+Currently only supports 0.9x1.25, 1.9x2.5, and 10x15 resolutions. Eventually,
+this test should be able to generate its own files at whatever resolution it's
+called at. Well, really, the ultimate goal would be to give CLM the files
+at the original resolution (for GGCMI phase 3, 0.5°) and have the stream
+code do the interpolation. However, that wouldn't act on harvest dates
+(which are needed for generate_gdds.py). I could have Python interpolate
+those, but this would cause a potential inconsistency.
+"""
+
+import os
+import re
+import systemtest_utils as stu
+import subprocess
+from CIME.SystemTests.system_tests_common import SystemTestsCommon
+from CIME.XML.standard_module_setup import *
+from CIME.SystemTests.test_utils.user_nl_utils import append_to_user_nl_files
+import shutil, glob
+
+logger = logging.getLogger(__name__)
+
+
+class RXCROPMATURITY(SystemTestsCommon):
+ def __init__(self, case):
+ # initialize an object interface to the SMS system test
+ SystemTestsCommon.__init__(self, case)
+
+ # Ensure run length is at least 5 years. Minimum to produce one complete growing season (i.e., two complete calendar years) actually 4 years, but that only gets you 1 season usable for GDD generation, so you can't check for season-to-season consistency.
+ stop_n = self._case.get_value("STOP_N")
+ stop_option = self._case.get_value("STOP_OPTION")
+ stop_n_orig = stop_n
+ stop_option_orig = stop_option
+ if "nsecond" in stop_option:
+ stop_n /= 60
+ stop_option = "nminutes"
+ if "nminute" in stop_option:
+ stop_n /= 60
+ stop_option = "nhours"
+ if "nhour" in stop_option:
+ stop_n /= 24
+ stop_option = "ndays"
+ if "nday" in stop_option:
+ stop_n /= 365
+ stop_option = "nyears"
+ if "nmonth" in stop_option:
+ stop_n /= 12
+ stop_option = "nyears"
+ error_message = None
+ if "nyear" not in stop_option:
+ error_message = (
+ f"STOP_OPTION ({stop_option_orig}) must be nsecond(s), nminute(s), "
+ + "nhour(s), nday(s), nmonth(s), or nyear(s)"
+ )
+ elif stop_n < 5:
+ error_message = (
+ "RXCROPMATURITY must be run for at least 5 years; you requested "
+ + f"{stop_n_orig} {stop_option_orig[1:]}"
+ )
+ if error_message is not None:
+ logger.error(error_message)
+ raise RuntimeError(error_message)
+
+ # Get the number of complete years that will be run
+ self._run_Nyears = int(stop_n)
+
+ # Only allow RXCROPMATURITY to be called with test cropMonthOutput
+ casebaseid = self._case.get_value("CASEBASEID")
+ if casebaseid.split("-")[-1] != "cropMonthOutput":
+ error_message = (
+ "Only call RXCROPMATURITY with test cropMonthOutput "
+ + "to avoid potentially huge sets of daily outputs."
+ )
+ logger.error(error_message)
+ raise RuntimeError(error_message)
+
+ # Get files with prescribed sowing and harvest dates
+ self._get_rx_dates()
+
+ # Which conda environment should we use?
+ self._get_conda_env()
+
+ def run_phase(self):
+ # Modeling this after the SSP test, we create a clone to be the case whose outputs we don't
+ # want to be saved as baseline.
+
+ # -------------------------------------------------------------------
+ # (1) Set up GDD-generating run
+ # -------------------------------------------------------------------
+ # Create clone to be GDD-Generating case
+ logger.info("RXCROPMATURITY log: cloning setup")
+ case_rxboth = self._case
+ caseroot = self._case.get_value("CASEROOT")
+ clone_path = f"{caseroot}.gddgen"
+ self._path_gddgen = clone_path
+ if os.path.exists(self._path_gddgen):
+ shutil.rmtree(self._path_gddgen)
+ logger.info("RXCROPMATURITY log: cloning")
+ case_gddgen = self._case.create_clone(clone_path, keepexe=True)
+ logger.info("RXCROPMATURITY log: done cloning")
+
+ os.chdir(self._path_gddgen)
+ self._set_active_case(case_gddgen)
+
+ # Set up stuff that applies to both tests
+ self._setup_all()
+
+ # Add stuff specific to GDD-Generating run
+ logger.info("RXCROPMATURITY log: modify user_nl files: generate GDDs")
+ self._append_to_user_nl_clm(
+ [
+ "generate_crop_gdds = .true.",
+ "use_mxmat = .false.",
+ " ",
+ "! (h2) Daily outputs for GDD generation and figure-making",
+ "hist_fincl3 = 'GDDACCUM', 'GDDHARV'",
+ "hist_nhtfrq(3) = -24",
+ "hist_mfilt(3) = 365",
+ "hist_type1d_pertape(3) = 'PFTS'",
+ "hist_dov2xy(3) = .false.",
+ ]
+ )
+
+ # If flanduse_timeseries is defined, we need to make a static version for this test. This
+ # should have every crop in most of the world.
+ self._get_flanduse_timeseries_in(case_gddgen)
+ if self._flanduse_timeseries_in is not None:
+
+ # Download files from the server, if needed
+ case_gddgen.check_all_input_data()
+
+ # Make custom version of surface file
+ logger.info("RXCROPMATURITY log: run fsurdat_modifier")
+ self._run_fsurdat_modifier()
+
+ # -------------------------------------------------------------------
+ # (2) Perform GDD-generating run and generate prescribed GDDs file
+ # -------------------------------------------------------------------
+ logger.info("RXCROPMATURITY log: Start GDD-Generating run")
+
+ # As per SSP test:
+ # "No history files expected, set suffix=None to avoid compare error"
+ # We *do* expect history files here, but anyway. This works.
+ self._skip_pnl = False
+ self.run_indv(suffix=None, st_archive=True)
+
+ self._run_generate_gdds(case_gddgen)
+
+ # -------------------------------------------------------------------
+ # (3) Set up and perform Prescribed Calendars run
+ # -------------------------------------------------------------------
+ os.chdir(caseroot)
+ self._set_active_case(case_rxboth)
+
+ # Set up stuff that applies to both tests
+ self._setup_all()
+
+ # Add stuff specific to Prescribed Calendars run
+ logger.info("RXCROPMATURITY log: modify user_nl files: Prescribed Calendars")
+ self._append_to_user_nl_clm(
+ [
+ "generate_crop_gdds = .false.",
+ f"stream_fldFileName_cultivar_gdds = '{self._gdds_file}'",
+ ]
+ )
+
+ self.run_indv()
+
+ # -------------------------------------------------------------------
+ # (4) Check Prescribed Calendars run
+ # -------------------------------------------------------------------
+ logger.info("RXCROPMATURITY log: output check: Prescribed Calendars")
+ self._run_check_rxboth_run()
+
+ # Get sowing and harvest dates for this resolution.
+ def _get_rx_dates(self):
+ # Eventually, I want to remove these hard-coded resolutions so that this test can generate
+ # its own sowing and harvest date files at whatever resolution is requested.
+ lnd_grid = self._case.get_value("LND_GRID")
+ input_data_root = self._case.get_value("DIN_LOC_ROOT")
+ processed_crop_dates_dir = f"{input_data_root}/lnd/clm2/cropdata/calendars/processed"
+ if lnd_grid == "10x15":
+ self._sdatefile = os.path.join(
+ processed_crop_dates_dir,
+ "sdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-f10_f10_mg37.2000-2000.20230330_165301.nc",
+ )
+ self._hdatefile = os.path.join(
+ processed_crop_dates_dir,
+ "hdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-f10_f10_mg37.2000-2000.20230330_165301.nc",
+ )
+ elif lnd_grid == "1.9x2.5":
+ self._sdatefile = os.path.join(
+ processed_crop_dates_dir,
+ "sdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-f19_g17.2000-2000.20230102_175625.nc",
+ )
+ self._hdatefile = os.path.join(
+ processed_crop_dates_dir,
+ "hdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-f19_g17.2000-2000.20230102_175625.nc",
+ )
+ elif lnd_grid == "0.9x1.25":
+ self._sdatefile = os.path.join(
+ processed_crop_dates_dir,
+ "sdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-f09_g17.2000-2000.20230520_134417.nc",
+ )
+ self._hdatefile = os.path.join(
+ processed_crop_dates_dir,
+ "hdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-f09_g17.2000-2000.20230520_134418.nc",
+ )
+ else:
+ error_message = "ERROR: RXCROPMATURITY currently only supports 0.9x1.25, 1.9x2.5, and 10x15 resolutions"
+ logger.error(error_message)
+ raise RuntimeError(error_message)
+
+ # Ensure files exist
+ error_message = None
+ if not os.path.exists(self._sdatefile):
+ error_message = f"ERROR: Sowing date file not found: {self._sdatefile}"
+ elif not os.path.exists(self._hdatefile):
+ error_message = f"ERROR: Harvest date file not found: {self._sdatefile}"
+ if error_message is not None:
+ logger.error(error_message)
+ raise RuntimeError(error_message)
+
+ def _setup_all(self):
+ logger.info("RXCROPMATURITY log: _setup_all start")
+
+ # Get some info
+ self._ctsm_root = self._case.get_value("COMP_ROOT_DIR_LND")
+ run_startdate = self._case.get_value("RUN_STARTDATE")
+ self._run_startyear = int(run_startdate.split("-")[0])
+
+ # Set sowing dates file (and other crop calendar settings) for all runs
+ logger.info("RXCROPMATURITY log: modify user_nl files: all tests")
+ self._modify_user_nl_allruns()
+ logger.info("RXCROPMATURITY log: _setup_all done")
+
+ # Make a surface dataset that has every crop in every gridcell
+ def _run_fsurdat_modifier(self):
+
+ # fsurdat should be defined. Where is it?
+ self._fsurdat_in = None
+ with open(self._lnd_in_path, "r") as lnd_in:
+ for line in lnd_in:
+ fsurdat_in = re.match(r" *fsurdat *= *'(.*)'", line)
+ if fsurdat_in:
+ self._fsurdat_in = fsurdat_in.group(1)
+ break
+ if self._fsurdat_in is None:
+ error_message = "fsurdat not defined"
+ logger.error(error_message)
+ raise RuntimeError(error_message)
+
+ # Where we will save the fsurdat version for this test
+ path, ext = os.path.splitext(self._fsurdat_in)
+ dir_in, filename_in_noext = os.path.split(path)
+ self._fsurdat_out = os.path.join(
+ self._path_gddgen, f"{filename_in_noext}.all_crops_everywhere{ext}"
+ )
+
+ # Make fsurdat for this test, if not already done
+ if not os.path.exists(self._fsurdat_out):
+ tool_path = os.path.join(
+ self._ctsm_root,
+ "tools",
+ "modify_input_files",
+ "fsurdat_modifier",
+ )
+
+ # Create configuration file for fsurdat_modifier
+ self._cfg_path = os.path.join(
+ self._path_gddgen,
+ "modify_fsurdat_allcropseverywhere.cfg",
+ )
+ self._create_config_file_evenlysplitcrop()
+
+ command = f"python3 {tool_path} {self._cfg_path} "
+ stu.run_python_script(
+ self._get_caseroot(),
+ self._this_conda_env,
+ command,
+ tool_path,
+ )
+
+ # Modify namelist
+ logger.info("RXCROPMATURITY log: modify user_nl files: new fsurdat")
+ self._append_to_user_nl_clm(
+ [
+ "fsurdat = '{}'".format(self._fsurdat_out),
+ "do_transient_crops = .false.",
+ "flanduse_timeseries = ''",
+ "use_init_interp = .true.",
+ ]
+ )
+
+ def _create_config_file_evenlysplitcrop(self):
+ """
+ Open the new and the template .cfg files
+ Loop line by line through the template .cfg file
+ When string matches, replace that line's content
+ """
+ cfg_template_path = os.path.join(
+ self._ctsm_root, "tools/modify_input_files/modify_fsurdat_template.cfg"
+ )
+
+ with open(self._cfg_path, "w", encoding="utf-8") as cfg_out:
+ # Copy template, replacing some lines
+ with open(cfg_template_path, "r", encoding="utf-8") as cfg_in:
+ for line in cfg_in:
+ if re.match(r" *evenly_split_cropland *=", line):
+ line = f"evenly_split_cropland = True"
+ elif re.match(r" *fsurdat_in *=", line):
+ line = f"fsurdat_in = {self._fsurdat_in}"
+ elif re.match(r" *fsurdat_out *=", line):
+ line = f"fsurdat_out = {self._fsurdat_out}"
+ elif re.match(r" *process_subgrid_section *=", line):
+ line = f"process_subgrid_section = True"
+ cfg_out.write(line)
+
+ # Add new lines
+ cfg_out.write("\n")
+ cfg_out.write("[modify_fsurdat_subgrid_fractions]\n")
+ cfg_out.write("PCT_CROP = 100.0\n")
+ cfg_out.write("PCT_NATVEG = 0.0\n")
+ cfg_out.write("PCT_GLACIER = 0.0\n")
+ cfg_out.write("PCT_WETLAND = 0.0\n")
+ cfg_out.write("PCT_LAKE = 0.0\n")
+ cfg_out.write("PCT_URBAN = 0.0 0.0 0.0\n")
+
+ def _run_check_rxboth_run(self):
+
+ output_dir = os.path.join(self._get_caseroot(), "run")
+ first_usable_year = self._run_startyear + 2
+ last_usable_year = self._run_startyear + self._run_Nyears - 2
+
+ tool_path = os.path.join(
+ self._ctsm_root, "python", "ctsm", "crop_calendars", "check_rxboth_run.py"
+ )
+ command = (
+ f"python3 {tool_path} "
+ + f"--directory {output_dir} "
+ + f"-y1 {first_usable_year} "
+ + f"-yN {last_usable_year} "
+ + f"--rx-sdates-file {self._sdatefile} "
+ + f"--rx-gdds-file {self._gdds_file} "
+ )
+ stu.run_python_script(
+ self._get_caseroot(),
+ self._this_conda_env,
+ command,
+ tool_path,
+ )
+
+ def _modify_user_nl_allruns(self):
+ nl_additions = [
+ "stream_meshfile_cropcal = '{}'".format(self._case.get_value("LND_DOMAIN_MESH")),
+ "stream_fldFileName_swindow_start = '{}'".format(self._sdatefile),
+ "stream_fldFileName_swindow_end = '{}'".format(self._sdatefile),
+ "stream_year_first_cropcal = 2000",
+ "stream_year_last_cropcal = 2000",
+ "model_year_align_cropcal = 2000",
+ " ",
+ "! (h1) Annual outputs on sowing or harvest axis",
+ "hist_fincl2 = 'GRAINC_TO_FOOD_PERHARV', 'GRAINC_TO_FOOD_ANN', 'SDATES', 'SDATES_PERHARV', 'SYEARS_PERHARV', 'HDATES', 'GDDHARV_PERHARV', 'GDDACCUM_PERHARV', 'HUI_PERHARV', 'SOWING_REASON_PERHARV', 'HARVEST_REASON_PERHARV'",
+ "hist_nhtfrq(2) = 17520",
+ "hist_mfilt(2) = 999",
+ "hist_type1d_pertape(2) = 'PFTS'",
+ "hist_dov2xy(2) = .false.",
+ ]
+ self._append_to_user_nl_clm(nl_additions)
+
+ def _run_generate_gdds(self, case_gddgen):
+ self._generate_gdds_dir = os.path.join(self._path_gddgen, "generate_gdds_out")
+ os.makedirs(self._generate_gdds_dir)
+
+ # Get arguments to generate_gdds.py
+ dout_sr = case_gddgen.get_value("DOUT_S_ROOT")
+ input_dir = os.path.join(dout_sr, "lnd", "hist")
+ first_season = self._run_startyear + 2
+ last_season = self._run_startyear + self._run_Nyears - 2
+ sdates_file = self._sdatefile
+ hdates_file = self._hdatefile
+
+ # It'd be much nicer to call generate_gdds.main(), but I can't import generate_gdds.
+ tool_path = os.path.join(
+ self._ctsm_root, "python", "ctsm", "crop_calendars", "generate_gdds.py"
+ )
+ command = " ".join(
+ [
+ f"python3 {tool_path}",
+ f"--input-dir {input_dir}",
+ f"--first-season {first_season}",
+ f"--last-season {last_season}",
+ f"--sdates-file {sdates_file}",
+ f"--hdates-file {hdates_file}",
+ f"--output-dir generate_gdds_out",
+ f"--skip-crops miscanthus,irrigated_miscanthus",
+ ]
+ )
+ stu.run_python_script(
+ self._get_caseroot(),
+ self._this_conda_env,
+ command,
+ tool_path,
+ )
+
+ # Where were the prescribed maturity requirements saved?
+ generated_gdd_files = glob.glob(os.path.join(self._generate_gdds_dir, "gdds_*.nc"))
+ if len(generated_gdd_files) != 1:
+ error_message = f"ERROR: Expected one matching prescribed maturity requirements file; found {len(generated_gdd_files)}: {generated_gdd_files}"
+ logger.error(error_message)
+ raise RuntimeError(error_message)
+ self._gdds_file = generated_gdd_files[0]
+
+ def _get_conda_env(self):
+ conda_setup_commands = stu.cmds_to_setup_conda(self._get_caseroot())
+
+ # If npl conda environment is available, use that (It has dask, which
+ # enables chunking, which makes reading daily 1-degree netCDF files
+ # much more efficient.
+ if "npl " in os.popen(conda_setup_commands + "conda env list").read():
+ self._this_conda_env = "npl"
+ else:
+ self._this_conda_env = "ctsm_pylib"
+
+ def _append_to_user_nl_clm(self, additions):
+ caseroot = self._get_caseroot()
+ append_to_user_nl_files(caseroot=caseroot, component="clm", contents=additions)
+
+ # Is flanduse_timeseries defined? If so, where is it?
+ def _get_flanduse_timeseries_in(self, case):
+ case.create_namelists(component="lnd")
+ self._lnd_in_path = os.path.join(self._path_gddgen, "CaseDocs", "lnd_in")
+ self._flanduse_timeseries_in = None
+ with open(self._lnd_in_path, "r") as lnd_in:
+ for line in lnd_in:
+ flanduse_timeseries_in = re.match(r" *flanduse_timeseries *= *'(.*)'", line)
+ if flanduse_timeseries_in:
+ self._flanduse_timeseries_in = flanduse_timeseries_in.group(1)
+ break
diff --git a/cime_config/SystemTests/soilstructud.py b/cime_config/SystemTests/soilstructud.py
index b454695f6e..42ffae54be 100644
--- a/cime_config/SystemTests/soilstructud.py
+++ b/cime_config/SystemTests/soilstructud.py
@@ -16,22 +16,28 @@
logger = logging.getLogger(__name__)
-class SOILSTRUCTUD(SystemTestsCompareTwo):
+class SOILSTRUCTUD(SystemTestsCompareTwo):
def __init__(self, case):
- SystemTestsCompareTwo.__init__(self, case,
- separate_builds = False,
- run_two_suffix = '4SL_2m',
- run_one_description = 'soil_layerstruct_userdefined',
- run_two_description = 'soil_layerstruct_predefined')
+ SystemTestsCompareTwo.__init__(
+ self,
+ case,
+ separate_builds=False,
+ run_two_suffix="4SL_2m",
+ run_one_description="soil_layerstruct_userdefined",
+ run_two_description="soil_layerstruct_predefined",
+ )
def _case_one_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "soil_layerstruct_userdefined_nlevsoi = 4,soil_layerstruct_userdefined = 0.1d0,0.3d0,0.6d0,1.0d0,1.0d0")
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="soil_layerstruct_userdefined_nlevsoi = 4,soil_layerstruct_userdefined = 0.1d0,0.3d0,0.6d0,1.0d0,1.0d0",
+ )
def _case_two_setup(self):
- append_to_user_nl_files(caseroot = self._get_caseroot(),
- component = "clm",
- contents = "soil_layerstruct_predefined = '4SL_2m'")
-
+ append_to_user_nl_files(
+ caseroot=self._get_caseroot(),
+ component="clm",
+ contents="soil_layerstruct_predefined = '4SL_2m'",
+ )
diff --git a/cime_config/SystemTests/ssp.py b/cime_config/SystemTests/ssp.py
index 26337d323d..bd554aeae9 100644
--- a/cime_config/SystemTests/ssp.py
+++ b/cime_config/SystemTests/ssp.py
@@ -18,8 +18,8 @@
logger = logging.getLogger(__name__)
-class SSP(SystemTestsCommon):
+class SSP(SystemTestsCommon):
def __init__(self, case):
"""
initialize an object interface to the SSP system test
@@ -48,10 +48,10 @@ def run_phase(self):
stop_n1 = int(stop_nf / 2)
stop_n2 = stop_nf - stop_n1
- #-------------------------------------------------------------------
+ # -------------------------------------------------------------------
# (1) do a spinup run in the main case in the cloned ref case
# (short term archiving is on)
- #-------------------------------------------------------------------
+ # -------------------------------------------------------------------
os.chdir(clone_path)
self._set_active_case(clone)
@@ -61,20 +61,24 @@ def run_phase(self):
with clone:
clone.set_value("CLM_ACCELERATED_SPINUP", "on")
- clone.set_value("STOP_N",stop_n1)
+ clone.set_value("STOP_N", stop_n1)
dout_sr = clone.get_value("DOUT_S_ROOT")
# No history files expected, set suffix=None to avoid compare error
self._skip_pnl = False
self.run_indv(suffix=None, st_archive=True)
- #-------------------------------------------------------------------
+ # -------------------------------------------------------------------
# (2) do a hybrid, non-spinup run in orig_case
- #-------------------------------------------------------------------
+ # -------------------------------------------------------------------
os.chdir(caseroot)
self._set_active_case(orig_case)
- refdate = run_cmd_no_fail(r'ls -1dt {}/rest/*-00000* | head -1 | sed "s/-00000.*//" | sed "s/^.*rest\///"'.format(dout_sr))
+ refdate = run_cmd_no_fail(
+ r'ls -1dt {}/rest/*-00000* | head -1 | sed "s/-00000.*//" | sed "s/^.*rest\///"'.format(
+ dout_sr
+ )
+ )
refsec = "00000"
# obtain rpointer files and necessary restart files from short term archiving directory
diff --git a/cime_config/SystemTests/systemtest_utils.py b/cime_config/SystemTests/systemtest_utils.py
new file mode 100644
index 0000000000..c5ac986abd
--- /dev/null
+++ b/cime_config/SystemTests/systemtest_utils.py
@@ -0,0 +1,86 @@
+"""
+Reduce code duplication by putting reused functions here.
+"""
+
+import os, subprocess
+
+
+def cmds_to_setup_conda(caseroot):
+ # Add specific commands needed on different machines to get conda available
+ # Use semicolon here since it's OK to fail
+ #
+ conda_setup_commands = ". " + caseroot + "/.env_mach_specific.sh; "
+ # Setting CONDA_PREFIX to empty ensures that this works even if called from
+ # a shell with a conda environment activated
+ conda_setup_commands += "CONDA_PREFIX=; "
+ # Execute the module unload/load when "which conda" fails
+ # eg on cheyenne
+ try:
+ subprocess.run("which conda", shell=True, check=True)
+ except subprocess.CalledProcessError:
+ # Remove python and add conda to environment for cheyennne
+ unload_python_load_conda = "module unload python; module load conda;"
+ # Make sure that adding this actually loads conda
+ subprocess.run(unload_python_load_conda + "which conda", shell=True, check=True)
+ # Save
+ conda_setup_commands += " " + unload_python_load_conda
+
+ return conda_setup_commands
+
+
+def cmds_to_run_via_conda(caseroot, conda_run_call, command):
+ # Run in the specified conda environment
+ conda_setup_commands = cmds_to_setup_conda(caseroot)
+ conda_setup_commands += " " + conda_run_call
+
+ # Finish with Python script call
+ command = conda_setup_commands + " " + command
+ print(f"command: {command}")
+
+ return command
+
+
+def run_python_script(caseroot, this_conda_env, command_in, tool_path):
+
+ # First, try with "conda run -n"
+ command = cmds_to_run_via_conda(caseroot, f"conda run -n {this_conda_env}", command_in)
+
+ # Run with logfile
+ tool_name = os.path.split(tool_path)[-1]
+ try:
+ with open(tool_name + ".log", "w") as f:
+ subprocess.run(
+ command, shell=True, check=True, text=True, stdout=f, stderr=subprocess.STDOUT
+ )
+ except subprocess.CalledProcessError as error:
+ # Retry with the original "conda activate" method
+ command = cmds_to_run_via_conda(
+ caseroot,
+ f"conda activate {this_conda_env} && ",
+ command_in,
+ )
+ try:
+ with open(tool_name + ".log2", "w") as f:
+ subprocess.run(
+ command, shell=True, check=True, text=True, stdout=f, stderr=subprocess.STDOUT
+ )
+ except subprocess.CalledProcessError as error:
+ print("ERROR while getting the conda environment and/or ")
+ print(f"running the {tool_name} tool: ")
+ print(f"(1) If your {this_conda_env} environment is out of date or you ")
+ print(f"have not created the {this_conda_env} environment, yet, you may ")
+ print("get past this error by running ./py_env_create ")
+ print("in your ctsm directory and trying this test again. ")
+ print("(2) If conda is not available, install and load conda, ")
+ print("run ./py_env_create, and then try this test again. ")
+ print("(3) If (1) and (2) are not the issue, then you may be ")
+ print(f"getting an error within {tool_name} itself. ")
+ print("Default error message: ")
+ print(error.output)
+ raise
+ except:
+ print(f"ERROR trying to run {tool_name}.")
+ raise
+ except:
+ print(f"ERROR trying to run {tool_name}.")
+ raise
diff --git a/cime_config/buildlib b/cime_config/buildlib
index 31b7fe3d38..0e253c9d98 100755
--- a/cime_config/buildlib
+++ b/cime_config/buildlib
@@ -27,19 +27,26 @@ def _write_ctsm_mk(gmake, gmake_opts, makefile, exeroot, libroot):
This file can be included by atmosphere model builds outside of cime.
"""
- cime_output_file = os.path.join(exeroot, 'cime_variables.mk')
+ cime_output_file = os.path.join(exeroot, "cime_variables.mk")
# Set COMP_NAME=driver because some link flags are set differently when COMP_NAME=driver, and
# those are the ones we want here.
- cmd = ("{gmake} write_include_and_link_flags OUTPUT_FILE={cime_output_file} "
- "COMP_NAME=driver {gmake_opts} -f {makefile} ").format(
- gmake=gmake, cime_output_file=cime_output_file, gmake_opts=gmake_opts, makefile=makefile)
+ cmd = (
+ "{gmake} write_include_and_link_flags OUTPUT_FILE={cime_output_file} "
+ "COMP_NAME=driver {gmake_opts} -f {makefile} "
+ ).format(
+ gmake=gmake,
+ cime_output_file=cime_output_file,
+ gmake_opts=gmake_opts,
+ makefile=makefile,
+ )
rc, out, err = run_cmd(cmd)
- logger.info("%s: \n\n output:\n %s \n\n err:\n\n%s\n"%(cmd,out,err))
+ logger.info("%s: \n\n output:\n %s \n\n err:\n\n%s\n" % (cmd, out, err))
expect(rc == 0, "Command %s failed with rc=%s" % (cmd, rc))
- ctsm_mk_path = os.path.join(exeroot, 'ctsm.mk')
- with open(ctsm_mk_path, 'w') as ctsm_mk:
- ctsm_mk.write("""
+ ctsm_mk_path = os.path.join(exeroot, "ctsm.mk")
+ with open(ctsm_mk_path, "w") as ctsm_mk:
+ ctsm_mk.write(
+ """
# ======================================================================
# Include this file to get makefile variables needed to include / link
# LILAC/CTSM in an atmosphere model's build
@@ -54,13 +61,15 @@ def _write_ctsm_mk(gmake, gmake_opts, makefile, exeroot, libroot):
# should not be included directly in an atmosphere model's build.
# ======================================================================
-""")
+"""
+ )
with open(cime_output_file) as infile:
ctsm_mk.write(infile.read())
ctsm_bld_dir = os.path.abspath(os.path.join(libroot, os.pardir))
- with open(ctsm_mk_path, 'a') as ctsm_mk:
- ctsm_mk.write("""
+ with open(ctsm_mk_path, "a") as ctsm_mk:
+ ctsm_mk.write(
+ """
# ======================================================================
# The following settings are meant for internal use, and generally
# should not be included directly in an atmosphere model's build.
@@ -77,11 +86,15 @@ CTSM_INC = $(CTSM_BLD_DIR)/clm/obj
CTSM_INCLUDES = $(CIME_ESMF_F90COMPILEPATHS) -I$(CIME_CSM_SHR_INCLUDE) -I$(CTSM_INC)
CTSM_LIBS = -L$(CTSM_BLD_DIR)/lib -lclm $(CIME_ULIBS) $(CIME_SLIBS) $(CIME_MLIBS) $(CIME_F90_LDFLAGS)
-""".format(ctsm_bld_dir=ctsm_bld_dir))
+""".format(
+ ctsm_bld_dir=ctsm_bld_dir
+ )
+ )
+
###############################################################################
def _main_func():
-###############################################################################
+ ###############################################################################
caseroot, libroot, bldroot = parse_input(sys.argv)
@@ -96,77 +109,89 @@ def _main_func():
driver = case.get_value("COMP_INTERFACE").lower()
lilac_mode = case.get_value("LILAC_MODE")
- if lilac_mode == 'on':
+ if lilac_mode == "on":
driver = "lilac"
- #-------------------------------------------------------
+ # -------------------------------------------------------
# create Filepath file
- #-------------------------------------------------------
+ # -------------------------------------------------------
compname = case.get_value("COMP_LND")
- filepath_file = os.path.join(bldroot,"Filepath")
+ filepath_file = os.path.join(bldroot, "Filepath")
if not os.path.isfile(filepath_file):
caseroot = case.get_value("CASEROOT")
- expect( ((compname == "clm") or (compname == "ctsm")), "Unexpected COMP_LND name: %s" % (compname))
-
- paths = [os.path.join(caseroot,"SourceMods","src."+compname),
- os.path.join(lnd_root,"src","cpl",driver),
- os.path.join(lnd_root,"src","main"),
- os.path.join(lnd_root,"src","biogeophys"),
- os.path.join(lnd_root,"src","biogeochem"),
- os.path.join(lnd_root,"src","soilbiogeochem"),
- os.path.join(lnd_root,"src","dyn_subgrid"),
- os.path.join(lnd_root,"src","init_interp"),
- os.path.join(lnd_root,"src","self_tests"),
- os.path.join(lnd_root,"src","fates"),
- os.path.join(lnd_root,"src","fates","main"),
- os.path.join(lnd_root,"src","fates","biogeophys"),
- os.path.join(lnd_root,"src","fates","biogeochem"),
- os.path.join(lnd_root,"src","fates","fire"),
- os.path.join(lnd_root,"src","fates","parteh"),
- os.path.join(lnd_root,"src","utils"),
- os.path.join(lnd_root,"src","cpl"),
- os.path.join(lnd_root,"src","cpl","utils")]
-
- if lilac_mode == 'on':
- paths.append(os.path.join(lnd_root,"lilac","src"))
+ expect(
+ ((compname == "clm") or (compname == "ctsm")),
+ "Unexpected COMP_LND name: %s" % (compname),
+ )
+
+ paths = [
+ os.path.join(caseroot, "SourceMods", "src." + compname),
+ os.path.join(lnd_root, "src", "cpl", driver),
+ os.path.join(lnd_root, "src", "main"),
+ os.path.join(lnd_root, "src", "biogeophys"),
+ os.path.join(lnd_root, "src", "biogeochem"),
+ os.path.join(lnd_root, "src", "soilbiogeochem"),
+ os.path.join(lnd_root, "src", "dyn_subgrid"),
+ os.path.join(lnd_root, "src", "init_interp"),
+ os.path.join(lnd_root, "src", "self_tests"),
+ os.path.join(lnd_root, "src", "fates"),
+ os.path.join(lnd_root, "src", "fates", "main"),
+ os.path.join(lnd_root, "src", "fates", "biogeophys"),
+ os.path.join(lnd_root, "src", "fates", "biogeochem"),
+ os.path.join(lnd_root, "src", "fates", "fire"),
+ os.path.join(lnd_root, "src", "fates", "parteh"),
+ os.path.join(lnd_root, "src", "fates", "radiation"),
+ os.path.join(lnd_root, "src", "utils"),
+ os.path.join(lnd_root, "src", "cpl"),
+ os.path.join(lnd_root, "src", "cpl", "utils"),
+ ]
+
+ if lilac_mode == "on":
+ paths.append(os.path.join(lnd_root, "lilac", "src"))
# If we want to build with a real river model (e.g., MOSART), we'll need
# to use its directories in place of stub_rof
- paths.append(os.path.join(lnd_root,"lilac","stub_rof"))
+ paths.append(os.path.join(lnd_root, "lilac", "stub_rof"))
- if (driver == 'lilac' or driver == 'nuopc'):
- paths.append(os.path.join(lnd_root,"src","cpl","share_esmf"))
+ if driver == "lilac" or driver == "nuopc":
+ paths.append(os.path.join(lnd_root, "src", "cpl", "share_esmf"))
with open(filepath_file, "w") as filepath:
filepath.write("\n".join(paths))
filepath.write("\n")
- #-------------------------------------------------------
+ # -------------------------------------------------------
# create the library in libroot
- #-------------------------------------------------------
+ # -------------------------------------------------------
- complib = os.path.join(libroot,"lib%s.a"%(compname))
+ complib = os.path.join(libroot, "lib%s.a" % (compname))
- cmd = "{} complib -j {} COMP_NAME={} COMPLIB={} -f {} {}" \
- .format(gmake, gmake_j, compname, complib, makefile, gmake_opts)
+ cmd = "{} complib -j {} COMP_NAME={} COMPLIB={} -f {} {}".format(
+ gmake, gmake_j, compname, complib, makefile, gmake_opts
+ )
rc, out, err = run_cmd(cmd)
- logger.info("%s: \n\n output:\n %s \n\n err:\n\n%s\n"%(cmd,out,err))
+ logger.info("%s: \n\n output:\n %s \n\n err:\n\n%s\n" % (cmd, out, err))
expect(rc == 0, "Command %s failed with rc=%s" % (cmd, rc))
# ------------------------------------------------------------------------
# for lilac usage, we need a file containing some Makefile variables (for the atmosphere model's build)
# ------------------------------------------------------------------------
- if lilac_mode == 'on':
- _write_ctsm_mk(gmake=gmake,
- gmake_opts=gmake_opts,
- makefile=makefile,
- exeroot=case.get_value("EXEROOT"),
- libroot=libroot)
+ if lilac_mode == "on":
+ _write_ctsm_mk(
+ gmake=gmake,
+ gmake_opts=gmake_opts,
+ makefile=makefile,
+ exeroot=case.get_value("EXEROOT"),
+ libroot=libroot,
+ )
+
###############################################################################
if __name__ == "__main__":
- logger.warning( "WARNING: buildlib is being called as a program rather than a subroutine as " +
- "it is expected to be in the CESM context" )
+ logger.warning(
+ "WARNING: buildlib is being called as a program rather than a subroutine as "
+ + "it is expected to be in the CESM context"
+ )
_main_func()
diff --git a/cime_config/buildnml b/cime_config/buildnml
index 4e04951474..d2e7ddc886 100755
--- a/cime_config/buildnml
+++ b/cime_config/buildnml
@@ -3,7 +3,7 @@
"""
CTSM namelist creator
"""
-import sys, os, shutil
+import sys, os, shutil, re
_CIMEROOT = os.environ.get("CIMEROOT")
if _CIMEROOT is None:
@@ -12,10 +12,10 @@ if _CIMEROOT is None:
_LIBDIR = os.path.join(_CIMEROOT, "CIME", "Tools")
sys.path.append(_LIBDIR)
-from standard_script_setup import *
-from CIME.buildnml import create_namelist_infile, parse_input
-from CIME.case import Case
-from CIME.utils import expect, run_cmd
+from standard_script_setup import *
+from CIME.buildnml import create_namelist_infile, parse_input
+from CIME.case import Case
+from CIME.utils import expect, run_cmd
logger = logging.getLogger(__name__)
@@ -29,8 +29,8 @@ _config_cache_template = """
###############################################################################
def buildnml(case, caseroot, compname):
-###############################################################################
- """Build the CTSM namelist """
+ ###############################################################################
+ """Build the CTSM namelist"""
# Build the component namelist
if compname != "ctsm" and compname != "clm":
@@ -41,6 +41,7 @@ def buildnml(case, caseroot, compname):
configuration = case.get_value("CLM_CONFIGURATION")
structure = case.get_value("CLM_STRUCTURE")
ccsm_co2_ppmv = case.get_value("CCSM_CO2_PPMV")
+ casename = case.get_value("CASE")
clm_co2_type = case.get_value("CLM_CO2_TYPE")
clm_namelist_opts = case.get_value("CLM_NAMELIST_OPTS")
clm_bldnml_opts = case.get_value("CLM_BLDNML_OPTS")
@@ -59,26 +60,30 @@ def buildnml(case, caseroot, compname):
run_reftod = case.get_value("RUN_REFTOD")
glc_nec = case.get_value("GLC_NEC")
cism_use_antarctica = case.get_value("CISM_USE_ANTARCTICA")
+ dglc_use_antarctica = case.get_value("DGLC_USE_ANTARCTICA")
mask = case.get_value("MASK_GRID")
driver = case.get_value("COMP_INTERFACE").lower()
# Create init_generated_files directory if not there
- newdir = os.path.join(rundir,"init_generated_files")
+ newdir = os.path.join(rundir, "init_generated_files")
if not os.path.exists(newdir):
os.mkdir(newdir)
# -----------------------------------------------------
# Error checking
# -----------------------------------------------------
- if ( clm_bldnml_opts.find("-namelist") >= 0 ):
- expect(False, "The -namelist option is NOT allowed to be part of CLM_BLDNML_OPTS, " + \
- "use the CLM_NAMELIST_OPTS option or add namelist items to user_nl_clm instead " );
+ if clm_bldnml_opts.find("-namelist") >= 0:
+ expect(
+ False,
+ "The -namelist option is NOT allowed to be part of CLM_BLDNML_OPTS, "
+ + "use the CLM_NAMELIST_OPTS option or add namelist items to user_nl_clm instead ",
+ )
# -----------------------------------------------------
# Set ctsmconf
# -----------------------------------------------------
- ctsmconf = os.path.join(caseroot, "Buildconf", compname+"conf")
+ ctsmconf = os.path.join(caseroot, "Buildconf", compname + "conf")
if not os.path.isdir(ctsmconf):
os.makedirs(ctsmconf)
@@ -92,8 +97,8 @@ def buildnml(case, caseroot, compname):
clm_phys = case.get_value("CLM_PHYSICS_VERSION")
config_cache_text = _config_cache_template.format(clm_phys=clm_phys)
- config_cache_path = os.path.join(caseroot, "Buildconf", compname+"conf", "config_cache.xml")
- with open(config_cache_path, 'w') as config_cache_file:
+ config_cache_path = os.path.join(caseroot, "Buildconf", compname + "conf", "config_cache.xml")
+ with open(config_cache_path, "w") as config_cache_file:
config_cache_file.write(config_cache_text)
# -----------------------------------------------------
@@ -111,80 +116,103 @@ def buildnml(case, caseroot, compname):
startfile_type = "nrevsn"
if clm_force_coldstart == "on":
clm_force_coldstart = "off"
- logger.warning( "WARNING: You've turned on CLM_FORCE_COLDSTART for a branch run_type, which is a contradiction, the coldstart will be ignored\n" +
- " turn off CLM_FORCE_COLDSTART, or set RUN_TYPE=hybrid to get rid of this warning")
-
+ logger.warning(
+ "WARNING: You've turned on CLM_FORCE_COLDSTART for a branch run_type, which is a contradiction, the coldstart will be ignored\n"
+ + " turn off CLM_FORCE_COLDSTART, or set RUN_TYPE=hybrid to get rid of this warning"
+ )
- if (clm_force_coldstart == "on"):
- logger.warning( "WARNING: CLM is starting up from a cold state" )
+ if clm_force_coldstart == "on":
+ logger.warning("WARNING: CLM is starting up from a cold state")
start_type = "cold"
- if lnd_grid == 'T31':
- lnd_grid = '48x96'
- if lnd_grid == 'T42':
- lnd_grid = '64x128'
- if lnd_grid == 'T85':
- lnd_grid = '128x256'
- if lnd_grid == 'T341':
- lnd_grid = '512x1024'
+ if lnd_grid == "T31":
+ lnd_grid = "48x96"
+ if lnd_grid == "T42":
+ lnd_grid = "64x128"
+ if lnd_grid == "T85":
+ lnd_grid = "128x256"
+ if lnd_grid == "T341":
+ lnd_grid = "512x1024"
clmusr = ""
if lnd_grid == "CLM_USRDAT":
clm_usrdat_name = case.get_value("CLM_USRDAT_NAME")
- lnd_grid = clm_usrdat_name
- clmusr = " -clm_usr_name %s "%clm_usrdat_name
+ clmusr = " -clm_usr_name %s " % clm_usrdat_name
+ # Write warning about initial condition data
+ if "NEON" in clm_usrdat_name and clm_force_coldstart == "off":
+ if ("_transient" in clm_nml_use_case) and (
+ re.fullmatch(r"\w\w\w\w\.transient", casename) is None
+ or clm_usrdat_name is "NEON.PRISM"
+ ):
+ logger.warning(
+ "WARNING: Do you have appropriate initial conditions for this simulation?"
+ + " Check that the finidat file used in the lnd_in namelist is appropriately spunup for your case"
+ )
if comp_atm != "datm":
nomeg = "-no-megan"
else:
nomeg = ""
- if cism_use_antarctica is None:
- # This is the case for compsets without CISM, where the CISM_USE_ANTARCTICA xml
- # variable isn't defined
+
+ glc_use_antarctica = cism_use_antarctica
+ if glc_use_antarctica is None:
+ glc_use_antarctica = dglc_use_antarctica
+ if glc_use_antarctica is None:
+ # This is the case for compsets without CISM or DGLC, where the
+ # CISM_USE_ANTARCTICA and DGLC_USE_ANTARCTICA xml variables are not defined
glc_use_antarctica_flag = ""
- elif isinstance(cism_use_antarctica, bool):
- if cism_use_antarctica:
+ elif isinstance(glc_use_antarctica, bool):
+ if glc_use_antarctica:
glc_use_antarctica_flag = "-glc_use_antarctica"
else:
glc_use_antarctica_flag = ""
else:
- expect(False, "Unexpected value for CISM_USE_ANTARCTICA: {}".format(cism_use_antarctica))
+ if cism_use_antarctia:
+ expect(
+ False,
+ "Unexpected value for CISM_USE_ANTARCTICA: {}".format(cism_use_antarctica),
+ )
+ else:
+ expect(
+ False,
+ "Unexpected value for DGLC_USE_ANTARCTICA: {}".format(dglc_use_antarctica),
+ )
if clm_nml_use_case != "UNSET":
- usecase = "-use_case %s" %clm_nml_use_case
+ usecase = "-use_case %s" % clm_nml_use_case
else:
usecase = ""
- if ( (mask != "null") and (mask != "UNSET") ):
- gridmask = "-mask %s" %mask
+ if (mask != "null") and (mask != "UNSET"):
+ gridmask = "-mask %s" % mask
else:
gridmask = ""
- start_ymd = run_startdate.replace('-','')
+ start_ymd = run_startdate.replace("-", "")
- if ('-01-01' in run_startdate) or ('-09-01' in run_startdate):
+ if ("-01-01" in run_startdate) or ("-09-01" in run_startdate):
ignore = "-ignore_ic_year"
else:
ignore = "-ignore_ic_date"
- tuning = "-lnd_tuning_mode %s "%lnd_tuning_mode
+ tuning = "-lnd_tuning_mode %s " % lnd_tuning_mode
- spinup = "-clm_accelerated_spinup %s "%clm_accelerated_spinup
+ spinup = "-clm_accelerated_spinup %s " % clm_accelerated_spinup
infile = os.path.join(ctsmconf, "namelist")
- inputdata_file = os.path.join(caseroot,"Buildconf","ctsm.input_data_list")
+ inputdata_file = os.path.join(caseroot, "Buildconf", "ctsm.input_data_list")
if driver == "nuopc":
lndfrac_setting = " "
else:
lnd_domain_path = case.get_value("LND_DOMAIN_PATH")
lnd_domain_file = case.get_value("LND_DOMAIN_FILE")
- lndfrac_file = os.path.join(lnd_domain_path,lnd_domain_file)
- lndfrac_setting = "-lnd_frac "+lndfrac_file
+ lndfrac_file = os.path.join(lnd_domain_path, lnd_domain_file)
+ lndfrac_setting = "-lnd_frac " + lndfrac_file
- config_cache_file = os.path.join(caseroot,"Buildconf", compname+"conf","config_cache.xml")
+ config_cache_file = os.path.join(caseroot, "Buildconf", compname + "conf", "config_cache.xml")
# -----------------------------------------------------
# Clear out old data
@@ -198,40 +226,57 @@ def buildnml(case, caseroot, compname):
# -----------------------------------------------------
ninst = int(ninst_lnd)
- for inst_counter in range(1, ninst+1):
+ for inst_counter in range(1, ninst + 1):
# determine instance string
inst_string = ""
if ninst > 1:
- inst_string = '_' + '%04d' % inst_counter
+ inst_string = "_" + "%04d" % inst_counter
# If multi-instance case does not have restart file, use
# single-case restart for each instance
rpointer = "rpointer.lnd"
- if (os.path.isfile(os.path.join(rundir,rpointer)) and
- (not os.path.isfile(os.path.join(rundir,rpointer + inst_string)))):
- shutil.copy(os.path.join(rundir, rpointer),
- os.path.join(rundir, rpointer + inst_string))
+ if os.path.isfile(os.path.join(rundir, rpointer)) and (
+ not os.path.isfile(os.path.join(rundir, rpointer + inst_string))
+ ):
+ shutil.copy(
+ os.path.join(rundir, rpointer),
+ os.path.join(rundir, rpointer + inst_string),
+ )
# -----------------------------------------------------
# call build-namelist
# -----------------------------------------------------
if run_type == "hybrid" or run_type == "branch":
- compnames = [ "clm4", "clm5", "clm2" ]
+ compnames = ["clm4", "clm5", "clm2"]
for comp in compnames:
- clm_startfile = "%s.%s%s.r.%s-%s.nc"%(run_refcase,comp,inst_string,run_refdate,run_reftod)
- if os.path.exists(os.path.join(rundir, clm_startfile)):
- break
- else:
- clm_startfile = "%s.%s.r.%s-%s.nc"%(run_refcase,comp,run_refdate,run_reftod)
- if os.path.exists(os.path.join(rundir, clm_startfile)):
- logger.warning( "WARNING: the start file being used for a multi-instance case is a single instance: "+clm_startfile )
+ clm_startfile = "%s.%s%s.r.%s-%s.nc" % (
+ run_refcase,
+ comp,
+ inst_string,
+ run_refdate,
+ run_reftod,
+ )
+ if os.path.exists(os.path.join(rundir, clm_startfile)):
break
+ else:
+ clm_startfile = "%s.%s.r.%s-%s.nc" % (
+ run_refcase,
+ comp,
+ run_refdate,
+ run_reftod,
+ )
+ if os.path.exists(os.path.join(rundir, clm_startfile)):
+ logger.warning(
+ "WARNING: the start file being used for a multi-instance case is a single instance: "
+ + clm_startfile
+ )
+ break
if not os.path.exists(os.path.join(rundir, clm_startfile)):
- logger.warning( "WARNING: Could NOT find a start file to use using"+clm_startfile )
- clm_icfile = "%s = \'%s\'"%(startfile_type, clm_startfile)
+ logger.warning("WARNING: Could NOT find a start file to use using" + clm_startfile)
+ clm_icfile = "%s = '%s'" % (startfile_type, clm_startfile)
else:
clm_icfile = ""
@@ -243,25 +288,51 @@ def buildnml(case, caseroot, compname):
create_namelist_infile(case, user_nl_file, namelist_infile, "\n".join(infile_lines))
- cmd = os.path.join(lnd_root,"bld","build-namelist")
-
- command = ("%s -cimeroot %s -infile %s -csmdata %s -inputdata %s %s -namelist \"&clm_inparm start_ymd=%s %s/ \" "
- "%s %s -res %s %s -clm_start_type %s -envxml_dir %s "
- "-configuration %s -structure %s "
- "%s -glc_nec %s %s -co2_ppmv %s -co2_type %s -config %s -driver %s "
- "%s %s %s %s"
- %(cmd, _CIMEROOT, infile, din_loc_root, inputdata_file, ignore, start_ymd, clm_namelist_opts,
- nomeg, usecase, lnd_grid, clmusr, start_type, caseroot,
- configuration, structure,
- lndfrac_setting, glc_nec, glc_use_antarctica_flag, ccsm_co2_ppmv, clm_co2_type, config_cache_file, driver,
- clm_bldnml_opts, spinup, tuning, gridmask))
+ cmd = os.path.join(lnd_root, "bld", "build-namelist")
+
+ command = (
+ '%s -cimeroot %s -infile %s -csmdata %s -inputdata %s %s -namelist "&clm_inparm start_ymd=%s %s/ " '
+ "%s %s -res %s %s -clm_start_type %s -envxml_dir %s "
+ "-configuration %s -structure %s "
+ "%s -glc_nec %s %s -co2_ppmv %s -co2_type %s -config %s -driver %s "
+ "%s %s %s %s"
+ % (
+ cmd,
+ _CIMEROOT,
+ infile,
+ din_loc_root,
+ inputdata_file,
+ ignore,
+ start_ymd,
+ clm_namelist_opts,
+ nomeg,
+ usecase,
+ lnd_grid,
+ clmusr,
+ start_type,
+ caseroot,
+ configuration,
+ structure,
+ lndfrac_setting,
+ glc_nec,
+ glc_use_antarctica_flag,
+ ccsm_co2_ppmv,
+ clm_co2_type,
+ config_cache_file,
+ driver,
+ clm_bldnml_opts,
+ spinup,
+ tuning,
+ gridmask,
+ )
+ )
rc, out, err = run_cmd(command, from_dir=ctsmconf)
- expect(rc==0,"Command %s failed rc=%d\nout=%s\nerr=%s"%(cmd,rc,out,err))
+ expect(rc == 0, "Command %s failed rc=%d\nout=%s\nerr=%s" % (cmd, rc, out, err))
if out is not None:
- logger.debug(" %s"%out)
+ logger.debug(" %s" % out)
if err is not None:
- logger.debug(" %s"%err)
+ logger.debug(" %s" % err)
# -----------------------------------------------------
# copy resolved namelist to rundir
@@ -272,8 +343,9 @@ def buildnml(case, caseroot, compname):
file2 = os.path.join(rundir, "lnd_in")
if ninst > 1:
file2 += inst_string
- logger.debug("CTSM namelist copy: file1 %s file2 %s " %(file1, file2))
- shutil.copy(file1,file2)
+ logger.debug("CTSM namelist copy: file1 %s file2 %s " % (file1, file2))
+ shutil.copy(file1, file2)
+
###############################################################################
def _main_func():
@@ -281,9 +353,12 @@ def _main_func():
caseroot = parse_input(sys.argv)
with Case(caseroot) as case:
compname = case.get_value("COMP_LND")
- logger.warning( "WARNING: buildnml is being called a s program rather than a subroutine " +
- "as it is expected to be in the CESM context" )
+ logger.warning(
+ "WARNING: buildnml is being called a s program rather than a subroutine "
+ + "as it is expected to be in the CESM context"
+ )
buildnml(case, caseroot, compname)
+
if __name__ == "__main__":
_main_func()
diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml
index 7520050cf5..a949a15a17 100644
--- a/cime_config/config_component.xml
+++ b/cime_config/config_component.xml
@@ -16,7 +16,7 @@
clm4.5:clm5.0:
- clm5.1:
+ clm5.1:Satellite phenology:Satellite phenology with VIC hydrology:
@@ -26,6 +26,7 @@
BGC (vert. resol. CN and methane) without anthropomorphic influences:FATES (Functionally Assembled Terrestrial Ecosystem Simulator) Ecosystem Demography model: Satellite phenology with FATES (Functionally Assembled Terrestrial Ecosystem Simulator) Ecosystem Demography model:
+ No Competition mode with FATES (Functionally Assembled Terrestrial Ecosystem Simulator) Ecosystem Demography model: BGC (vert. resol. CN and methane) with dynamic vegetation:BGC (vert. resol. CN and methane) with dynamic vegetation and prognostic crop:BGC (vert. resol. CN and methane) with prognostic crop, with modifications appropriate for CMIP6 DECK experiments:
@@ -63,17 +64,20 @@
Tuning parameters and initial conditions should be optimized for what CLM model version and what meteorlogical forcing combination?
UNSET
- clm5_0_cam6.0,clm5_0_GSWP3v1,clm5_0_CRUv7,clm4_5_CRUv7,clm4_5_GSWP3v1,clm4_5_cam6.0,clm5_1_GSWP3v1
+ clm5_0_cam6.0,clm5_0_GSWP3v1,clm5_0_CRUv7,clm4_5_CRUv7,clm4_5_GSWP3v1,clm4_5_cam6.0,clm5_1_GSWP3v1,clm5_1_cam6.0clm4_5_CRUv7clm4_5_CRUv7clm4_5_GSWP3v1clm4_5_cam6.0
+ clm4_5_cam6.0clm5_0_CRUv7clm5_0_CRUv7clm5_0_GSWP3v1clm5_0_cam6.0
+ clm5_0_cam6.0clm5_1_GSWP3v1
+ clm5_1_cam6.0
@@ -171,6 +175,7 @@
-bgc bgc -crop-bgc fates -no-megan-bgc fates -no-megan
+ -bgc fates-bgc bgc -dynamic_vegetation
@@ -239,10 +244,13 @@
UNSETrun_component_ctsmenv_run.xml
- Dataset name for user-created datasets. This is used as the argument
- in Buildconf/clm.buildnml to build-namelist -clm_usr_name. An example of
- such a dataset would be 1x1pt_boulderCO_c090722. The default value is UNSET.
- This is an advanced flag and should only be used by expert users.
+ Resolution name for user-created resolutions. This is especially used
+ for single point and regional resolutions created via subset_data from
+ the global datasets. This should be set when you use CLM_USRDAT as the grid
+ to create_newcase. The default value is UNSET.
+ For NEON cases, this can be set to either NEON or NEON.PRISM, the latter of which would
+ use PRISM precipitation instead of the default NEON precipitation. NEON cases then also
+ use the variable NEONSITE to specify the exact site.
@@ -277,6 +285,7 @@
$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_deck$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/fates_sp
+ $COMP_ROOT_DIR_LND/cime_config/usermods_dirs/fates_nocomp$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_nociso_deck$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_waccm_deck$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_waccm_nociso_deck
@@ -288,10 +297,31 @@
char
+
ABBY,BLAN,CPER,DEJU,GRSM,HEAL,KONA,LENO,NIWO,ONAQ,PUUM,SERC,SRER,TALL,TREE,WOOD,
BARR,BONA,DCFS,DELA,GUAN,JERC,KONZ,MLBS,NOGP,ORNL,RMNP,SJER,STEI,TEAK,UKFS,WREF,
- BART,CLBJ,DSNY,HARV,JORN,LAJA,MOAB,OAES,OSBS,SCBI,SOAP,STER,TOOL,UNDE,YELL
+ BART,CLBJ,DSNY,HARV,JORN,LAJA,MOAB,OAES,OSBS,SCBI,SOAP,STER,TOOL,UNDE,YELL,
+ NEON_PRECIP.ABBY,NEON_PRECIP.BLAN,NEON_PRECIP.CPER,NEON_PRECIP.DEJU,NEON_PRECIP.GRSM,
+ NEON_PRECIP.HEAL,NEON_PRECIP.KONA,NEON_PRECIP.LENO,NEON_PRECIP.NIWO,NEON_PRECIP.ONAQ,
+ NEON_PRECIP.PUUM,NEON_PRECIP.SERC,NEON_PRECIP.SRER,NEON_PRECIP.TALL,NEON_PRECIP.TREE,
+ NEON_PRECIP.WOOD,NEON_PRECIP.BARR,NEON_PRECIP.BONA,NEON_PRECIP.DCFS,NEON_PRECIP.DELA,
+ NEON_PRECIP.GUAN,NEON_PRECIP.JERC,NEON_PRECIP.KONZ,NEON_PRECIP.MLBS,NEON_PRECIP.NOGP,
+ NEON_PRECIP.ORNL,NEON_PRECIP.RMNP,NEON_PRECIP.SJER,NEON_PRECIP.STEI,NEON_PRECIP.TEAK,
+ NEON_PRECIP.UKFS,NEON_PRECIP.WREF,NEON_PRECIP.BART,NEON_PRECIP.CLBJ,NEON_PRECIP.DSNY,
+ NEON_PRECIP.HARV,NEON_PRECIP.JORN,NEON_PRECIP.LAJA,NEON_PRECIP.MOAB,NEON_PRECIP.OAES,
+ NEON_PRECIP.OSBS,NEON_PRECIP.SCBI,NEON_PRECIP.SOAP,NEON_PRECIP.STER,NEON_PRECIP.TOOL,
+ NEON_PRECIP.UNDE,NEON_PRECIP.YELL,
+ PRISM_PRECIP.ABBY,PRISM_PRECIP.BLAN,PRISM_PRECIP.CPER,PRISM_PRECIP.GRSM,
+ PRISM_PRECIP.KONA,PRISM_PRECIP.LENO,PRISM_PRECIP.NIWO,PRISM_PRECIP.ONAQ,
+ PRISM_PRECIP.SERC,PRISM_PRECIP.SRER,PRISM_PRECIP.TALL,PRISM_PRECIP.TREE,
+ PRISM_PRECIP.WOOD,PRISM_PRECIP.DCFS,PRISM_PRECIP.DELA,PRISM_PRECIP.JERC,
+ PRISM_PRECIP.KONZ,PRISM_PRECIP.MLBS,PRISM_PRECIP.NOGP,PRISM_PRECIP.ORNL,
+ PRISM_PRECIP.RMNP,PRISM_PRECIP.SJER,PRISM_PRECIP.STEI,PRISM_PRECIP.TEAK,
+ PRISM_PRECIP.UKFS,PRISM_PRECIP.WREF,PRISM_PRECIP.BART,PRISM_PRECIP.CLBJ,
+ PRISM_PRECIP.DSNY,PRISM_PRECIP.HARV,PRISM_PRECIP.JORN,PRISM_PRECIP.MOAB,
+ PRISM_PRECIP.OAES,PRISM_PRECIP.OSBS,PRISM_PRECIP.SCBI,PRISM_PRECIP.SOAP,
+ PRISM_PRECIP.STER,PRISM_PRECIP.UNDE,PRISM_PRECIP.YELL,
run_component_ctsm
@@ -301,7 +331,7 @@
char
- v1,v2,latest
+ v1,v2,v3,latestlatestrun_component_ctsmenv_run.xml
diff --git a/cime_config/config_compsets.xml b/cime_config/config_compsets.xml
index 649306b05a..aaa5c68394 100644
--- a/cime_config/config_compsets.xml
+++ b/cime_config/config_compsets.xml
@@ -41,11 +41,21 @@
2000_DATM%1PT_CLM51%BGC_SICE_SOCN_SROF_SGLC_SWAV
+
+ I1PtClm51Fates
+ 2000_DATM%1PT_CLM51%FATES_SICE_SOCN_SROF_SGLC_SWAV
+
+
IHist1PtClm51BgcHIST_DATM%1PT_CLM51%BGC_SICE_SOCN_SROF_SGLC_SWAV
+
+ IHist1PtClm51Fates
+ HIST_DATM%1PT_CLM51%FATES_SICE_SOCN_SROF_SGLC_SWAV
+
+
I1PtClm51SpRs2000_DATM%1PT_CLM51%SP_SICE_SOCN_SROF_SGLC_SWAV
@@ -151,7 +161,7 @@
I1850Clm51BgcCrop
- 1850_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_SGLC_SWAV
+ 1850_DATM%GSWP3v1_CLM51%BGC-CROP_SICE_SOCN_MOSART_SGLC_SWAV
@@ -195,6 +205,10 @@
I2000Clm45BgcCropQianRs2000_DATM%QIA_CLM45%BGC-CROP_SICE_SOCN_SROF_SGLC_SWAV
+
+ I2000Clm50FatesQian
+ 2000_DATM%QIA_CLM50%FATES_SICE_SOCN_MOSART_SGLC_SWAV
+ I2000Clm50BgcCruRs
@@ -264,12 +278,6 @@
-
- I1850Clm51Bgc
- 1850_DATM%GSWP3v1_CLM50%BGC_SICE_SOCN_MOSART_SGLC_SWAV
-
-
-
I1850Clm51SpNoAnthro1850_DATM%GSWP3v1_CLM51%SP-NOANTHRO_SICE_SOCN_MOSART_SGLC_SWAV
diff --git a/cime_config/config_pes.xml b/cime_config/config_pes.xml
index aad134be86..a77ea8ff1f 100644
--- a/cime_config/config_pes.xml
+++ b/cime_config/config_pes.xml
@@ -113,6 +113,43 @@
+
+
+
+ none
+
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
@@ -261,6 +298,80 @@
+
+
+
+ none
+
+ -1
+ -12
+ -12
+ -12
+ -12
+ -12
+ -12
+ -12
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
+
+
+
+ Much lower core count f19 layout, mainly for testing
+
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
@@ -303,34 +414,34 @@
none
- -4
- -4
- -4
- -4
- -4
- -4
- -4
- -4
+ -4
+ -4
+ -4
+ -4
+ -4
+ -4
+ -4
+ -4
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
@@ -372,6 +483,80 @@
+
+
+
+ none
+
+ -1
+ -14
+ -14
+ -14
+ -14
+ -14
+ -14
+ -14
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
+
+
+
+ Much lower core count f09 layout, mainly for testing
+
+ -1
+ -5
+ -5
+ -5
+ -5
+ -5
+ -5
+ -5
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
@@ -557,6 +742,80 @@
+
+
+
+ none
+
+ -1
+ -5
+ -5
+ -5
+ -5
+ -5
+ -5
+ -5
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
+
+
+
+ none
+
+ -1
+ -20
+ -20
+ -20
+ -20
+ -20
+ -20
+ -20
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
@@ -1225,6 +1484,44 @@
+
+
+
+ none
+
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
@@ -1374,5 +1671,228 @@
+
+
+
+ none
+
+ -1
+ -14
+ -14
+ -14
+ -14
+ -14
+ -14
+ -14
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
+
+
+
+ Much lower core count nldas2 layout, mainly for testing
+
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ Need at least 4 nodes to default to normal queue
+
+ -1
+ -3
+ -3
+ -3
+ -3
+ -3
+ -3
+ -3
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
+
+
+
+ none
+
+ -1
+ -7
+ -7
+ -7
+ -7
+ -7
+ -7
+ -7
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+
+
+
+
+
+ Need at least 2 nodes to devel queue
+
+ -2
+ -2
+ -2
+ -2
+ -2
+ -2
+ -2
+ -2
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ none
+
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+ -1
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
diff --git a/cime_config/config_tests.xml b/cime_config/config_tests.xml
index 0307ee7ef5..536f79aeec 100644
--- a/cime_config/config_tests.xml
+++ b/cime_config/config_tests.xml
@@ -113,6 +113,16 @@ This defines various CTSM-specific system tests
$STOP_N
+
+ Generate prescribed maturity requirements, then test with them
+ 1
+ FALSE
+ FALSE
+ never
+ $STOP_OPTION
+ $STOP_N
+
+
+
+
+
+ FAIL
+ #2268
+
+
+
+
+
+ FAIL
+ #1887
+
+
@@ -37,19 +51,201 @@
-
+
+
+ FAIL
+ #1733
+
+
+
+ FAIL
- #1844
+ ESMCI/ccs_config_cesm#131
+
+
+ FAIL
+ ESMCI/ccs_config_cesm#130
+
+
+
+
+
+ FAIL
+ ESMCI/ccs_config_cesm#130
+
+
+
+
+
+ FAIL
+ ESMCI/ccs_config_cesm#130
+
+
+
+
+
+ FAIL
+ ESMCI/ccs_config_cesm#130
+
+
+
+
+
+ FAIL
+ #2310
+
+
+ FAIL
+ #2310
+
+
+
+
+
+ FAIL
+ #2310
+
+
+ FAIL
+ #2310
+
+
+
+
+
+ FAIL
+ #2310
+
+
+ FAIL
+ #2310
+
+
+
+
+
+ FAIL
+ #2310
+
+
+ FAIL
+ #2310
+
+
+
+
+
+ FAIL
+ #2310
+
+
+ FAIL
+ #2310
+
+
+
-
+
+
+ FAIL
+ #2321
+
+
+
+
+
+ FAIL
+ FATES#701
+
+
+
+
+
+ FAIL
+ FATES#701
+
+
+
+
+
+ FAIL
+ FATES#701
+
+
+
+
+
+ PEND
+ #1045
+
+
+
+
+
+ PEND
+ #1045
+
+
+
+
+
+ FAIL
+ ESMCI/ccs_config_cesm#130
+
+
+
+
+
+ FAIL
+ ESMCI/ccs_config_cesm#130
+
+
+
+
+
+ PEND
+ FATES#983
+ This job should time out on izumi, seems to be hanging on history output.
+
+
+
+
+
+ FAIL
+ FATES#1089
+
+
+
+
+
+ FAIL
+ FATES#1089
+
+
+
+
+
+ FAIL
+ #2325
+
+
+
+
+
+ FAIL
+ #2325
+
+
+
+ FAIL
- #667
+ #2325
diff --git a/cime_config/testdefs/testlist_clm.xml b/cime_config/testdefs/testlist_clm.xml
index dedf27350e..f51e2e2d77 100644
--- a/cime_config/testdefs/testlist_clm.xml
+++ b/cime_config/testdefs/testlist_clm.xml
@@ -3,6 +3,7 @@
+
@@ -12,14 +13,18 @@
+
+
+
+
@@ -29,6 +34,7 @@
+
@@ -39,23 +45,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -72,6 +157,7 @@
+
@@ -81,6 +167,7 @@
+
@@ -90,6 +177,7 @@
+
@@ -99,6 +187,7 @@
+
@@ -108,6 +197,7 @@
+
@@ -118,22 +208,14 @@
+
+
-
-
-
-
-
-
-
-
-
-
@@ -159,13 +241,23 @@
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -177,6 +269,15 @@
+
+
+
+
+
+
+
+
+
@@ -186,13 +287,13 @@
-
+
-
+
-
+
@@ -203,6 +304,14 @@
+
+
+
+
+
+
+
+
@@ -211,9 +320,18 @@
+
+
+
+
+
+
+
+
+
@@ -223,6 +341,8 @@
+
+
@@ -231,6 +351,7 @@
+
@@ -239,6 +360,7 @@
+
@@ -248,6 +370,7 @@
+
@@ -256,6 +379,7 @@
+
@@ -264,6 +388,7 @@
+
@@ -273,6 +398,8 @@
+
+
@@ -287,9 +414,19 @@
+
+
+
+
+
+
+
+
+
+
@@ -299,6 +436,7 @@
+
@@ -308,6 +446,7 @@
+
@@ -327,13 +466,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -343,6 +492,7 @@
+
@@ -352,6 +502,7 @@
+
@@ -361,6 +512,7 @@
+
@@ -370,6 +522,7 @@
+
@@ -379,6 +532,8 @@
+
+
@@ -387,6 +542,7 @@
+
@@ -397,6 +553,8 @@
+
+
@@ -405,6 +563,7 @@
+
@@ -413,6 +572,7 @@
+
@@ -422,6 +582,8 @@
+
+
@@ -430,6 +592,7 @@
+
@@ -439,6 +602,7 @@
+
@@ -448,6 +612,7 @@
+
@@ -467,17 +632,45 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -507,6 +700,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -515,6 +719,14 @@
+
+
+
+
+
+
+
+
@@ -524,7 +736,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -550,6 +771,14 @@
+
+
+
+
+
+
+
+
@@ -558,6 +787,14 @@
+
+
+
+
+
+
+
+
@@ -566,6 +803,14 @@
+
+
+
+
+
+
+
+
@@ -575,6 +820,15 @@
+
+
+
+
+
+
+
+
+
@@ -584,6 +838,15 @@
+
+
+
+
+
+
+
+
+
@@ -593,6 +856,15 @@
+
+
+
+
+
+
+
+
+
@@ -602,24 +874,25 @@
-
+
-
-
+
-
+
-
+
+
+
-
-
+
+
@@ -634,6 +907,7 @@
+
@@ -643,6 +917,8 @@
+
+
@@ -651,6 +927,7 @@
+
@@ -659,6 +936,7 @@
+
@@ -675,6 +953,7 @@
+
@@ -684,6 +963,7 @@
+
@@ -723,9 +1003,19 @@
+
+
+
+
+
+
+
+
+
+
@@ -735,6 +1025,7 @@
+
@@ -744,6 +1035,7 @@
+
@@ -759,6 +1051,15 @@
+
+
+
+
+
+
+
+
+
@@ -767,6 +1068,14 @@
+
+
+
+
+
+
+
+
@@ -776,6 +1085,15 @@
+
+
+
+
+
+
+
+
+
@@ -785,9 +1103,19 @@
+
+
+
+
+
+
+
+
+
+
@@ -797,6 +1125,7 @@
+
@@ -806,6 +1135,7 @@
+
@@ -815,6 +1145,7 @@
+
@@ -824,6 +1155,7 @@
+
@@ -832,6 +1164,7 @@
+
@@ -841,6 +1174,7 @@
+
@@ -857,6 +1191,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -867,6 +1211,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -877,6 +1231,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -886,27 +1250,63 @@
-
+
-
+
+
-
+
-
+
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -921,6 +1321,14 @@
+
+
+
+
+
+
+
+
@@ -930,6 +1338,15 @@
+
+
+
+
+
+
+
+
+
@@ -940,6 +1357,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -950,12 +1377,12 @@
-
+
-
+
-
+
@@ -963,6 +1390,7 @@
+
@@ -977,9 +1405,19 @@
+
+
+
+
+
+
+
+
+
+
@@ -989,6 +1427,7 @@
+
@@ -998,6 +1437,7 @@
+
@@ -1007,6 +1447,7 @@
+
@@ -1019,7 +1460,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -1028,6 +1478,10 @@
+
+
+
+
@@ -1036,6 +1490,7 @@
+
@@ -1045,6 +1500,7 @@
+
@@ -1053,6 +1509,7 @@
+
@@ -1062,6 +1519,8 @@
+
+
@@ -1079,6 +1538,7 @@
+
@@ -1133,6 +1593,7 @@
+
@@ -1157,13 +1618,13 @@
-
+
-
+
-
+
@@ -1175,6 +1636,15 @@
+
+
+
+
+
+
+
+
+
@@ -1184,6 +1654,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1207,6 +1718,7 @@
+
@@ -1222,9 +1734,19 @@
+
+
+
+
+
+
+
+
+
+
@@ -1235,6 +1757,8 @@
+
+
@@ -1245,6 +1769,8 @@
+
+
@@ -1254,12 +1780,14 @@
+
+
-
+
@@ -1278,46 +1806,53 @@
-
+
-
-
-
+
+
+
-
+
+
+
+
-
-
+
-
-
+
+
+
+
-
+
+
+
+
-
+
@@ -1326,6 +1861,7 @@
+
@@ -1336,6 +1872,7 @@
+
@@ -1345,6 +1882,7 @@
+
@@ -1354,6 +1892,7 @@
+
@@ -1363,6 +1902,7 @@
+
@@ -1372,6 +1912,7 @@
+
@@ -1381,6 +1922,7 @@
+
@@ -1390,18 +1932,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
@@ -1419,6 +1985,12 @@
+
+
+
@@ -1429,16 +2001,6 @@
-
-
-
-
-
-
-
-
-
-
@@ -1457,21 +2019,22 @@
-
+
-
+
+
+
+
+
+
-
-
-
-
+
-
@@ -1480,6 +2043,10 @@
+
+
+
+
@@ -1490,6 +2057,9 @@
+
+
+
@@ -1498,6 +2068,7 @@
+
@@ -1507,21 +2078,13 @@
+
+
-
-
-
-
-
-
-
-
-
-
@@ -1535,15 +2098,21 @@
+
+
-
+
-
+
+
+
@@ -1552,20 +2121,99 @@
-
+
-
-
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1576,6 +2224,7 @@
+
@@ -1593,23 +2242,23 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1624,6 +2273,7 @@
+
@@ -1632,9 +2282,11 @@
+
+
@@ -1645,19 +2297,30 @@
-
+
+
+
+
+
+
+
+
+
+
+
-
+
+
@@ -1684,6 +2347,8 @@
+
+
@@ -1693,6 +2358,7 @@
+
@@ -1702,6 +2368,7 @@
+
@@ -1711,6 +2378,7 @@
+
@@ -1730,6 +2398,7 @@
+
@@ -1740,6 +2409,8 @@
+
+
@@ -1766,6 +2437,7 @@
+
@@ -1775,6 +2447,7 @@
+
@@ -1783,6 +2456,7 @@
+
@@ -1792,6 +2466,8 @@
+
+
@@ -1800,76 +2476,150 @@
+
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
@@ -1878,72 +2628,83 @@
-
+
-
+
+
+
-
+
-
+
+
+
+
-
-
+
-
+
-
-
+
-
+
-
+
-
+
+
+
+
-
+
+
-
+
+
-
+
+
@@ -1951,9 +2712,10 @@
-
+
+
@@ -1961,9 +2723,10 @@
-
+
+
@@ -1971,16 +2734,17 @@
-
+
+
-
+
@@ -1990,6 +2754,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -2024,15 +2798,24 @@
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -2046,40 +2829,47 @@
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
-
+
@@ -2088,9 +2878,19 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -2098,9 +2898,10 @@
-
+
+
@@ -2108,9 +2909,10 @@
-
+
+
@@ -2119,9 +2921,10 @@
-
+
+
@@ -2129,10 +2932,22 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2143,6 +2958,7 @@
+
@@ -2150,9 +2966,13 @@
-
+
+
+
@@ -2161,21 +2981,27 @@
-
+
+
+
-
+
+
+
@@ -2183,9 +3009,10 @@
-
+
+
@@ -2194,9 +3021,10 @@
-
+
+
@@ -2207,6 +3035,7 @@
+
@@ -2214,9 +3043,10 @@
-
+
+
@@ -2224,9 +3054,10 @@
-
+
+
@@ -2234,83 +3065,100 @@
-
+
+
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
+
-
-
+
+
-
+
-
+
+
@@ -2318,7 +3166,7 @@
-
+
@@ -2328,18 +3176,30 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
@@ -2350,6 +3210,7 @@
+
@@ -2357,10 +3218,12 @@
-
+
+
+
@@ -2370,6 +3233,7 @@
+
@@ -2381,6 +3245,9 @@
+
+
+
@@ -2390,6 +3257,7 @@
+
@@ -2399,97 +3267,83 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
@@ -2502,6 +3356,15 @@
+
+
+
+
+
+
+
+
+
@@ -2512,6 +3375,15 @@
+
+
+
+
+
+
+
+
+
@@ -2522,36 +3394,65 @@
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0001 b/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0001
index 719785e25d..17e5cd7da9 100644
--- a/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0001
+++ b/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0001
@@ -10,4 +10,4 @@
hist_type1d_pertape = ' ',' ',' '
use_init_interp = .true.
- finidat = '/glade/p/cisl/dares/RDA_strawman/CESM_ensembles/CLM/CLM5BGC-Crop/ctsm_2001-01-01-00000/clm5_f09_spinup80.clm2_0001.r.2001-01-01-00000.nc'
+ finidat = '/glade/campaign/cisl/dares/glade-p-dares-Oct2023/RDA_strawman/CESM_ensembles/CLM/CLM5BGC-Crop/ctsm_2001-01-01-00000/clm5_f09_spinup80.clm2_0001.r.2001-01-01-00000.nc'
diff --git a/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0002 b/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0002
index 37d5b2b24e..6ef6ce8df2 100644
--- a/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0002
+++ b/cime_config/testdefs/testmods_dirs/clm/DA_multidrv/user_nl_clm_0002
@@ -10,4 +10,4 @@
hist_type1d_pertape = ' ',' ',' '
use_init_interp = .true.
- finidat = '/glade/p/cisl/dares/RDA_strawman/CESM_ensembles/CLM/CLM5BGC-Crop/ctsm_2001-01-01-00000/clm5_f09_spinup80.clm2_0002.r.2001-01-01-00000.nc'
+ finidat = '/glade/campaign/cisl/dares/glade-p-dares-Oct2023/RDA_strawman/CESM_ensembles/CLM/CLM5BGC-Crop/ctsm_2001-01-01-00000/clm5_f09_spinup80.clm2_0002.r.2001-01-01-00000.nc'
diff --git a/cime_config/testdefs/testmods_dirs/clm/ExcessIceStartup_output_sp_exice/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStartup_output_sp_exice/include_user_mods
new file mode 100644
index 0000000000..6d8de3732a
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStartup_output_sp_exice/include_user_mods
@@ -0,0 +1,2 @@
+../monthly
+../../../../usermods_dirs/output_sp_exice
diff --git a/cime_config/testdefs/testmods_dirs/clm/ExcessIceStartup_output_sp_exice/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStartup_output_sp_exice/user_nl_clm
new file mode 100644
index 0000000000..e479af9449
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStartup_output_sp_exice/user_nl_clm
@@ -0,0 +1,3 @@
+ use_excess_ice = .true.
+ finidat = '$DIN_LOC_ROOT/lnd/clm2/initdata_map/clmi.I1850Clm50Sp.0003-01-01.0.9x1.25_gx1v7_exice_simyr1850_c221205.nc'
+ use_init_interp = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/ExcessIceStreams/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStreams/include_user_mods
new file mode 100644
index 0000000000..fe0e18cf88
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStreams/include_user_mods
@@ -0,0 +1 @@
+../default
diff --git a/cime_config/testdefs/testmods_dirs/clm/ExcessIceStreams/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStreams/user_nl_clm
new file mode 100644
index 0000000000..f61ca32a79
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/ExcessIceStreams/user_nl_clm
@@ -0,0 +1,2 @@
+ use_excess_ice = .true.
+ use_excess_ice_streams = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/Fates/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/Fates/user_nl_clm
index 59b639fa84..406fb598f6 100644
--- a/cime_config/testdefs/testmods_dirs/clm/Fates/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/Fates/user_nl_clm
@@ -2,12 +2,11 @@
hist_mfilt = 365
hist_nhtfrq = -24
hist_empty_htapes = .true.
+hist_ndens = 1
fates_spitfire_mode = 1
hist_fincl1 = 'FATES_NCOHORTS', 'FATES_TRIMMING', 'FATES_AREA_PLANTS',
-'FATES_AREA_TREES', 'FATES_COLD_STATUS', 'FATES_DROUGHT_STATUS', 'FATES_GDD',
-'FATES_NCHILLDAYS', 'FATES_NCOLDDAYS', 'FATES_DAYSINCE_COLDLEAFOFF',
-'FATES_DAYSINCE_COLDLEAFON', 'FATES_DAYSINCE_DROUGHTLEAFOFF',
-'FATES_DAYSINCE_DROUGHTLEAFON', 'FATES_MEANLIQVOL_DROUGHTPHEN',
+'FATES_AREA_TREES', 'FATES_COLD_STATUS', 'FATES_GDD',
+'FATES_NCHILLDAYS', 'FATES_NCOLDDAYS', 'FATES_DAYSINCE_COLDLEAFOFF','FATES_DAYSINCE_COLDLEAFON',
'FATES_CANOPY_SPREAD', 'FATES_NESTEROV_INDEX', 'FATES_IGNITIONS', 'FATES_FDI',
'FATES_ROS','FATES_EFFECT_WSPEED', 'FATES_FUELCONSUMED', 'FATES_FIRE_INTENSITY',
'FATES_FIRE_INTENSITY_BURNFRAC', 'FATES_BURNFRAC', 'FATES_FUEL_MEF',
@@ -15,12 +14,10 @@ hist_fincl1 = 'FATES_NCOHORTS', 'FATES_TRIMMING', 'FATES_AREA_PLANTS',
'FATES_FUEL_AMOUNT', 'FATES_LITTER_IN', 'FATES_LITTER_OUT',
'FATES_SEED_BANK', 'FATES_SEEDS_IN', 'FATES_STOREC', 'FATES_VEGC',
'FATES_SAPWOODC', 'FATES_LEAFC', 'FATES_FROOTC', 'FATES_REPROC',
-'FATES_CEFFLUX', 'FATES_STRUCTC', 'FATES_NONSTRUCTC', 'FATES_VEGC_ABOVEGROUND',
+'FATES_STRUCTC', 'FATES_NONSTRUCTC', 'FATES_VEGC_ABOVEGROUND',
'FATES_CANOPY_VEGC', 'FATES_USTORY_VEGC', 'FATES_PRIMARY_PATCHFUSION_ERR',
-'FATES_DISTURBANCE_RATE_P2P', 'FATES_DISTURBANCE_RATE_P2S',
-'FATES_DISTURBANCE_RATE_S2S', 'FATES_DISTURBANCE_RATE_FIRE',
+'FATES_HARVEST_CARBON_FLUX', 'FATES_DISTURBANCE_RATE_FIRE',
'FATES_DISTURBANCE_RATE_LOGGING', 'FATES_DISTURBANCE_RATE_TREEFALL',
-'FATES_DISTURBANCE_RATE_POTENTIAL', 'FATES_HARVEST_CARBON_FLUX',
'FATES_STOMATAL_COND', 'FATES_LBLAYER_COND', 'FATES_NPP', 'FATES_GPP',
'FATES_AUTORESP', 'FATES_GROWTH_RESP', 'FATES_MAINT_RESP', 'FATES_GPP_CANOPY',
'FATES_AUTORESP_CANOPY', 'FATES_GPP_USTORY', 'FATES_AUTORESP_USTORY',
@@ -29,4 +26,5 @@ hist_fincl1 = 'FATES_NCOHORTS', 'FATES_TRIMMING', 'FATES_AREA_PLANTS',
'FATES_NEP', 'FATES_HET_RESP', 'FATES_FIRE_CLOSS', 'FATES_FIRE_FLUX_EL',
'FATES_CBALANCE_ERROR', 'FATES_ERROR_EL', 'FATES_LEAF_ALLOC',
'FATES_SEED_ALLOC', 'FATES_STEM_ALLOC', 'FATES_FROOT_ALLOC',
-'FATES_CROOT_ALLOC', 'FATES_STORE_ALLOC'
+'FATES_CROOT_ALLOC', 'FATES_STORE_ALLOC',
+'FATES_PATCHAREA_LU', 'FATES_DISTURBANCE_RATE_MATRIX_LULU'
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDef/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesCold/include_user_mods
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDef/include_user_mods
rename to cime_config/testdefs/testmods_dirs/clm/FatesCold/include_user_mods
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDef/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesCold/shell_commands
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDef/shell_commands
rename to cime_config/testdefs/testmods_dirs/clm/FatesCold/shell_commands
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefAllVars/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/shell_commands
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefAllVars/shell_commands
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/shell_commands
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefAllVars/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/user_nl_clm
similarity index 94%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefAllVars/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/user_nl_clm
index b7d33c87d2..7f5ece27c8 100644
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefAllVars/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/user_nl_clm
@@ -3,6 +3,7 @@ hist_mfilt = 365
hist_nhtfrq = -24
hist_empty_htapes = .false.
fates_spitfire_mode = 1
+hist_ndens = 1
hist_fincl1 = 'FATES_CROWNAREA_PF', 'FATES_CANOPYCROWNAREA_PF',
'FATES_NCL_AP', 'FATES_NPATCH_AP', 'FATES_VEGC_AP',
'FATES_SECONDARY_FOREST_FRACTION', 'FATES_WOOD_PRODUCT',
@@ -16,7 +17,7 @@ hist_fincl1 = 'FATES_CROWNAREA_PF', 'FATES_CANOPYCROWNAREA_PF',
'FATES_FABI_SUN_CLLLPF', 'FATES_FABI_SHA_CLLLPF', 'FATES_FABD_SUN_CLLL',
'FATES_FABD_SHA_CLLL', 'FATES_FABI_SUN_CLLL', 'FATES_FABI_SHA_CLLL',
'FATES_PARPROF_DIR_CLLLPF', 'FATES_PARPROF_DIF_CLLLPF',
-'FATES_PARPROF_DIR_CLLL', 'FATES_PARPROF_DIF_CLLL', 'FATES_FABD_SUN_TOPLF_CL',
+'FATES_FABD_SUN_TOPLF_CL',
'FATES_FABD_SHA_TOPLF_CL', 'FATES_FABI_SUN_TOPLF_CL', 'FATES_FABI_SHA_TOPLF_CL',
'FATES_NET_C_UPTAKE_CLLL', 'FATES_CROWNAREA_CLLL', 'FATES_NPLANT_CANOPY_SZAP',
'FATES_NPLANT_USTORY_SZAP', 'FATES_DDBH_CANOPY_SZAP', 'FATES_DDBH_USTORY_SZAP',
@@ -70,4 +71,7 @@ hist_fincl1 = 'FATES_CROWNAREA_PF', 'FATES_CANOPYCROWNAREA_PF',
'FATES_CROOTMAINTAR_USTORY_SZ', 'FATES_FROOTMAINTAR_USTORY_SZ',
'FATES_GROWAR_USTORY_SZ', 'FATES_MAINTAR_USTORY_SZ', 'FATES_VEGC_SZPF',
'FATES_LEAFC_SZPF', 'FATES_FROOTC_SZPF', 'FATES_SAPWOODC_SZPF',
-'FATES_STOREC_SZPF', 'FATES_REPROC_SZPF', 'FATES_CEFFLUX_SZPF'
+'FATES_STOREC_SZPF', 'FATES_REPROC_SZPF', 'FATES_DROUGHT_STATUS_PF',
+'FATES_DAYSINCE_DROUGHTLEAFOFF_PF', 'FATES_DAYSINCE_DROUGHTLEAFON_PF',
+'FATES_MEANLIQVOL_DROUGHTPHEN_PF', 'FATES_MEANSMP_DROUGHTPHEN_PF',
+'FATES_ELONG_FACTOR_PF'
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdBasic/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdBasic/shell_commands
new file mode 100644
index 0000000000..586dff9dd5
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdBasic/shell_commands
@@ -0,0 +1,2 @@
+./xmlchange CLM_FORCE_COLDSTART="on"
+./xmlchange BFBFLAG="TRUE"
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/README b/cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/README
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/README
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/README
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/user_nl_clm
new file mode 100644
index 0000000000..9f977ac5ce
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdCH4Off/user_nl_clm
@@ -0,0 +1,2 @@
+use_lch4 = .false.
+hist_fields_list_file = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/user_nl_clm
deleted file mode 100644
index 4d7617fed4..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefCH4Off/user_nl_clm
+++ /dev/null
@@ -1,2 +0,0 @@
-use_lch4 = .false.
-hist_master_list_file = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDep/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDep/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDep/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDepReducedComplexSatPhen/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDepReducedComplexSatPhen/include_user_mods
deleted file mode 100644
index f754dacdab..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDepReducedComplexSatPhen/include_user_mods
+++ /dev/null
@@ -1,2 +0,0 @@
-../FatesColdDefDryDep
-../FatesColdDefReducedComplexSatPhen
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefHydro/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefHydro/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefHydro/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLandUse/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLandUse/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLandUse/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLogging/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLogging/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLogging/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefMegan/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefMegan/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefMegan/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefMeganReducedComplexSatPhen/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefMeganReducedComplexSatPhen/include_user_mods
deleted file mode 100644
index 5dd78011ec..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefMeganReducedComplexSatPhen/include_user_mods
+++ /dev/null
@@ -1,2 +0,0 @@
-../FatesColdDefMegan
-../FatesColdDefReducedComplexSatPhen
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefNoFire/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefNoFire/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefNoFire/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPPhys/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPPhys/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPPhys/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPRT2/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPRT2/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPRT2/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPRT2/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPRT2/user_nl_clm
deleted file mode 100644
index bde61cee2e..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPRT2/user_nl_clm
+++ /dev/null
@@ -1 +0,0 @@
-fates_parteh_mode = 2
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexFixedBiogeo/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexFixedBiogeo/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexFixedBiogeo/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexNoComp/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexNoComp/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexNoComp/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen/include_user_mods
deleted file mode 100644
index a38be35f63..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen/include_user_mods
+++ /dev/null
@@ -1,2 +0,0 @@
-../FatesColdDef
-../../../../usermods_dirs/fates_sp
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen/user_nl_clm
deleted file mode 100644
index 5ae85742ed..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen/user_nl_clm
+++ /dev/null
@@ -1,2 +0,0 @@
-use_fates_sp = .true.
-fates_spitfire_mode = 0
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen_prescribed/README b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen_prescribed/README
deleted file mode 100644
index a1c8f04632..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen_prescribed/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This testmod currently does NOT work, because of issue #1722
-
-See https://github.com/ESCOMP/CTSM/issues/1722
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen_prescribed/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen_prescribed/include_user_mods
deleted file mode 100644
index 7fe9b048d5..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexSatPhen_prescribed/include_user_mods
+++ /dev/null
@@ -1,2 +0,0 @@
-../FatesColdDefReducedComplexSatPhen
-../prescribed
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefST3/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefST3/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefST3/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefSizeAgeMort/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefSizeAgeMort/include_user_mods
deleted file mode 100644
index 1f2c03aebe..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefSizeAgeMort/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefTreeDamage/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDefTreeDamage/include_user_mods
deleted file mode 100644
index e269feea6f..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefTreeDamage/include_user_mods
+++ /dev/null
@@ -1 +0,0 @@
-../FatesColdDef
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDep/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDep/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDep/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDep/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDep/shell_commands
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefDryDep/shell_commands
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdDryDep/shell_commands
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/include_user_mods
new file mode 100644
index 0000000000..f0a10ab452
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/include_user_mods
@@ -0,0 +1 @@
+../FatesColdBasic
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/shell_commands
new file mode 100644
index 0000000000..870cd99bf5
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange CLM_BLDNML_OPTS='--drydep' --append
+# The following would be required if you want to run with DryDep and FATES without Fates-SP mode
+#./xmlchange CLM_BLDNML_OPTS="--ignore_warnings" --append
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/user_nl_clm
new file mode 100644
index 0000000000..3749fd1d61
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdDryDepSatPhen/user_nl_clm
@@ -0,0 +1,4 @@
+
+hist_mfilt = 365
+hist_nhtfrq = -24
+
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdFixedBiogeo/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdFixedBiogeo/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdFixedBiogeo/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexFixedBiogeo/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdFixedBiogeo/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexFixedBiogeo/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdFixedBiogeo/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdHydro/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdHydro/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdHydro/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefHydro/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdHydro/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefHydro/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdHydro/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdLUH2/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdLUH2/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdLUH2/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdLUH2/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdLUH2/user_nl_clm
new file mode 100644
index 0000000000..854c21407f
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdLUH2/user_nl_clm
@@ -0,0 +1 @@
+use_fates_luh = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdLandUse/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdLandUse/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdLandUse/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLandUse/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdLandUse/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefLandUse/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdLandUse/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdLogging/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdLogging/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdLogging/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefLogging/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdLogging/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefLogging/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdLogging/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdMegan/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdMegan/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdMegan/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefMegan/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdMegan/shell_commands
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefMegan/shell_commands
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdMegan/shell_commands
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/include_user_mods
new file mode 100644
index 0000000000..f0a10ab452
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/include_user_mods
@@ -0,0 +1 @@
+../FatesColdBasic
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/shell_commands
new file mode 100644
index 0000000000..749af3486f
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/shell_commands
@@ -0,0 +1,2 @@
+./xmlchange CLM_BLDNML_OPTS='--megan' --append
+./xmlchange CLM_BLDNML_OPTS="--ignore_warnings" --append
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/user_nl_clm
new file mode 100644
index 0000000000..3749fd1d61
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdMeganSatPhen/user_nl_clm
@@ -0,0 +1,4 @@
+
+hist_mfilt = 365
+hist_nhtfrq = -24
+
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoComp/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoComp/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoComp/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexNoComp/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoComp/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefReducedComplexNoComp/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdNoComp/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompFixedBioGeo/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompFixedBioGeo/include_user_mods
new file mode 100644
index 0000000000..ea160c525f
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompFixedBioGeo/include_user_mods
@@ -0,0 +1 @@
+../FatesColdNoComp
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompFixedBioGeo/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompFixedBioGeo/user_nl_clm
new file mode 100644
index 0000000000..d3349780e0
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompFixedBioGeo/user_nl_clm
@@ -0,0 +1 @@
+use_fates_fixed_biogeog=.true.
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompNoFire/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompNoFire/shell_commands
new file mode 100644
index 0000000000..0a8098ef7f
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompNoFire/shell_commands
@@ -0,0 +1,2 @@
+./xmlchange CLM_FORCE_COLDSTART="on"
+./xmlchange CLM_BLDNML_OPTS="-ignore_warnings" --append
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompNoFire/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompNoFire/user_nl_clm
new file mode 100644
index 0000000000..4302b4a1d3
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompNoFire/user_nl_clm
@@ -0,0 +1,2 @@
+use_fates_nocomp = .true.
+fates_spitfire_mode = 0
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoFire/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoFire/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoFire/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefNoFire/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoFire/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefNoFire/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdNoFire/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdPPhys/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdPPhys/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdPPhys/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefPPhys/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdPPhys/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefPPhys/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdPPhys/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdPRT2/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdPRT2/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdPRT2/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdPRT2/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdPRT2/user_nl_clm
new file mode 100644
index 0000000000..679f025b60
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdPRT2/user_nl_clm
@@ -0,0 +1,12 @@
+fates_parteh_mode = 2
+hist_fincl1 = 'FATES_L2FR','FATES_L2FR_CANOPY_REC_PF','FATES_L2FR_USTORY_REC_PF',
+'FATES_NH4UPTAKE_SZPF','FATES_NO3UPTAKE_SZPF','FATES_NEFFLUX_SZPF',
+'FATES_NDEMAND_SZPF','FATES_NFIX_SYM_SZPF','FATES_NH4UPTAKE','FATES_NO3UPTAKE',
+'FATES_NEFFLUX','FATES_NDEMAND','FATES_NFIX_SYM','FATES_STOREN','FATES_STOREN_TF',
+'FATES_VEGN','FATES_SAPWOODN','FATES_LEAFN','FATES_FROOTN','FATES_REPRON','FATES_VEGN_SZPF',
+'FATES_LEAFN_SZPF','FATES_FROOTN_SZPF','FATES_SAPWOODN_SZPF','FATES_STOREN_SZPF','FATES_STOREN_TF_CANOPY_SZPF',
+'FATES_STOREN_TF_USTORY_SZPF','FATES_REPRON_SZPF','FATES_STOREP','FATES_STOREP_TF','FATES_VEGP','FATES_SAPWOODP',
+'FATES_LEAFP','FATES_FROOTP','FATES_REPROP','FATES_PUPTAKE','FATES_PEFFLUX','FATES_PDEMAND',
+'FATES_VEGP_SZPF','FATES_LEAFP_SZPF','FATES_FROOTP_SZPF','FATES_SAPWOODP_SZPF','FATES_STOREP_SZPF',
+'FATES_STOREP_TF_CANOPY_SZPF','FATES_STOREP_TF_USTORY_SZPF','FATES_REPROP_SZPF','FATES_PUPTAKE_SZPF',
+'FATES_PEFFLUX_SZPF','FATES_PDEMAND_SZPF'
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdST3/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdST3/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdST3/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefST3/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdST3/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefST3/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdST3/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen/include_user_mods
new file mode 100644
index 0000000000..f0a10ab452
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen/include_user_mods
@@ -0,0 +1 @@
+../FatesColdBasic
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen/user_nl_clm
new file mode 100644
index 0000000000..3749fd1d61
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen/user_nl_clm
@@ -0,0 +1,4 @@
+
+hist_mfilt = 365
+hist_nhtfrq = -24
+
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen_prescribed/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen_prescribed/include_user_mods
new file mode 100644
index 0000000000..33ca1de12e
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen_prescribed/include_user_mods
@@ -0,0 +1 @@
+../FatesColdSatPhen
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen_prescribed/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen_prescribed/user_nl_clm
new file mode 100644
index 0000000000..59a4137be7
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSatPhen_prescribed/user_nl_clm
@@ -0,0 +1,3 @@
+use_lai_streams = .true.
+lai_tintalgo = 'lower' ! set time interpolation to use lower value, so can compare more directly to input dataset
+
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/README b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/README
new file mode 100644
index 0000000000..484fa67db9
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/README
@@ -0,0 +1,26 @@
+Testing FATES cross grid seed dispersal is activated by enabling the
+namelist switch option fates_seeddisp_cadence as well as providing reasonable
+values to the fates parameter file for the following variables:
+
+fates_seed_dispersal_fraction
+fates_seed_dispersal_max_dist
+fates_seed_dispersal_pdf_scale
+fates_seed_dispersal_pdf_shape
+
+Given that the default fates parameter file has the above variables as unset,
+a custom fates parameter file must be supplied to appropriately test this mode.
+This testmod itself addresses CTSM issue 2151: https://github.com/ESCOMP/CTSM/issues/2151
+Note that to avoid exceeding the filename string length maximu, the parameter
+file generated on the fly is placed in the $SRCROOT/src/fates/parameter_files
+directory. This may still run into problems is the $SRCROOT string is too long.
+
+The max_dist value will impact the size of the 'neighborhood' of gridcells
+that fates will attempt to distribute seeds to. To limit the neighborhood to
+something tractable for a regression test, the user_nl_clm file points to a
+specific fates parameter file that was generated to work with a 5x5_amazon
+resolution.
+
+The main downside of this method is that this file will require a custom update
+for every fates parameter file API update. Addressing CTSM issue #2126 will alleviate
+this issue as it will provide the capability to build the fates parameter file on
+the fly which with the appropriate values for this test.
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands
new file mode 100644
index 0000000000..94a832af25
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands
@@ -0,0 +1,11 @@
+SRCDIR=`./xmlquery SRCROOT --value`
+CASEDIR=`./xmlquery CASEROOT --value`
+FATESDIR=$SRCDIR/src/fates/
+FATESPARAMFILE=$SRCDIR/fates_params_seeddisp_4x5.nc
+
+ncgen -o $FATESPARAMFILE $FATESDIR/parameter_files/fates_params_default.cdl
+
+$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_seed_dispersal_fraction --val 0.2 --allpfts
+$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_seed_dispersal_max_dist --val 2500000 --allpfts
+$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_seed_dispersal_pdf_scale --val 1e-05 --allpfts
+$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_seed_dispersal_pdf_shape --val 0.1 --allpfts
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/user_nl_clm
new file mode 100644
index 0000000000..e8d24253c1
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/user_nl_clm
@@ -0,0 +1,3 @@
+fates_paramfile = '$SRCROOT/fates_params_seeddisp_4x5.nc'
+fates_seeddisp_cadence = 1
+hist_fincl1 = 'FATES_SEEDS_IN_GRIDCELL_PF', 'FATES_SEEDS_OUT_GRIDCELL_PF'
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSizeAgeMort/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdSizeAgeMort/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSizeAgeMort/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefSizeAgeMort/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdSizeAgeMort/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefSizeAgeMort/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdSizeAgeMort/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTreeDamage/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdTreeDamage/include_user_mods
new file mode 100644
index 0000000000..5417dbaa1c
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTreeDamage/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdDefTreeDamage/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdTreeDamage/user_nl_clm
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/FatesColdDefTreeDamage/user_nl_clm
rename to cime_config/testdefs/testmods_dirs/clm/FatesColdTreeDamage/user_nl_clm
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/README b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/README
new file mode 100644
index 0000000000..295f8125f3
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/README
@@ -0,0 +1,15 @@
+Testing FATES two-stream radiation scheme is activated by switching the fates_rad_model
+parameter from 1 to 2. This is all that is needed, both radiation schemes
+1) Norman and 2) two-stream use the same optical parameters.
+
+fates_rad_model
+
+Note that to avoid exceeding the filename string length maximum, the parameter
+file generated on the fly is placed in the $SRCROOT/src/fates/parameter_files
+directory. This may still run into problems is the $SRCROOT string is too long.
+
+Like the test with seed dispersal activation, the main downside of this method is
+that this file will require a custom update for every fates parameter file API update.
+Addressing CTSM issue #2126 will alleviate
+this issue as it will provide the capability to build the fates parameter file on
+the fly which with the appropriate values for this test.
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/include_user_mods
new file mode 100644
index 0000000000..14f7591b72
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/include_user_mods
@@ -0,0 +1 @@
+../FatesCold
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands
new file mode 100644
index 0000000000..5d94e5f659
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands
@@ -0,0 +1,8 @@
+SRCDIR=`./xmlquery SRCROOT --value`
+CASEDIR=`./xmlquery CASEROOT --value`
+FATESDIR=$SRCDIR/src/fates
+FATESPARAMFILE=$CASEDIR/fates_params_twostream.nc
+
+ncgen -o $FATESPARAMFILE $FATESDIR/parameter_files/fates_params_default.cdl
+
+$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_rad_model --val 2 --allpfts
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/user_nl_clm
new file mode 100644
index 0000000000..cae5fc2112
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/user_nl_clm
@@ -0,0 +1 @@
+fates_paramfile = '$CASEROOT/fates_params_twostream.nc'
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/README b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/README
new file mode 100644
index 0000000000..d2c2269fae
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/README
@@ -0,0 +1,3 @@
+This tests two-stream radiation crossed with fixed biogeography and nocomp, for
+a description of how two-stream is turned on for tests see
+FatesColdTwoStream/README
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/include_user_mods
new file mode 100644
index 0000000000..17d5840e8c
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/include_user_mods
@@ -0,0 +1 @@
+../FatesColdNoComp
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands
new file mode 100644
index 0000000000..5d94e5f659
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands
@@ -0,0 +1,8 @@
+SRCDIR=`./xmlquery SRCROOT --value`
+CASEDIR=`./xmlquery CASEROOT --value`
+FATESDIR=$SRCDIR/src/fates
+FATESPARAMFILE=$CASEDIR/fates_params_twostream.nc
+
+ncgen -o $FATESPARAMFILE $FATESDIR/parameter_files/fates_params_default.cdl
+
+$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_rad_model --val 2 --allpfts
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/user_nl_clm
new file mode 100644
index 0000000000..362dfa4a5e
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/user_nl_clm
@@ -0,0 +1,2 @@
+fates_paramfile = '$CASEROOT/fates_params_twostream.nc'
+use_fates_fixed_biogeog=.true.
\ No newline at end of file
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesPRISM/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesPRISM/include_user_mods
new file mode 100644
index 0000000000..4c7aa0f2b4
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesPRISM/include_user_mods
@@ -0,0 +1 @@
+../Fates
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesPRISM/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesPRISM/shell_commands
new file mode 100644
index 0000000000..39812a8706
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesPRISM/shell_commands
@@ -0,0 +1,2 @@
+#!/bin/bash
+./xmlchange CLM_USRDAT_NAME=NEON.PRISM
diff --git a/cime_config/testdefs/testmods_dirs/clm/PRISM/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/PRISM/include_user_mods
new file mode 100644
index 0000000000..fe0e18cf88
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/PRISM/include_user_mods
@@ -0,0 +1 @@
+../default
diff --git a/cime_config/testdefs/testmods_dirs/clm/PRISM/shell_commands b/cime_config/testdefs/testmods_dirs/clm/PRISM/shell_commands
new file mode 100644
index 0000000000..39812a8706
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/PRISM/shell_commands
@@ -0,0 +1,2 @@
+#!/bin/bash
+./xmlchange CLM_USRDAT_NAME=NEON.PRISM
diff --git a/cime_config/testdefs/testmods_dirs/clm/SaveHistFieldList/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/SaveHistFieldList/user_nl_clm
new file mode 100644
index 0000000000..4791cd28b2
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/SaveHistFieldList/user_nl_clm
@@ -0,0 +1 @@
+hist_fields_list_file = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/shell_commands b/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/shell_commands
index 446125abf9..e410197c3d 100755
--- a/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/shell_commands
+++ b/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/shell_commands
@@ -1,12 +1,12 @@
-# shell commands to execute xmlchange commands written by PTCLMmkdata:
-# ./PTCLMmkdata --cesm_root ../../../.. -s US-UMB -d /glade/p/cesm/cseg/inputdata --mydatadir=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024
+#!/bin/bash
+# shell commands to execute xmlchange commands written by PTCLMmkdata: which is now unsupported
./xmlchange CLM_USRDAT_NAME=1x1pt_US-UMB
./xmlchange DATM_CLMNCEP_YR_START=1999
./xmlchange DATM_CLMNCEP_YR_END=2006
# Comment this out if NINST_LND is greater than 1 (see: http://bugs.cgd.ucar.edu/show_bug.cgi?id=2521)
./xmlchange MPILIB=mpi-serial
-./xmlchange ATM_DOMAIN_PATH=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB
-./xmlchange LND_DOMAIN_PATH=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB
+./xmlchange ATM_DOMAIN_PATH='$DIN_LOC_ROOT/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB'
+./xmlchange LND_DOMAIN_PATH='$DIN_LOC_ROOT/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB'
./xmlchange ATM_DOMAIN_FILE=domain.lnd.1x1pt_US-UMB_navy.171024.nc
./xmlchange LND_DOMAIN_FILE=domain.lnd.1x1pt_US-UMB_navy.171024.nc
./xmlchange --append CLM_BLDNML_OPTS='-mask navy -no-crop'
@@ -15,5 +15,4 @@
./xmlchange ATM_NCPL=24
./xmlchange RUN_STARTDATE=1999-01-01
./xmlchange DATM_CLMNCEP_YR_ALIGN=1999
-./xmlchange DIN_LOC_ROOT=/glade/p/cesm/cseg/inputdata
-./xmlchange DIN_LOC_ROOT_CLMFORC=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024
+./xmlchange DIN_LOC_ROOT_CLMFORC='$DIN_LOC_ROOT/lnd/clm2/PTCLMmydatafiles.c171024'
diff --git a/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/user_nl_clm
index 38ce400297..8bb7848d49 100644
--- a/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/USUMB_mct/user_nl_clm
@@ -1,5 +1,4 @@
-! user_nl_clm namelist options written by PTCLMmkdata:
-! ./PTCLMmkdata --cesm_root ../../../.. -s US-UMB -d /glade/p/cesm/cseg/inputdata --mydatadir=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024
- fsurdat = '/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB/surfdata_1x1pt_US-UMB_16pfts_Irrig_CMIP6_simyr2000_c171024.nc'
+! user_nl_clm namelist options written by PTCLMmkdata, which is no longer available
+ fsurdat = '$DIN_LOC_ROOT/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB/surfdata_1x1pt_US-UMB_16pfts_Irrig_CMIP6_simyr2000_c171024.nc'
hist_nhtfrq = 0
hist_mfilt = 1200
diff --git a/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/shell_commands b/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/shell_commands
index 08a9014abe..43fe16a192 100755
--- a/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/shell_commands
+++ b/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/shell_commands
@@ -1,5 +1,4 @@
-# shell commands to execute xmlchange commands written by PTCLMmkdata:
-# ./PTCLMmkdata --cesm_root ../../../.. -s US-UMB -d /glade/p/cesm/cseg/inputdata --mydatadir=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024
+# shell commands to execute xmlchange commands written by PTCLMmkdata: which is now unsupported
./xmlchange CLM_USRDAT_NAME=1x1pt_US-UMB
./xmlchange DATM_YR_START=1999
./xmlchange DATM_YR_END=2006
@@ -11,7 +10,6 @@
./xmlchange ATM_NCPL=24
./xmlchange RUN_STARTDATE=1999-01-01
./xmlchange DATM_YR_ALIGN=1999
-./xmlchange DIN_LOC_ROOT=/glade/p/cesm/cseg/inputdata
-./xmlchange DIN_LOC_ROOT_CLMFORC=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024
+./xmlchange DIN_LOC_ROOT_CLMFORC='$DIN_LOC_ROOT/lnd/clm2/PTCLMmydatafiles.c171024'
./xmlchange PTS_LON=275.2862
./xmlchange PTS_LAT=45.5598
diff --git a/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/user_nl_clm
index 38ce400297..8bb7848d49 100644
--- a/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/USUMB_nuopc/user_nl_clm
@@ -1,5 +1,4 @@
-! user_nl_clm namelist options written by PTCLMmkdata:
-! ./PTCLMmkdata --cesm_root ../../../.. -s US-UMB -d /glade/p/cesm/cseg/inputdata --mydatadir=/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024
- fsurdat = '/glade/p/cesm/cseg/inputdata/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB/surfdata_1x1pt_US-UMB_16pfts_Irrig_CMIP6_simyr2000_c171024.nc'
+! user_nl_clm namelist options written by PTCLMmkdata, which is no longer available
+ fsurdat = '$DIN_LOC_ROOT/lnd/clm2/PTCLMmydatafiles.c171024/1x1pt_US-UMB/surfdata_1x1pt_US-UMB_16pfts_Irrig_CMIP6_simyr2000_c171024.nc'
hist_nhtfrq = 0
hist_mfilt = 1200
diff --git a/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm
index 7ae4a69aad..c235d72df1 100644
--- a/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm
@@ -1,2 +1,2 @@
-paramfile = '/glade/p/cesm/cseg/inputdata/lnd/clm2/paramdata/ctsm51_ciso_cwd_hr_params.c211112.nc'
+paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm51_ciso_cwd_hr_params.c240207b.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'
diff --git a/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningMode/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningMode/include_user_mods
new file mode 100644
index 0000000000..fe0e18cf88
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningMode/include_user_mods
@@ -0,0 +1 @@
+../default
diff --git a/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningMode/shell_commands b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningMode/shell_commands
new file mode 100644
index 0000000000..cf39cca1c0
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningMode/shell_commands
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+./xmlchange LND_TUNING_MODE="clm5_1_cam6.0"
+./xmlchange ROF_NCPL='$ATM_NCPL'
+
diff --git a/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningModeCiso/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningModeCiso/include_user_mods
new file mode 100644
index 0000000000..aa76c52034
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningModeCiso/include_user_mods
@@ -0,0 +1 @@
+../clm51cam6LndTuningMode
diff --git a/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningModeCiso/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningModeCiso/user_nl_clm
new file mode 100644
index 0000000000..e7627dea50
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/clm51cam6LndTuningModeCiso/user_nl_clm
@@ -0,0 +1,5 @@
+! Turn on Carbon isotopes
+use_c13 = .true.
+use_c14 = .true.
+use_c13_timeseries = .true.
+use_c14_bombspike = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/README b/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/README
index 81fb991ed0..af5d819ffc 100644
--- a/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/README
+++ b/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/README
@@ -9,10 +9,10 @@ According to the file
the following two files used in this test
are default files for the following options:
-fsurdat = '/glade/p/cesmdata/cseg/inputdata/lnd/clm2/surfdata_map/surfdata_10x15_78pfts_CMIP6_simyr1850_c170824.nc'
+fsurdat = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/surfdata_10x15_78pfts_CMIP6_simyr1850_c170824.nc'
hgrid="10x15" sim_year="1850" use_crop=".true."
-flanduse_timeseries = '/glade/p/cesmdata/cseg/inputdata/lnd/clm2/surfdata_map/landuse.timeseries_10x15_hist_78pfts_CMIP6_simyr1850-2015_c170824.nc'
+flanduse_timeseries = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/landuse.timeseries_10x15_hist_78pfts_CMIP6_simyr1850-2015_c170824.nc'
hgrid="10x15" sim_year_range="1850-2000" use_crop=".true."
hgrid="10x15" rcp="8.5" sim_year_range="1850-2100" use_crop=".true."
hgrid="10x15" rcp="6" sim_year_range="1850-2100" use_crop=".true."
diff --git a/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/user_nl_clm
index ff78e0122c..8c4fed6873 100644
--- a/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/collapse_pfts_78_to_16_decStart_f10/user_nl_clm
@@ -1,2 +1,2 @@
-fsurdat = '/glade/p/cesmdata/cseg/inputdata/lnd/clm2/surfdata_map/surfdata_10x15_78pfts_CMIP6_simyr1850_c170824.nc'
-flanduse_timeseries = '/glade/p/cesmdata/cseg/inputdata/lnd/clm2/surfdata_map/landuse.timeseries_10x15_hist_78pfts_CMIP6_simyr1850-2015_c170824.nc'
+fsurdat = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/surfdata_10x15_78pfts_CMIP6_simyr1850_c170824.nc'
+flanduse_timeseries = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/landuse.timeseries_10x15_hist_78pfts_CMIP6_simyr1850-2015_c170824.nc'
diff --git a/cime_config/testdefs/testmods_dirs/clm/cplhist/shell_commands b/cime_config/testdefs/testmods_dirs/clm/cplhist/shell_commands
index ac079d5334..f0eb85010b 100755
--- a/cime_config/testdefs/testmods_dirs/clm/cplhist/shell_commands
+++ b/cime_config/testdefs/testmods_dirs/clm/cplhist/shell_commands
@@ -1,12 +1,8 @@
-driver=`./xmlquery --value COMP_INTERFACE`
-if [ "$driver" = "nuopc" ]; then
- ./xmlchange DATM_YR_ALIGN=1
- ./xmlchange DATM_YR_END=84
- ./xmlchange DATM_YR_START=82
-else
- ./xmlchange DATM_CPLHIST_YR_ALIGN=1
- ./xmlchange DATM_CPLHIST_YR_END=84
- ./xmlchange DATM_CPLHIST_YR_START=82
-fi
-./xmlchange DATM_CPLHIST_CASE=b.e20.B1850.f09_g17.pi_control.all.221.cplhist
-./xmlchange DATM_CPLHIST_DIR=/glade/p/cesm/bgcwg_dev/forcing/b.e20.B1850.f09_g17.pi_control.all.221.cplhist/cpl/hist.mon
+./xmlchange DATM_CPLHIST_CASE=cam6ctsm51_cesm23a12c_ne30pg3g17_CPLHIST_1850
+./xmlchange DATM_CPLHIST_DIR='$DIN_LOC_ROOT/atm/datm7/atm_forcing.cdeps_datm.CPLHIST_cam6ctsm51_cesm23a12c_ne30pg3g17_1850'
+./xmlchange DATM_YR_START=1
+./xmlchange DATM_YR_END=1
+./xmlchange DATM_YR_ALIGN=1
+
+# Needed until we have cplhist forcing with ndep - see https://github.com/escomp/ctsm/issues/1844
+./xmlchange DATM_PRESNDEP=none
diff --git a/cime_config/testdefs/testmods_dirs/clm/crop/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/crop/user_nl_clm
index 4add705be3..67042ea01a 100644
--- a/cime_config/testdefs/testmods_dirs/clm/crop/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/crop/user_nl_clm
@@ -1,9 +1,17 @@
hist_fincl1 += 'GDD0', 'GDD8', 'GDD10',
'GDD020', 'GDD820', 'GDD1020',
'GDDACCUM', 'GDDTSOI', 'A5TMIN', 'A10TMIN',
- 'HUI'
+ 'HUI', 'GRAINN_TO_FOOD'
! The main point of including this field is to test the SUM history field infrastructure
! This is in the crop testmods because this field is mainly useful in transient crop runs
! This is on history tape 2 because this field is not meaningful at the gridcell level
hist_fincl2 += 'DYN_COL_SOIL_ADJUSTMENTS_C'
+
+
+! Annual crop variables on per-sowing/per-harvest axes, per PFT.
+hist_fincl3 = 'SDATES', 'SDATES_PERHARV', 'SYEARS_PERHARV', 'HDATES', 'GRAINC_TO_FOOD_PERHARV', 'GRAINC_TO_FOOD_ANN', 'GRAINN_TO_FOOD_PERHARV', 'GRAINN_TO_FOOD_ANN', 'GRAINC_TO_SEED_PERHARV', 'GRAINC_TO_SEED_ANN', 'GRAINN_TO_SEED_PERHARV', 'GRAINN_TO_SEED_ANN', 'HDATES', 'GDDHARV_PERHARV', 'GDDACCUM_PERHARV', 'HUI_PERHARV', 'SOWING_REASON_PERHARV', 'HARVEST_REASON_PERHARV', 'SWINDOW_STARTS', 'SWINDOW_ENDS'
+hist_nhtfrq(3) = 17520
+hist_mfilt(3) = 1
+hist_type1d_pertape(3) = 'PFTS'
+hist_dov2xy(3) = .false.
diff --git a/cime_config/testdefs/testmods_dirs/clm/cropMonthOutput/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/cropMonthOutput/user_nl_clm
index dfe718a7b4..ae4284da6b 100644
--- a/cime_config/testdefs/testmods_dirs/clm/cropMonthOutput/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/cropMonthOutput/user_nl_clm
@@ -1,6 +1,2 @@
- hist_nhtfrq = 0,-240,-8760
+ hist_nhtfrq = 0,-240,17520
hist_mfilt = 1,1,1
-
- ! Add an annual output file with these crop-specific variables, which exercise some special logic:
- hist_fincl3 = 'SDATES', 'HDATES'
- hist_dov2xy(3) = .false.
diff --git a/cime_config/testdefs/testmods_dirs/clm/datm_bias_correct_cruv7/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/datm_bias_correct_cruv7/user_nl_clm
deleted file mode 100644
index c7cfe279ee..0000000000
--- a/cime_config/testdefs/testmods_dirs/clm/datm_bias_correct_cruv7/user_nl_clm
+++ /dev/null
@@ -1 +0,0 @@
-use_lai_streams = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/extra_outputs/README b/cime_config/testdefs/testmods_dirs/clm/extra_outputs/README
index 03bc956b6f..574d7cc204 100644
--- a/cime_config/testdefs/testmods_dirs/clm/extra_outputs/README
+++ b/cime_config/testdefs/testmods_dirs/clm/extra_outputs/README
@@ -1,4 +1,4 @@
This test mod turns on extra diagnostic fields
-It also outputs an optional text file containing a table of the
-history fields master list
+It also outputs an optional text file containing a table of all
+the possible history fields
diff --git a/cime_config/testdefs/testmods_dirs/clm/extra_outputs/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/extra_outputs/user_nl_clm
index 6dc5225f1d..dad8a7e843 100644
--- a/cime_config/testdefs/testmods_dirs/clm/extra_outputs/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/extra_outputs/user_nl_clm
@@ -1,5 +1,5 @@
calc_human_stress_indices = 'ALL'
-hist_master_list_file = .true.
+hist_fields_list_file = .true.
hist_fincl1 += 'GSSUN:L43200', 'GSSHA:L43200', 'FSDSND:L43200', 'FSRND:L43200', 'FSRSFND:L43200',
'SSRE_FSRND:L43200', 'FSDSVD:L43200', 'FSDSVI:L43200',
diff --git a/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/include_user_mods
new file mode 100644
index 0000000000..fe0e18cf88
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/include_user_mods
@@ -0,0 +1 @@
+../default
diff --git a/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/shell_commands b/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/shell_commands
new file mode 100755
index 0000000000..3adf0390b1
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange RUN_STARTDATE=1990-12-30
+# Ignore warnings because we are using crop, but starting from a different date than the initial conditions were for
+./xmlchange CLM_BLDNML_OPTS=-ignore_warnings --append
diff --git a/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/user_nl_clm
new file mode 100644
index 0000000000..efb3212d5f
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/f09_dec1990Start_GU_LULCC/user_nl_clm
@@ -0,0 +1,5 @@
+ ! Specify a dataset that has non-zero Gross Unrepresented Land Use change fields on it
+ ! And turn it on
+ flanduse_timeseries = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_0.9x1.25_hist_78pfts_CMIP6_simyr1700-2021_c220825.nc'
+ fsurdat = '$DIN_LOC_ROOT/lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_0.9x1.25_hist_78pfts_CMIP6_simyr1700_c220825.nc'
+ do_grossunrep = .true.
diff --git a/cime_config/testdefs/testmods_dirs/clm/mimicsFatesColdDef/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/mimicsFatesCold/include_user_mods
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/mimicsFatesColdDef/include_user_mods
rename to cime_config/testdefs/testmods_dirs/clm/mimicsFatesCold/include_user_mods
diff --git a/cime_config/testdefs/testmods_dirs/clm/mimicsFatesColdDef/shell_commands b/cime_config/testdefs/testmods_dirs/clm/mimicsFatesCold/shell_commands
similarity index 100%
rename from cime_config/testdefs/testmods_dirs/clm/mimicsFatesColdDef/shell_commands
rename to cime_config/testdefs/testmods_dirs/clm/mimicsFatesCold/shell_commands
diff --git a/cime_config/testdefs/testmods_dirs/clm/remove_residues/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/remove_residues/include_user_mods
new file mode 100644
index 0000000000..23ea3745e6
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/remove_residues/include_user_mods
@@ -0,0 +1 @@
+../crop
diff --git a/cime_config/testdefs/testmods_dirs/clm/remove_residues/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/remove_residues/user_nl_clm
new file mode 100644
index 0000000000..cea306136b
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/remove_residues/user_nl_clm
@@ -0,0 +1,2 @@
+crop_residue_removal_frac = 1.0
+
diff --git a/cime_config/testdefs/testmods_dirs/clm/run_self_tests/shell_commands b/cime_config/testdefs/testmods_dirs/clm/run_self_tests/shell_commands
old mode 100644
new mode 100755
index a66f52f6fd..d426269206
--- a/cime_config/testdefs/testmods_dirs/clm/run_self_tests/shell_commands
+++ b/cime_config/testdefs/testmods_dirs/clm/run_self_tests/shell_commands
@@ -1,3 +1,5 @@
#!/bin/bash
./xmlchange CLM_FORCE_COLDSTART="on"
+# We use this testmod in a _Ln1 test; this requires forcing the ROF coupling frequency to every time step
+./xmlchange ROF_NCPL=48
diff --git a/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/modify_smallville_with_dynurban.ncl b/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/modify_smallville_with_dynurban.ncl
index 15ec0469be..5ac651b508 100644
--- a/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/modify_smallville_with_dynurban.ncl
+++ b/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/modify_smallville_with_dynurban.ncl
@@ -18,8 +18,8 @@ begin
print ("Start Time: "+systemfunc("date") )
print ("=========================================")
- infile = "/glade/p/cgd/tss/people/oleson/modify_surfdata/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_c160127.nc"
- outfile = "/glade/p/cgd/tss/people/oleson/modify_surfdata/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_dynUrban_c220223.nc"
+ infile = "/glade/campaign/cgd/tss/people/oleson/modify_surfdata/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_c160127.nc"
+ outfile = "/glade/campaign/cgd/tss/people/oleson/modify_surfdata/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_dynUrban_c220223.nc"
system("cp " + infile + " " + outfile)
@@ -61,7 +61,9 @@ begin
outf->PCT_URBAN = pct_urban
outf->PCT_CROP = pct_crop
- outf@history = "This file was created with the following NCL script: /glade/p/cgd/tss/people/oleson/modify_surfdata/modify_smallville_with_dynurban.ncl. The file used as a template is: /glade/p/cesm/cseg/inputdata/lnd/clm2/surfdata_map/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_c160127.nc. Key points are that urban area starts as 0, increases after the first year, then decreases after the second year. Medium density urban is set to zero to test the memory-saving behavior of PCT_URBAN_MAX. PCT_CROP is also changed so that PCT_URBAN + PCT_CROP <= 100. (Here, PCT_CROP increases and decreases at the same time as PCT_URBAN in order to exercise the simultaneous increase or decrease of two landunits, but that isn't a critical part of this test.). Note that the use of this file means that this testmod can only be used with the 1x1_smallvilleIA grid."
+ outf@history = "This file was created with the following NCL script:
+/glade/campaign/cgd/tss/people/oleson/modify_surfdata/modify_smallville_with_dynurban.ncl. The file used as a template is:
+/glade/campaign/cesm/cesmdata/inputdata/lnd/clm2/surfdata_map/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_c160127.nc. Key points are that urban area starts as 0, increases after the first year, then decreases after the second year. Medium density urban is set to zero to test the memory-saving behavior of PCT_URBAN_MAX. PCT_CROP is also changed so that PCT_URBAN + PCT_CROP <= 100. (Here, PCT_CROP increases and decreases at the same time as PCT_URBAN in order to exercise the simultaneous increase or decrease of two landunits, but that isn't a critical part of this test.). Note that the use of this file means that this testmod can only be used with the 1x1_smallvilleIA grid."
print ("=========================================")
print ("Finish Time: "+systemfunc("date") )
diff --git a/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/user_nl_clm
index 69a78ee17d..0ba93b1ee2 100644
--- a/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly/user_nl_clm
@@ -1,9 +1,9 @@
do_transient_urban = .true.
! The flanduse_timeseries file was created with the following NCL script (a copy of this script is in cime_config/testdefs/testmods_dirs/clm/smallville_dynurban_monthly):
-! /glade/p/cgd/tss/people/oleson/modify_surfdata/modify_smallville_with_dynurban.ncl
+! /glade/campaign/cgd/tss/people/oleson/modify_surfdata/modify_smallville_with_dynurban.ncl
! The file used as a template is:
-! /glade/p/cesm/cseg/inputdata/lnd/clm2/surfdata_map/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_c160127.nc
+! /glade/campaign/cgd/tss/people/oleson/modify_surfdata/lnd/clm2/surfdata_map/landuse.timeseries_1x1_smallvilleIA_hist_78pfts_simyr1850-1855_c160127.nc
! Key points are that urban area starts as 0, increases after the first year, then decreases after the second year.
! Medium density urban is set to zero to test the memory-saving behavior of PCT_URBAN_MAX.
! PCT_CROP is also changed so that PCT_URBAN + PCT_CROP <= 100. (Here, PCT_CROP increases and decreases at the same time as PCT_URBAN in order to exercise the simultaneous increase or decrease of two landunits, but that isn't a critical part of this test.)
diff --git a/cime_config/testdefs/testmods_dirs/clm/sowingWindows/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/sowingWindows/include_user_mods
new file mode 100644
index 0000000000..fe0e18cf88
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/sowingWindows/include_user_mods
@@ -0,0 +1 @@
+../default
diff --git a/cime_config/testdefs/testmods_dirs/clm/sowingWindows/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/sowingWindows/user_nl_clm
new file mode 100644
index 0000000000..03165bb306
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/sowingWindows/user_nl_clm
@@ -0,0 +1,5 @@
+stream_fldFileName_swindow_start = '$DIN_LOC_ROOT/lnd/clm2/cropdata/calendars/processed/swindow_starts_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.nc'
+stream_fldFileName_swindow_end = '$DIN_LOC_ROOT/lnd/clm2/cropdata/calendars/processed/swindow_ends_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.nc'
+stream_meshfile_cropcal = '$DIN_LOC_ROOT/share/meshes/360x720_120830_ESMFmesh_c20210507_cdf5.nc'
+stream_year_first_cropcal = 2000
+stream_year_last_cropcal = 2000
diff --git a/cime_config/testdefs/testmods_dirs/clm/till/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/till/include_user_mods
new file mode 100644
index 0000000000..23ea3745e6
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/till/include_user_mods
@@ -0,0 +1 @@
+../crop
diff --git a/cime_config/testdefs/testmods_dirs/clm/till/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/till/user_nl_clm
new file mode 100644
index 0000000000..f94c6df309
--- /dev/null
+++ b/cime_config/testdefs/testmods_dirs/clm/till/user_nl_clm
@@ -0,0 +1,2 @@
+tillage_mode = 'high'
+
diff --git a/cime_config/usermods_dirs/NEON/BARR/shell_commands b/cime_config/usermods_dirs/NEON/BARR/shell_commands
index 55037c6b37..a5892a146b 100644
--- a/cime_config/usermods_dirs/NEON/BARR/shell_commands
+++ b/cime_config/usermods_dirs/NEON/BARR/shell_commands
@@ -1,7 +1,13 @@
+#!/bin/bash
+
./xmlchange NEONSITE=BARR
./xmlchange PTS_LON=203.349781
./xmlchange PTS_LAT=71.281711
-./xmlchange RUN_STARTDATE=2019-01-01
-./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019,DATM_YR_END=2022
-./xmlchange STOP_N=39
-
+./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/BLAN/shell_commands b/cime_config/usermods_dirs/NEON/BLAN/shell_commands
index cb093d806a..0508481981 100644
--- a/cime_config/usermods_dirs/NEON/BLAN/shell_commands
+++ b/cime_config/usermods_dirs/NEON/BLAN/shell_commands
@@ -1,3 +1,3 @@
./xmlchange NEONSITE=BLAN
-./xmlchange PTS_LON=281.92885
-./xmlchange PTS_LAT=39.06044
+./xmlchange PTS_LON=281.958212
+./xmlchange PTS_LAT=39.033698
diff --git a/cime_config/usermods_dirs/NEON/CPER/shell_commands b/cime_config/usermods_dirs/NEON/CPER/shell_commands
index 169b358a40..b70b1a46a0 100644
--- a/cime_config/usermods_dirs/NEON/CPER/shell_commands
+++ b/cime_config/usermods_dirs/NEON/CPER/shell_commands
@@ -1,3 +1,10 @@
+#!/bin/bash
+
./xmlchange NEONSITE=CPER
./xmlchange PTS_LON=255.25545
./xmlchange PTS_LAT=40.81297
+if [[ $compset =~ ^HIST ]]; then
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=50
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/ABBY/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/ABBY/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/ABBY/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/ABBY/shell_commands b/cime_config/usermods_dirs/NEON/FATES/ABBY/shell_commands
new file mode 100644
index 0000000000..08f6e7cdef
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/ABBY/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=ABBY
+./xmlchange PTS_LON=237.67032799999998
+./xmlchange PTS_LAT=45.762378
diff --git a/cime_config/usermods_dirs/NEON/FATES/BARR/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/BARR/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BARR/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/BARR/shell_commands b/cime_config/usermods_dirs/NEON/FATES/BARR/shell_commands
new file mode 100644
index 0000000000..a5892a146b
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BARR/shell_commands
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+./xmlchange NEONSITE=BARR
+./xmlchange PTS_LON=203.349781
+./xmlchange PTS_LAT=71.281711
+./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/BART/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/BART/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BART/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/BART/shell_commands b/cime_config/usermods_dirs/NEON/FATES/BART/shell_commands
new file mode 100644
index 0000000000..a4e86a1b8c
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BART/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=BART
+./xmlchange PTS_LON=288.71166
+./xmlchange PTS_LAT=44.06516
diff --git a/cime_config/usermods_dirs/NEON/FATES/BLAN/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/BLAN/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BLAN/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/BLAN/shell_commands b/cime_config/usermods_dirs/NEON/FATES/BLAN/shell_commands
new file mode 100644
index 0000000000..0508481981
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BLAN/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=BLAN
+./xmlchange PTS_LON=281.958212
+./xmlchange PTS_LAT=39.033698
diff --git a/cime_config/usermods_dirs/NEON/FATES/BONA/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/BONA/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BONA/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/BONA/shell_commands b/cime_config/usermods_dirs/NEON/FATES/BONA/shell_commands
new file mode 100644
index 0000000000..2a66d148b4
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/BONA/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=BONA
+./xmlchange PTS_LON=212.49806
+./xmlchange PTS_LAT=65.15333
diff --git a/cime_config/usermods_dirs/NEON/FATES/CLBJ/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/CLBJ/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/CLBJ/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/CLBJ/shell_commands b/cime_config/usermods_dirs/NEON/FATES/CLBJ/shell_commands
new file mode 100644
index 0000000000..c1b9154027
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/CLBJ/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=CLBJ
+./xmlchange PTS_LON=262.43275
+./xmlchange PTS_LAT=33.40143
diff --git a/cime_config/usermods_dirs/NEON/FATES/CPER/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/CPER/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/CPER/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/CPER/shell_commands b/cime_config/usermods_dirs/NEON/FATES/CPER/shell_commands
new file mode 100644
index 0000000000..b70b1a46a0
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/CPER/shell_commands
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+./xmlchange NEONSITE=CPER
+./xmlchange PTS_LON=255.25545
+./xmlchange PTS_LAT=40.81297
+if [[ $compset =~ ^HIST ]]; then
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=50
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/DCFS/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/DCFS/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DCFS/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/DCFS/shell_commands b/cime_config/usermods_dirs/NEON/FATES/DCFS/shell_commands
new file mode 100644
index 0000000000..a6cbed64e1
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DCFS/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=DCFS
+./xmlchange PTS_LON=260.88749
+./xmlchange PTS_LAT=47.15919
diff --git a/cime_config/usermods_dirs/NEON/FATES/DEJU/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/DEJU/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DEJU/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/DEJU/shell_commands b/cime_config/usermods_dirs/NEON/FATES/DEJU/shell_commands
new file mode 100644
index 0000000000..fce519d559
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DEJU/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=DEJU
+./xmlchange PTS_LON=214.25235
+./xmlchange PTS_LAT=63.87983
diff --git a/cime_config/usermods_dirs/NEON/FATES/DELA/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/DELA/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DELA/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/DELA/shell_commands b/cime_config/usermods_dirs/NEON/FATES/DELA/shell_commands
new file mode 100644
index 0000000000..f3acbb8fd3
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DELA/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=DELA
+./xmlchange PTS_LON=272.19659
+./xmlchange PTS_LAT=32.54092
diff --git a/cime_config/usermods_dirs/NEON/FATES/DSNY/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/DSNY/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DSNY/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/DSNY/shell_commands b/cime_config/usermods_dirs/NEON/FATES/DSNY/shell_commands
new file mode 100644
index 0000000000..8304c91d48
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/DSNY/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=DSNY
+./xmlchange PTS_LON=278.56606
+./xmlchange PTS_LAT=28.12919
diff --git a/cime_config/usermods_dirs/NEON/FATES/GRSM/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/GRSM/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/GRSM/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/GRSM/shell_commands b/cime_config/usermods_dirs/NEON/FATES/GRSM/shell_commands
new file mode 100644
index 0000000000..e52a633408
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/GRSM/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=GRSM
+./xmlchange PTS_LON=276.49815
+./xmlchange PTS_LAT=35.68839
diff --git a/cime_config/usermods_dirs/NEON/FATES/GUAN/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/GUAN/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/GUAN/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/GUAN/shell_commands b/cime_config/usermods_dirs/NEON/FATES/GUAN/shell_commands
new file mode 100644
index 0000000000..c78bf31f55
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/GUAN/shell_commands
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+./xmlchange NEONSITE=GUAN
+./xmlchange PTS_LON=293.13112
+./xmlchange PTS_LAT=17.96882
+./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/HARV/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/HARV/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/HARV/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/HARV/shell_commands b/cime_config/usermods_dirs/NEON/FATES/HARV/shell_commands
new file mode 100644
index 0000000000..839ccf5d8f
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/HARV/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=HARV
+./xmlchange PTS_LON=287.82438
+./xmlchange PTS_LAT=42.53562
diff --git a/cime_config/usermods_dirs/NEON/FATES/HEAL/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/HEAL/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/HEAL/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/HEAL/shell_commands b/cime_config/usermods_dirs/NEON/FATES/HEAL/shell_commands
new file mode 100644
index 0000000000..21892219e0
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/HEAL/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=HEAL
+./xmlchange PTS_LON=210.78461
+./xmlchange PTS_LAT=63.8798
diff --git a/cime_config/usermods_dirs/NEON/FATES/JERC/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/JERC/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/JERC/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/JERC/shell_commands b/cime_config/usermods_dirs/NEON/FATES/JERC/shell_commands
new file mode 100644
index 0000000000..80f66d23a2
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/JERC/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=JERC
+./xmlchange PTS_LON=275.53353
+./xmlchange PTS_LAT=31.19608
diff --git a/cime_config/usermods_dirs/NEON/FATES/JORN/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/JORN/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/JORN/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/JORN/shell_commands b/cime_config/usermods_dirs/NEON/FATES/JORN/shell_commands
new file mode 100644
index 0000000000..87fc3b8c1e
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/JORN/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=JORN
+./xmlchange PTS_LON=253.15623
+./xmlchange PTS_LAT=32.59052
diff --git a/cime_config/usermods_dirs/NEON/FATES/KONZ/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/KONZ/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/KONZ/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/KONZ/shell_commands b/cime_config/usermods_dirs/NEON/FATES/KONZ/shell_commands
new file mode 100644
index 0000000000..bda370c170
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/KONZ/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=KONZ
+./xmlchange PTS_LON=263.43773
+./xmlchange PTS_LAT=39.1007
diff --git a/cime_config/usermods_dirs/NEON/FATES/LAJA/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/LAJA/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/LAJA/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/LAJA/shell_commands b/cime_config/usermods_dirs/NEON/FATES/LAJA/shell_commands
new file mode 100644
index 0000000000..217216e3ec
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/LAJA/shell_commands
@@ -0,0 +1,14 @@
+#!/bin/bash
+./xmlchange NEONSITE=LAJA
+./xmlchange PTS_LON=292.92392
+./xmlchange PTS_LAT=18.02184
+./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+fi
+
+
diff --git a/cime_config/usermods_dirs/NEON/FATES/LENO/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/LENO/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/LENO/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/LENO/shell_commands b/cime_config/usermods_dirs/NEON/FATES/LENO/shell_commands
new file mode 100644
index 0000000000..06af587292
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/LENO/shell_commands
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+./xmlchange NEONSITE=LENO
+./xmlchange PTS_LON=271.83897
+./xmlchange PTS_LAT=31.8531
+./xmlchange DATM_YR_ALIGN=2021,DATM_YR_START=2021
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2021-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=15
+ fi
+fi
+
diff --git a/cime_config/usermods_dirs/NEON/FATES/MLBS/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/MLBS/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/MLBS/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/MLBS/shell_commands b/cime_config/usermods_dirs/NEON/FATES/MLBS/shell_commands
new file mode 100644
index 0000000000..11ab445450
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/MLBS/shell_commands
@@ -0,0 +1,16 @@
+#!/bin/bash
+./xmlchange NEONSITE=MLBS
+./xmlchange PTS_LON=279.47575
+./xmlchange PTS_LAT=37.37783
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_END=2019
+ # Different default number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2020
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=24
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/MOAB/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/MOAB/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/MOAB/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/MOAB/shell_commands b/cime_config/usermods_dirs/NEON/FATES/MOAB/shell_commands
new file mode 100644
index 0000000000..649fa2eaba
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/MOAB/shell_commands
@@ -0,0 +1,16 @@
+#!/bin/bash
+./xmlchange NEONSITE=MOAB
+./xmlchange PTS_LON=250.61118
+./xmlchange PTS_LAT=38.25136
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_END=2020
+ # Different default number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2021
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=36
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/NIWO/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/NIWO/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/NIWO/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/NIWO/shell_commands b/cime_config/usermods_dirs/NEON/FATES/NIWO/shell_commands
new file mode 100644
index 0000000000..b4f27ea8ed
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/NIWO/shell_commands
@@ -0,0 +1,9 @@
+#!/bin/bash
+./xmlchange NEONSITE=NIWO
+./xmlchange PTS_LON=254.41676
+./xmlchange PTS_LAT=40.05236
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == "NEON" ]]; then
+ ./xmlchange DATM_YR_END=2018
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/NOGP/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/NOGP/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/NOGP/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/NOGP/shell_commands b/cime_config/usermods_dirs/NEON/FATES/NOGP/shell_commands
new file mode 100644
index 0000000000..ad3ef69cd2
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/NOGP/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=NOGP
+./xmlchange PTS_LON=259.08168
+./xmlchange PTS_LAT=46.76846
diff --git a/cime_config/usermods_dirs/NEON/FATES/OAES/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/OAES/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/OAES/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/OAES/shell_commands b/cime_config/usermods_dirs/NEON/FATES/OAES/shell_commands
new file mode 100644
index 0000000000..2a5cfb87e4
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/OAES/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=OAES
+./xmlchange PTS_LON=260.93956000000003
+./xmlchange PTS_LAT=35.41062
diff --git a/cime_config/usermods_dirs/NEON/FATES/ONAQ/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/ONAQ/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/ONAQ/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/ONAQ/shell_commands b/cime_config/usermods_dirs/NEON/FATES/ONAQ/shell_commands
new file mode 100644
index 0000000000..dae5344528
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/ONAQ/shell_commands
@@ -0,0 +1,16 @@
+#!/bin/bash
+./xmlchange NEONSITE=ONAQ
+./xmlchange PTS_LON=247.54755
+./xmlchange PTS_LAT=40.17760
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_END=2019
+ # Different default number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2020
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=24
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/ORNL/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/ORNL/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/ORNL/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/ORNL/shell_commands b/cime_config/usermods_dirs/NEON/FATES/ORNL/shell_commands
new file mode 100644
index 0000000000..5708d3dec5
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/ORNL/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=ORNL
+./xmlchange PTS_LON=275.717412
+./xmlchange PTS_LAT=35.964128
diff --git a/cime_config/usermods_dirs/NEON/FATES/OSBS/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/OSBS/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/OSBS/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/OSBS/shell_commands b/cime_config/usermods_dirs/NEON/FATES/OSBS/shell_commands
new file mode 100644
index 0000000000..385021f98a
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/OSBS/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=OSBS
+./xmlchange PTS_LON=278.00655
+./xmlchange PTS_LAT=29.68819
diff --git a/cime_config/usermods_dirs/NEON/FATES/PUUM/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/PUUM/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/PUUM/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/PUUM/shell_commands b/cime_config/usermods_dirs/NEON/FATES/PUUM/shell_commands
new file mode 100644
index 0000000000..07c4331769
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/PUUM/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=PUUM
+./xmlchange PTS_LON=204.68269
+./xmlchange PTS_LAT=19.55309
diff --git a/cime_config/usermods_dirs/NEON/FATES/README.md b/cime_config/usermods_dirs/NEON/FATES/README.md
new file mode 100644
index 0000000000..dcfcfdf9af
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/README.md
@@ -0,0 +1,10 @@
+# NEON user mods directories for FATES runs
+
+Use these user mods as you would any other user_mods, e.g.:
+
+`./create_newcase --case FATES_ABBY_test --res CLM_USRDAT --compset I1PtClm51Fates --run-unsupported --user-mods-dir /glade/work/$user/CTSM/cime_config/usermods_dirs/NEON/FATES/ABBY`
+
+## Note on crop sites KONA and STER
+
+Currently you cannot run FATES at these sites because FATES does not have crops as of yet. We will add these sites back once this capability is available.
+
diff --git a/cime_config/usermods_dirs/NEON/FATES/RMNP/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/RMNP/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/RMNP/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/RMNP/shell_commands b/cime_config/usermods_dirs/NEON/FATES/RMNP/shell_commands
new file mode 100644
index 0000000000..8dfbf0fa0d
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/RMNP/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=RMNP
+./xmlchange PTS_LON=254.45476
+./xmlchange PTS_LAT=40.27707
diff --git a/cime_config/usermods_dirs/NEON/FATES/SCBI/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/SCBI/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SCBI/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/SCBI/shell_commands b/cime_config/usermods_dirs/NEON/FATES/SCBI/shell_commands
new file mode 100644
index 0000000000..aa42b8022c
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SCBI/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=SCBI
+./xmlchange PTS_LON=281.86235999999997
+./xmlchange PTS_LAT=38.89209
diff --git a/cime_config/usermods_dirs/NEON/FATES/SERC/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/SERC/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SERC/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/SERC/shell_commands b/cime_config/usermods_dirs/NEON/FATES/SERC/shell_commands
new file mode 100644
index 0000000000..1053e2dc17
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SERC/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=SERC
+./xmlchange PTS_LON=283.44115999999997
+./xmlchange PTS_LAT=38.89124
diff --git a/cime_config/usermods_dirs/NEON/FATES/SJER/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/SJER/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SJER/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/SJER/shell_commands b/cime_config/usermods_dirs/NEON/FATES/SJER/shell_commands
new file mode 100644
index 0000000000..ee50f61fa1
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SJER/shell_commands
@@ -0,0 +1,20 @@
+#!/bin/bash
+./xmlchange NEONSITE=SJER
+./xmlchange PTS_LON=240.267
+./xmlchange PTS_LAT=37.107117
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [ $CLM_USRDAT_NAME=='NEON' ]
+then
+ ./xmlchange DATM_YR_START=2019
+ # Different default start date and number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]
+ then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
+
diff --git a/cime_config/usermods_dirs/NEON/FATES/SOAP/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/SOAP/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SOAP/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/SOAP/shell_commands b/cime_config/usermods_dirs/NEON/FATES/SOAP/shell_commands
new file mode 100644
index 0000000000..c10274c047
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SOAP/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=SOAP
+./xmlchange PTS_LON=240.7379
+./xmlchange PTS_LAT=37.03269
diff --git a/cime_config/usermods_dirs/NEON/FATES/SRER/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/SRER/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SRER/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/SRER/shell_commands b/cime_config/usermods_dirs/NEON/FATES/SRER/shell_commands
new file mode 100644
index 0000000000..be1bec52d3
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/SRER/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=SRER
+./xmlchange PTS_LON=249.16451
+./xmlchange PTS_LAT=31.91068
diff --git a/cime_config/usermods_dirs/NEON/FATES/STEI/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/STEI/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/STEI/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/STEI/shell_commands b/cime_config/usermods_dirs/NEON/FATES/STEI/shell_commands
new file mode 100644
index 0000000000..c2aced2c2e
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/STEI/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=STEI
+./xmlchange PTS_LON=270.4112
+./xmlchange PTS_LAT=45.5076
diff --git a/cime_config/usermods_dirs/NEON/FATES/TALL/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/TALL/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TALL/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/TALL/shell_commands b/cime_config/usermods_dirs/NEON/FATES/TALL/shell_commands
new file mode 100644
index 0000000000..1a176ae23f
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TALL/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=TALL
+./xmlchange PTS_LON=272.6059
+./xmlchange PTS_LAT=32.95106
diff --git a/cime_config/usermods_dirs/NEON/FATES/TEAK/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/TEAK/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TEAK/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/TEAK/shell_commands b/cime_config/usermods_dirs/NEON/FATES/TEAK/shell_commands
new file mode 100644
index 0000000000..abac8e9263
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TEAK/shell_commands
@@ -0,0 +1,17 @@
+#!/bin/bash
+./xmlchange NEONSITE=TEAK
+./xmlchange PTS_LON=240.99424199999999
+./xmlchange PTS_LAT=37.006472
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_START=2019
+ # Different default start date and number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/TOOL/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/TOOL/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TOOL/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/TOOL/shell_commands b/cime_config/usermods_dirs/NEON/FATES/TOOL/shell_commands
new file mode 100644
index 0000000000..3c749cde93
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TOOL/shell_commands
@@ -0,0 +1,12 @@
+#!/bin/bash
+./xmlchange NEONSITE=TOOL
+./xmlchange PTS_LON=210.629872
+./xmlchange PTS_LAT=68.66045
+./xmlchange DATM_YR_ALIGN=2020,DATM_YR_START=2020
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2020-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=27
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/TREE/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/TREE/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TREE/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/TREE/shell_commands b/cime_config/usermods_dirs/NEON/FATES/TREE/shell_commands
new file mode 100644
index 0000000000..6d0a4aa1fa
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/TREE/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=TREE
+./xmlchange PTS_LON=270.41252
+./xmlchange PTS_LAT=45.49266
diff --git a/cime_config/usermods_dirs/NEON/FATES/UKFS/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/UKFS/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/UKFS/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/UKFS/shell_commands b/cime_config/usermods_dirs/NEON/FATES/UKFS/shell_commands
new file mode 100644
index 0000000000..7c8d4f8829
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/UKFS/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=UKFS
+./xmlchange PTS_LON=264.79505
+./xmlchange PTS_LAT=39.04168
diff --git a/cime_config/usermods_dirs/NEON/FATES/UNDE/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/UNDE/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/UNDE/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/UNDE/shell_commands b/cime_config/usermods_dirs/NEON/FATES/UNDE/shell_commands
new file mode 100644
index 0000000000..f810e4a76b
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/UNDE/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=UNDE
+./xmlchange PTS_LON=270.462746
+./xmlchange PTS_LAT=46.23391
diff --git a/cime_config/usermods_dirs/NEON/FATES/WOOD/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/WOOD/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/WOOD/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/WOOD/shell_commands b/cime_config/usermods_dirs/NEON/FATES/WOOD/shell_commands
new file mode 100644
index 0000000000..48ff0ef999
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/WOOD/shell_commands
@@ -0,0 +1,3 @@
+./xmlchange NEONSITE=WOOD
+./xmlchange PTS_LON=260.76093000000003
+./xmlchange PTS_LAT=47.12833
diff --git a/cime_config/usermods_dirs/NEON/FATES/WREF/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/WREF/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/WREF/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/WREF/shell_commands b/cime_config/usermods_dirs/NEON/FATES/WREF/shell_commands
new file mode 100644
index 0000000000..77a48ae1c0
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/WREF/shell_commands
@@ -0,0 +1,17 @@
+#!/bin/bash
+./xmlchange NEONSITE=WREF
+./xmlchange PTS_LON=238.04162
+./xmlchange PTS_LAT=45.81637
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ # Different default start date and number of months to run for transient case
+ ./xmlchange DATM_YR_START=2019
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/YELL/include_user_mods b/cime_config/usermods_dirs/NEON/FATES/YELL/include_user_mods
new file mode 100644
index 0000000000..b152996d95
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/YELL/include_user_mods
@@ -0,0 +1 @@
+../defaults
diff --git a/cime_config/usermods_dirs/NEON/FATES/YELL/shell_commands b/cime_config/usermods_dirs/NEON/FATES/YELL/shell_commands
new file mode 100644
index 0000000000..33915b88a1
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/YELL/shell_commands
@@ -0,0 +1,17 @@
+#!/bin/bash
+./xmlchange NEONSITE=YELL
+./xmlchange PTS_LON=249.45803999999998
+./xmlchange PTS_LAT=44.95597
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ # Different default start date and number of months to run for transient case
+ ./xmlchange DATM_YR_START=2019
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/FATES/defaults/shell_commands b/cime_config/usermods_dirs/NEON/FATES/defaults/shell_commands
new file mode 100644
index 0000000000..5bec7332b0
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/defaults/shell_commands
@@ -0,0 +1,43 @@
+#!/bin/bash
+./xmlchange CLM_USRDAT_NAME=NEON
+# CLM_USRDAT_NAME can be set to either NEON or NEON.PRISM
+./xmlchange CCSM_CO2_PPMV=408.83
+# Set data forcing data to future scenario so will have data from 2018 to present-day
+./xmlchange DATM_PRESAERO=SSP3-7.0
+./xmlchange DATM_PRESNDEP=SSP3-7.0
+./xmlchange DATM_PRESO3=SSP3-7.0
+# Explicitly set the MPI library to mpi-serial so won't have the build/run complexity of a full MPI library
+./xmlchange MPILIB=mpi-serial
+# Set years to run forcing data over
+./xmlchange DATM_YR_ALIGN=2018,DATM_YR_END=2021,DATM_YR_START=2018
+#
+# Save some variables that may be used later
+#
+compset=`./xmlquery COMPSET --value`
+CLM_USRDAT_NAME=`./xmlquery CLM_USRDAT_NAME --value`
+TEST=`./xmlquery TEST --value`
+
+# For a transient case run the whole length and don't cycle
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2022
+ ./xmlchange RUN_STARTDATE=2018-01-01
+ # Number of months that can be run for the full transient case
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_OPTION="nmonths"
+ ./xmlchange STOP_N=51
+ fi
+ ./xmlchange CLM_NML_USE_CASE="2018-PD_transient"
+else
+ ./xmlchange CLM_NML_USE_CASE="2018_control"
+fi
+
+# If needed for SP simulations:
+# Does anything need to be set for FATES-SP mode?
+#if [[ $compset =~ ".*CLM[0-9]%.*SP.*" ]]; then
+#fi
+
+
+# Explicitly set PIO Type to NETCDF since this is a single processor case (should already be set this way)
+./xmlchange PIO_TYPENAME=netcdf
+
+./xmlchange NEONVERSION="v2"
diff --git a/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_clm b/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_clm
new file mode 100644
index 0000000000..2a6b4d76d5
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_clm
@@ -0,0 +1,28 @@
+!----------------------------------------------------------------------------------
+! Users should add all user specific namelist changes below in the form of
+! namelist_var = new_namelist_value
+!
+! EXCEPTIONS:
+! Set use_cndv by the compset you use and the CLM_BLDNML_OPTS -dynamic_vegetation setting
+! Set use_vichydro by the compset you use and the CLM_BLDNML_OPTS -vichydro setting
+! Set use_cn by the compset you use and CLM_BLDNML_OPTS -bgc setting
+! Set use_crop by the compset you use and CLM_BLDNML_OPTS -crop setting
+! Set spinup_state by the CLM_BLDNML_OPTS -bgc_spinup setting
+! Set co2_ppmv with CCSM_CO2_PPMV option
+! Set fatmlndfrc with LND_DOMAIN_PATH/LND_DOMAIN_FILE options
+! Set finidat with RUN_REFCASE/RUN_REFDATE/RUN_REFTOD options for hybrid or branch cases
+! (includes $inst_string for multi-ensemble cases)
+! or with CLM_FORCE_COLDSTART to do a cold start
+! or set it with an explicit filename here.
+! Set maxpatch_glcmec with GLC_NEC option
+! Set glc_do_dynglacier with GLC_TWO_WAY_COUPLING env variable
+!----------------------------------------------------------------------------------
+
+flanduse_timeseries = ' ' ! This isn't needed for a non transient case, but will be once we start using transient compsets
+fsurdat = "$DIN_LOC_ROOT/lnd/clm2/surfdata_map/NEON/16PFT_mixed/surfdata_1x1_NEON_${NEONSITE}_hist_16pfts_Irrig_CMIP6_simyr2000_c230120.nc"
+
+! h1 output stream
+hist_fincl2 = 'FATES_AUTORESP','FCEV','FCTR','FGEV','FIRA','FSA','FSH','FATES_GPP','FATES_GPP_PF','H2OSOI',
+ 'SNOW_DEPTH','TBOT','TSOI','SOILC_vr','FATES_NPP','FATES_NPP_PF','FATES_VEGC','FATES_VEGC_PF'
+hist_mfilt(2) = 48
+hist_nhtfrq(2) = 1
diff --git a/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_cpl b/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_cpl
new file mode 100644
index 0000000000..e7f6c90a86
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_cpl
@@ -0,0 +1,20 @@
+!------------------------------------------------------------------------
+! Users should ONLY USE user_nl_cpl to change namelists variables
+! for namelist variables in drv_in (except for the ones below) and
+! any keyword/values in seq_maps.rc
+! Users should add ALL user specific namelist and seq_maps.rc changes below
+! using the following syntax
+! namelist_var = new_namelist_value
+! or
+! mapname = new_map_name
+! For example to change the default value of ocn2atm_fmapname to 'foo' use
+! ocn2atm_fmapname = 'foo'
+!
+! Note that some namelist variables MAY NOT be changed in user_nl_cpl -
+! they are defined in a $CASEROOT xml file and must be changed with
+! xmlchange.
+!
+! For example, rather than set username to 'foo' in user_nl_cpl, call
+! ./xmlchange USER=foo
+!------------------------------------------------------------------------
+orb_iyear = 2018
diff --git a/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_datm_streams b/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_datm_streams
new file mode 100644
index 0000000000..36f1e72b3a
--- /dev/null
+++ b/cime_config/usermods_dirs/NEON/FATES/defaults/user_nl_datm_streams
@@ -0,0 +1,39 @@
+!------------------------------------------------------------------------
+! This file is used to modify datm.streams.xml generated in $RUNDIR
+! Entries should have the form
+! :<= new stream_value>
+! The following are accepted values for an assume streamname of foo
+! foo:meshfile = character string
+! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...)
+! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...)
+! foo:taxmode = one of [cycle, extend, limit]
+! foo:tintalgo = one of [lower,upper,nearest,linear,coszen]
+! foo:readmode = single (only suported mode right now)
+! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none]
+! foo:dtlimit = real (1.5 is default)
+! foo:year_first = integer
+! foo:year_last = integer
+! foo:year_align = integer
+! foo:vectors = one of [none,u:v]
+! foo:lev_dimname: = one of [null,name of level dimenion name]
+! foo:offset = integer
+! As an example:
+! foo:year_first = 1950
+! would change the stream year_first stream_entry to 1950 for the foo stream block
+!------------------------------------------------------------------------
+presaero.SSP3-7.0:datafiles = $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_2018-2030_monthly_0.9x1.25_c210826.nc
+presaero.SSP3-7.0:year_first=2018
+presaero.SSP3-7.0:year_last=2022
+presaero.SSP3-7.0:year_align=2018
+presaero.SSP3-7.0:dtlimit=30
+
+presndep.SSP3-7.0:datafiles = $DIN_LOC_ROOT/lnd/clm2/ndepdata/fndep_clm_f09_g17.CMIP6-SSP3-7.0-WACCM_2018-2030_monthly_c210826.nc
+presndep.SSP3-7.0:year_first=2018
+presndep.SSP3-7.0:year_last=2022
+presndep.SSP3-7.0:year_align=2018
+presndep.SSP3-7.0:dtlimit=30
+
+preso3.SSP3-7.0:year_first=2018
+preso3.SSP3-7.0:year_last=2022
+preso3.SSP3-7.0:year_align=2018
+preso3.SSP3-7.0:dtlimit=30
diff --git a/cime_config/usermods_dirs/NEON/GUAN/shell_commands b/cime_config/usermods_dirs/NEON/GUAN/shell_commands
index ee2eca82d9..c78bf31f55 100644
--- a/cime_config/usermods_dirs/NEON/GUAN/shell_commands
+++ b/cime_config/usermods_dirs/NEON/GUAN/shell_commands
@@ -1,6 +1,13 @@
+#!/bin/bash
+
./xmlchange NEONSITE=GUAN
./xmlchange PTS_LON=293.13112
./xmlchange PTS_LAT=17.96882
-./xmlchange RUN_STARTDATE=2019-01-01
./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
-./xmlchange STOP_N=39
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/KONA/shell_commands b/cime_config/usermods_dirs/NEON/KONA/shell_commands
index c00e220e77..66f274dd36 100644
--- a/cime_config/usermods_dirs/NEON/KONA/shell_commands
+++ b/cime_config/usermods_dirs/NEON/KONA/shell_commands
@@ -1,3 +1,7 @@
./xmlchange NEONSITE=KONA
./xmlchange PTS_LON=263.38956
./xmlchange PTS_LAT=39.10828
+# Setup to run with prognostic crops for this site
+# If you want to explicitly run in SP mode or add other
+# options you'll need to add that after this...
+./xmlchange CLM_BLDNML_OPTS="--bgc bgc --crop"
diff --git a/cime_config/usermods_dirs/NEON/LAJA/shell_commands b/cime_config/usermods_dirs/NEON/LAJA/shell_commands
index 522818a697..217216e3ec 100644
--- a/cime_config/usermods_dirs/NEON/LAJA/shell_commands
+++ b/cime_config/usermods_dirs/NEON/LAJA/shell_commands
@@ -1,8 +1,14 @@
+#!/bin/bash
./xmlchange NEONSITE=LAJA
./xmlchange PTS_LON=292.92392
./xmlchange PTS_LAT=18.02184
-./xmlchange RUN_STARTDATE=2019-01-01
./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
-./xmlchange STOP_N=39
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/LENO/shell_commands b/cime_config/usermods_dirs/NEON/LENO/shell_commands
index 89583ed158..06af587292 100644
--- a/cime_config/usermods_dirs/NEON/LENO/shell_commands
+++ b/cime_config/usermods_dirs/NEON/LENO/shell_commands
@@ -1,7 +1,14 @@
+#!/bin/bash
+
./xmlchange NEONSITE=LENO
./xmlchange PTS_LON=271.83897
./xmlchange PTS_LAT=31.8531
-./xmlchange RUN_STARTDATE=2021-01-01
./xmlchange DATM_YR_ALIGN=2021,DATM_YR_START=2021
-./xmlchange STOP_N=15
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2021-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=15
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/MLBS/shell_commands b/cime_config/usermods_dirs/NEON/MLBS/shell_commands
index 9f70ecd662..11ab445450 100644
--- a/cime_config/usermods_dirs/NEON/MLBS/shell_commands
+++ b/cime_config/usermods_dirs/NEON/MLBS/shell_commands
@@ -1,6 +1,16 @@
+#!/bin/bash
./xmlchange NEONSITE=MLBS
./xmlchange PTS_LON=279.47575
./xmlchange PTS_LAT=37.37783
-./xmlchange STOP_N=24
-./xmlchange DATM_YR_END=2019
-
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_END=2019
+ # Different default number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2020
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=24
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/MOAB/shell_commands b/cime_config/usermods_dirs/NEON/MOAB/shell_commands
index d91513a92c..649fa2eaba 100644
--- a/cime_config/usermods_dirs/NEON/MOAB/shell_commands
+++ b/cime_config/usermods_dirs/NEON/MOAB/shell_commands
@@ -1,8 +1,16 @@
+#!/bin/bash
./xmlchange NEONSITE=MOAB
./xmlchange PTS_LON=250.61118
./xmlchange PTS_LAT=38.25136
-./xmlchange RUN_STARTDATE=2018-01-01
-./xmlchange DATM_YR_ALIGN=2018,DATM_YR_START=2018,DATM_YR_END=2020
-./xmlchange STOP_N=36
-
-
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_END=2020
+ # Different default number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2021
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=36
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/NIWO/shell_commands b/cime_config/usermods_dirs/NEON/NIWO/shell_commands
index a3e73ca343..b4f27ea8ed 100644
--- a/cime_config/usermods_dirs/NEON/NIWO/shell_commands
+++ b/cime_config/usermods_dirs/NEON/NIWO/shell_commands
@@ -1,4 +1,9 @@
+#!/bin/bash
./xmlchange NEONSITE=NIWO
./xmlchange PTS_LON=254.41676
./xmlchange PTS_LAT=40.05236
-./xmlchange DATM_YR_END=2018
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == "NEON" ]]; then
+ ./xmlchange DATM_YR_END=2018
+fi
diff --git a/cime_config/usermods_dirs/NEON/ONAQ/shell_commands b/cime_config/usermods_dirs/NEON/ONAQ/shell_commands
index f2e1640725..dae5344528 100644
--- a/cime_config/usermods_dirs/NEON/ONAQ/shell_commands
+++ b/cime_config/usermods_dirs/NEON/ONAQ/shell_commands
@@ -1,8 +1,16 @@
+#!/bin/bash
./xmlchange NEONSITE=ONAQ
-./xmlchange PTS_LON=276.49815
-./xmlchange PTS_LAT=35.68839
-./xmlchange RUN_STARTDATE=2018-01-01
-./xmlchange DATM_YR_ALIGN=2018,DATM_YR_START=2018,DATM_YR_END=2019
-./xmlchange STOP_N=24
-
-
+./xmlchange PTS_LON=247.54755
+./xmlchange PTS_LAT=40.17760
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_END=2019
+ # Different default number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2020
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=24
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/ORNL/shell_commands b/cime_config/usermods_dirs/NEON/ORNL/shell_commands
index 264d451753..5708d3dec5 100644
--- a/cime_config/usermods_dirs/NEON/ORNL/shell_commands
+++ b/cime_config/usermods_dirs/NEON/ORNL/shell_commands
@@ -1,3 +1,3 @@
./xmlchange NEONSITE=ORNL
-./xmlchange PTS_LON=275.83419000000004
-./xmlchange PTS_LAT=35.57525
+./xmlchange PTS_LON=275.717412
+./xmlchange PTS_LAT=35.964128
diff --git a/cime_config/usermods_dirs/NEON/SJER/shell_commands b/cime_config/usermods_dirs/NEON/SJER/shell_commands
index 9d3ee15a81..ee50f61fa1 100644
--- a/cime_config/usermods_dirs/NEON/SJER/shell_commands
+++ b/cime_config/usermods_dirs/NEON/SJER/shell_commands
@@ -1,8 +1,20 @@
+#!/bin/bash
./xmlchange NEONSITE=SJER
./xmlchange PTS_LON=240.267
./xmlchange PTS_LAT=37.107117
-./xmlchange RUN_STARTDATE=2019-01-01
-./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
-./xmlchange STOP_N=39
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [ $CLM_USRDAT_NAME=='NEON' ]
+then
+ ./xmlchange DATM_YR_START=2019
+ # Different default start date and number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]
+ then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
-#./xmlchange RUN_STARTDATE=2018-09-01
diff --git a/cime_config/usermods_dirs/NEON/STER/shell_commands b/cime_config/usermods_dirs/NEON/STER/shell_commands
index 2c1699fc9c..38b173c309 100644
--- a/cime_config/usermods_dirs/NEON/STER/shell_commands
+++ b/cime_config/usermods_dirs/NEON/STER/shell_commands
@@ -1,3 +1,7 @@
./xmlchange NEONSITE=STER
./xmlchange PTS_LON=256.96992
./xmlchange PTS_LAT=40.45984
+# Setup to run with prognostic crops for this site
+# If you want to explicitly run in SP mode or add other
+# # options you'll need to add that after this...
+./xmlchange CLM_BLDNML_OPTS="--bgc bgc --crop"
diff --git a/cime_config/usermods_dirs/NEON/TEAK/shell_commands b/cime_config/usermods_dirs/NEON/TEAK/shell_commands
index 5309888a12..abac8e9263 100644
--- a/cime_config/usermods_dirs/NEON/TEAK/shell_commands
+++ b/cime_config/usermods_dirs/NEON/TEAK/shell_commands
@@ -1,7 +1,17 @@
+#!/bin/bash
./xmlchange NEONSITE=TEAK
./xmlchange PTS_LON=240.99424199999999
./xmlchange PTS_LAT=37.006472
-./xmlchange RUN_STARTDATE=2019-01-01
-./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
-./xmlchange STOP_N=39
-
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ ./xmlchange DATM_YR_START=2019
+ # Different default start date and number of months to run for transient case
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/TOOL/shell_commands b/cime_config/usermods_dirs/NEON/TOOL/shell_commands
index fc2551390b..3c749cde93 100644
--- a/cime_config/usermods_dirs/NEON/TOOL/shell_commands
+++ b/cime_config/usermods_dirs/NEON/TOOL/shell_commands
@@ -1,8 +1,12 @@
+#!/bin/bash
./xmlchange NEONSITE=TOOL
./xmlchange PTS_LON=210.629872
./xmlchange PTS_LAT=68.66045
-./xmlchange RUN_STARTDATE=2020-01-01
./xmlchange DATM_YR_ALIGN=2020,DATM_YR_START=2020
-./xmlchange STOP_N=27
-
-
+# Different default start date and number of months to run for transient case
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2020-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=27
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/UNDE/shell_commands b/cime_config/usermods_dirs/NEON/UNDE/shell_commands
index 79688e0a8f..f810e4a76b 100644
--- a/cime_config/usermods_dirs/NEON/UNDE/shell_commands
+++ b/cime_config/usermods_dirs/NEON/UNDE/shell_commands
@@ -1,3 +1,3 @@
./xmlchange NEONSITE=UNDE
-./xmlchange PTS_LON=270.6779
-./xmlchange PTS_LAT=46.14103
+./xmlchange PTS_LON=270.462746
+./xmlchange PTS_LAT=46.23391
diff --git a/cime_config/usermods_dirs/NEON/WREF/shell_commands b/cime_config/usermods_dirs/NEON/WREF/shell_commands
index 77a0b750cd..77a48ae1c0 100644
--- a/cime_config/usermods_dirs/NEON/WREF/shell_commands
+++ b/cime_config/usermods_dirs/NEON/WREF/shell_commands
@@ -1,3 +1,17 @@
+#!/bin/bash
./xmlchange NEONSITE=WREF
./xmlchange PTS_LON=238.04162
./xmlchange PTS_LAT=45.81637
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ # Different default start date and number of months to run for transient case
+ ./xmlchange DATM_YR_START=2019
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/YELL/shell_commands b/cime_config/usermods_dirs/NEON/YELL/shell_commands
index c32b11ef7d..33915b88a1 100644
--- a/cime_config/usermods_dirs/NEON/YELL/shell_commands
+++ b/cime_config/usermods_dirs/NEON/YELL/shell_commands
@@ -1,7 +1,17 @@
+#!/bin/bash
./xmlchange NEONSITE=YELL
./xmlchange PTS_LON=249.45803999999998
./xmlchange PTS_LAT=44.95597
-./xmlchange RUN_STARTDATE=2019-01-01
-./xmlchange DATM_YR_ALIGN=2019,DATM_YR_START=2019
-./xmlchange STOP_N=39
-# ./xmlchange RUN_STARTDATE=2018-08-01
+./xmlchange DATM_YR_ALIGN=2019
+# NEON precipitation data for this site is missing so end early
+# If CLM_USRDAT_NAME is NEON.PRISM you can run to the end of the data
+if [[ $CLM_USRDAT_NAME == 'NEON' ]]; then
+ # Different default start date and number of months to run for transient case
+ ./xmlchange DATM_YR_START=2019
+ if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange RUN_STARTDATE=2019-01-01
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_N=39
+ fi
+ fi
+fi
diff --git a/cime_config/usermods_dirs/NEON/defaults/shell_commands b/cime_config/usermods_dirs/NEON/defaults/shell_commands
index 53e445e06a..39810dbc70 100644
--- a/cime_config/usermods_dirs/NEON/defaults/shell_commands
+++ b/cime_config/usermods_dirs/NEON/defaults/shell_commands
@@ -1,16 +1,47 @@
+#!/bin/bash
./xmlchange CLM_USRDAT_NAME=NEON
-./xmlchange RUN_STARTDATE=2018-01-01
-./xmlchange CLM_NML_USE_CASE=1850-2100_SSP3-7.0_transient
+# CLM_USRDAT_NAME can be set to either NEON or NEON.PRISM
./xmlchange CCSM_CO2_PPMV=408.83
+# Set data forcing data to future scenario so will have data from 2018 to present-day
./xmlchange DATM_PRESAERO=SSP3-7.0
./xmlchange DATM_PRESNDEP=SSP3-7.0
./xmlchange DATM_PRESO3=SSP3-7.0
+# Explicitly set the MPI library to mpi-serial so won't have the build/run complexity of a full MPI library
+./xmlchange MPILIB=mpi-serial
+# Set years to run forcing data over
./xmlchange DATM_YR_ALIGN=2018,DATM_YR_END=2021,DATM_YR_START=2018
+#
+# Save some variables that may be used later
+#
+compset=`./xmlquery COMPSET --value`
+CLM_USRDAT_NAME=`./xmlquery CLM_USRDAT_NAME --value`
+TEST=`./xmlquery TEST --value`
+
+# For a transient case run the whole length and don't cycle
+if [[ $compset =~ ^HIST ]]; then
+ ./xmlchange DATM_YR_END=2022
+ ./xmlchange RUN_STARTDATE=2018-01-01
+ # Number of months that can be run for the full transient case
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_OPTION="nmonths"
+ ./xmlchange STOP_N=51
+ fi
+ ./xmlchange CLM_NML_USE_CASE="2018-PD_transient"
+else
+ ./xmlchange CLM_NML_USE_CASE="2018_control"
+fi
+
+# If needed for SP simulations: & set history file variables
+if [[ $compset =~ .*CLM[0-9]+%[^_]*SP.* ]]; then
+ if [[ $TEST != "TRUE" ]]; then
+ ./xmlchange STOP_OPTION=nyears
+ fi
+ ./xmlchange CLM_FORCE_COLDSTART=on
+
+ echo "hist_fincl2 = 'FCEV','FCTR','FGEV','FIRA','FSA','FSH','FPSN','H2OSOI','SNOW_DEPTH','TBOT','TSOI'" >> user_nl_clm
+fi
# Explicitly set PIO Type to NETCDF since this is a single processor case (should already be set this way)
./xmlchange PIO_TYPENAME=netcdf
-# BD:05/06/2022 - The PIO_REARRANGER_LND value - for global runs, PIO_REARRANGER_LND = 1 is ideal
-# and a value of 2 results in slow I/O. For point runs like these, a value of 1 results in a crash (PIO bug, probably),
-# so we explicitly set a value of 2.
-./xmlchange PIO_REARRANGER_LND=2
+./xmlchange NEONVERSION="v2"
diff --git a/cime_config/usermods_dirs/NEON/defaults/user_nl_clm b/cime_config/usermods_dirs/NEON/defaults/user_nl_clm
index 332060dd99..419ff0314c 100644
--- a/cime_config/usermods_dirs/NEON/defaults/user_nl_clm
+++ b/cime_config/usermods_dirs/NEON/defaults/user_nl_clm
@@ -19,19 +19,7 @@
!----------------------------------------------------------------------------------
flanduse_timeseries = ' ' ! This isn't needed for a non transient case, but will be once we start using transient compsets
-fsurdat = "$DIN_LOC_ROOT/lnd/clm2/surfdata_map/NEON/surfdata_hist_78pfts_CMIP6_simyr2000_${NEONSITE}_c211102.nc"
-model_year_align_urbantv = 2018
-stream_year_first_urbantv = 2018
-stream_year_last_urbantv = 2021
-stream_year_first_ndep = 2018
-model_year_align_ndep = 2018
-stream_year_last_ndep = 2021
-model_year_align_popdens = 2018
-stream_year_first_popdens = 2018
-stream_year_last_popdens = 2021
-
-stream_fldfilename_lightng = '$DIN_LOC_ROOT/atm/datm7/NASA_LIS/clmforc.Li_2016_climo1995-2013.360x720.lnfm_Total_NEONarea_c210625.nc'
-!stream_fldfilename_ndep = '$DIN_LOC_ROOT/lnd/clm2/ndepdata/fndep_clm_f09_g17.CMIP6-SSP3-7.0-WACCM_2018-2030_monthly_c210826.nc'
+fsurdat = "$DIN_LOC_ROOT/lnd/clm2/surfdata_map/NEON/surfdata_1x1_NEON_${NEONSITE}_hist_78pfts_CMIP6_simyr2000_c230601.nc"
! h1 output stream
hist_fincl2 = 'AR','ELAI','FCEV','FCTR','FGEV','FIRA','FSA','FSH','GPP','H2OSOI',
diff --git a/cime_config/usermods_dirs/NEON/defaults/user_nl_datm_streams b/cime_config/usermods_dirs/NEON/defaults/user_nl_datm_streams
index 6244eed2fa..bae77db6b5 100644
--- a/cime_config/usermods_dirs/NEON/defaults/user_nl_datm_streams
+++ b/cime_config/usermods_dirs/NEON/defaults/user_nl_datm_streams
@@ -1,16 +1,40 @@
+!------------------------------------------------------------------------
+! This file is used to modify datm.streams.xml generated in $RUNDIR
+! Entries should have the form
+! :<= new stream_value>
+! The following are accepted values for an assume streamname of foo
+! foo:meshfile = character string
+! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...)
+! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...)
+! foo:taxmode = one of [cycle, extend, limit]
+! foo:tintalgo = one of [lower,upper,nearest,linear,coszen]
+! foo:readmode = single (only suported mode right now)
+! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none]
+! foo:dtlimit = real (1.5 is default)
+! foo:year_first = integer
+! foo:year_last = integer
+! foo:year_align = integer
+! foo:vectors = one of [none,u:v]
+! foo:lev_dimname: = one of [null,name of level dimenion name]
+! foo:offset = integer
+! As an example:
+! foo:year_first = 1950
+! would change the stream year_first stream_entry to 1950 for the foo stream block
+!------------------------------------------------------------------------
presaero.SSP3-7.0:datafiles = $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_2018-2030_monthly_0.9x1.25_c210826.nc
presaero.SSP3-7.0:year_first=2018
-presaero.SSP3-7.0:year_last=2030
+presaero.SSP3-7.0:year_last=2022
presaero.SSP3-7.0:year_align=2018
presaero.SSP3-7.0:dtlimit=30
presndep.SSP3-7.0:datafiles = $DIN_LOC_ROOT/lnd/clm2/ndepdata/fndep_clm_f09_g17.CMIP6-SSP3-7.0-WACCM_2018-2030_monthly_c210826.nc
presndep.SSP3-7.0:year_first=2018
-presndep.SSP3-7.0:year_last=2030
+presndep.SSP3-7.0:year_last=2022
presndep.SSP3-7.0:year_align=2018
presndep.SSP3-7.0:dtlimit=30
preso3.SSP3-7.0:year_first=2018
-preso3.SSP3-7.0:year_last=2030
+preso3.SSP3-7.0:year_last=2022
preso3.SSP3-7.0:year_align=2018
preso3.SSP3-7.0:dtlimit=30
+
diff --git a/cime_config/usermods_dirs/fates_nocomp/user_nl_clm b/cime_config/usermods_dirs/fates_nocomp/user_nl_clm
new file mode 100644
index 0000000000..2d93aa0ed0
--- /dev/null
+++ b/cime_config/usermods_dirs/fates_nocomp/user_nl_clm
@@ -0,0 +1,2 @@
+! Turn FATES-NOCOMP mode on
+use_fates_nocomp = .true.
diff --git a/cime_config/usermods_dirs/fates_sp/user_nl_clm b/cime_config/usermods_dirs/fates_sp/user_nl_clm
index cc3d9339e8..093ecd7eda 100644
--- a/cime_config/usermods_dirs/fates_sp/user_nl_clm
+++ b/cime_config/usermods_dirs/fates_sp/user_nl_clm
@@ -6,10 +6,11 @@ use_lch4 = .false.
fates_spitfire_mode = 0
use_fates_fixed_biogeog = .true.
use_fates_nocomp = .true.
+hist_ndens = 1
! Turn off a list of fields that are not needed for FATES-SP mode
-hist_fexcl1 = 'FATES_TRIMMING', 'FATES_COLD_STATUS', 'FATES_DROUGHT_STATUS', 'FATES_GDD', 'FATES_NCHILLDAYS',
- 'FATES_NCOLDDAYS', 'FATES_DAYSINCE_COLDLEAFOFF', 'FATES_DAYSINCE_COLDLEAFON', 'FATES_DAYSINCE_DROUGHTLEAFOFF',
- 'FATES_DAYSINCE_DROUGHTLEAFON', 'FATES_MEANLIQVOL_DROUGHTPHEN', 'FATES_CANOPY_SPREAD', 'FATES_VEGC_PF',
+hist_fexcl1 = 'FATES_TRIMMING', 'FATES_COLD_STATUS', 'FATES_GDD', 'FATES_NCHILLDAYS',
+ 'FATES_NCOLDDAYS', 'FATES_DAYSINCE_COLDLEAFOFF', 'FATES_DAYSINCE_COLDLEAFON',
+ 'FATES_CANOPY_SPREAD', 'FATES_VEGC_PF',
'FATES_STOREC_PF', 'FATES_RECRUITMENT_PF', 'FATES_MORTALITY_PF', 'FATES_PATCHAREA_AP', 'FATES_LAI_AP',
'FATES_CANOPYAREA_AP', 'FATES_NESTEROV_INDEX', 'FATES_IGNITIONS', 'FATES_FDI', 'FATES_ROS', 'FATES_EFFECT_WSPEED',
'FATES_FUELCONSUMED', 'FATES_FIRE_INTENSITY', 'FATES_FIRE_INTENSITY_BURNFRAC', 'FATES_BURNFRAC', 'FATES_FUEL_MEF',
@@ -18,11 +19,10 @@ hist_fexcl1 = 'FATES_TRIMMING', 'FATES_COLD_STATUS', 'FATES_DROUGHT_STATUS', 'FA
'FATES_FUEL_AMOUNT_AP', 'FATES_FUEL_BURNT_BURNFRAC_FC', 'FATES_LITTER_IN', 'FATES_LITTER_OUT', 'FATES_SEED_BANK',
'FATES_SEEDS_IN', 'FATES_LITTER_IN_EL', 'FATES_LITTER_OUT_EL', 'FATES_SEED_BANK_EL', 'FATES_SEEDS_IN_LOCAL_EL',
'FATES_SEEDS_IN_EXTERN_EL', 'FATES_SEED_GERM_EL', 'FATES_SEED_DECAY_EL', 'FATES_STOREC', 'FATES_VEGC',
- 'FATES_SAPWOODC', 'FATES_FROOTC', 'FATES_REPROC', 'FATES_CEFFLUX', 'FATES_STRUCTC', 'FATES_NONSTRUCTC',
+ 'FATES_SAPWOODC', 'FATES_FROOTC', 'FATES_REPROC', 'FATES_STRUCTC', 'FATES_NONSTRUCTC',
'FATES_VEGC_ABOVEGROUND', 'FATES_CANOPY_VEGC', 'FATES_USTORY_VEGC', 'FATES_PRIMARY_PATCHFUSION_ERR',
- 'FATES_DISTURBANCE_RATE_P2P', 'FATES_DISTURBANCE_RATE_P2S', 'FATES_DISTURBANCE_RATE_S2S',
'FATES_DISTURBANCE_RATE_FIRE', 'FATES_DISTURBANCE_RATE_LOGGING', 'FATES_DISTURBANCE_RATE_TREEFALL',
- 'FATES_DISTURBANCE_RATE_POTENTIAL', 'FATES_HARVEST_CARBON_FLUX', 'FATES_GPP_CANOPY', 'FATES_AUTORESP_CANOPY',
+ 'FATES_HARVEST_CARBON_FLUX', 'FATES_GPP_CANOPY', 'FATES_AUTORESP_CANOPY',
'FATES_GPP_USTORY', 'FATES_AUTORESP_USTORY', 'FATES_CROWNAREA_CL', 'FATES_DEMOTION_CARBONFLUX',
'FATES_PROMOTION_CARBONFLUX', 'FATES_MORTALITY_CFLUX_CANOPY', 'FATES_MORTALITY_CFLUX_USTORY',
'FATES_DDBH_CANOPY_SZ', 'FATES_DDBH_USTORY_SZ', 'FATES_BASALAREA_SZ',
diff --git a/cime_config/usermods_dirs/newton_krylov_spinup/user_nl_clm b/cime_config/usermods_dirs/newton_krylov_spinup/user_nl_clm
index 318105a043..75513be601 100644
--- a/cime_config/usermods_dirs/newton_krylov_spinup/user_nl_clm
+++ b/cime_config/usermods_dirs/newton_krylov_spinup/user_nl_clm
@@ -1,8 +1,8 @@
hist_dov2xy = .true.,.false.
hist_nhtfrq = 0,-175200
hist_mfilt = 1,1
-hist_fincl2 = 'FPI_vr', 'K_PAS_SOM', 'K_SLO_SOM', 'K_ACT_SOM',
- 'K_CWD', 'K_CEL_LIT', 'K_LIG_LIT', 'K_MET_LIT',
+hist_fincl2 = 'FPI_vr', 'K_SOM_PAS', 'K_SOM_SLO', 'K_SOM_ACT',
+ 'K_CWD', 'K_LIT_CEL', 'K_LIT_LIG', 'K_LIT_MET',
'CWD_PATHFRAC_L2_vr', 'CWD_RESP_FRAC_L2_vr',
'CWD_PATHFRAC_L3_vr', 'CWD_RESP_FRAC_L3_vr',
'L1_PATHFRAC_S1_vr', 'L1_RESP_FRAC_S1_vr',
diff --git a/cime_config/usermods_dirs/output_bgc/user_nl_clm b/cime_config/usermods_dirs/output_bgc/user_nl_clm
index f7aaa09911..a7c5d098db 100644
--- a/cime_config/usermods_dirs/output_bgc/user_nl_clm
+++ b/cime_config/usermods_dirs/output_bgc/user_nl_clm
@@ -3,8 +3,8 @@
!----------------------------------------------------------------------------------
! h0 stream (monthly average, gridcell-level)
-hist_fexcl1 += 'ACT_SOMC_vr', 'ACT_SOMN_vr', 'SLO_SOMC_vr', 'SLO_SOMN_vr', 'PAS_SOMC_vr', 'PAS_SOMN_vr', 'SOILC_vr','SOILN_vr', 'CWDC_vr', 'MET_LITC_vr', 'CEL_LITC_vr', 'LIG_LITC_vr', 'MET_LITN_vr', 'CEL_LITN_vr', 'LIG_LITN_vr', 'CWDN_vr', 'SMIN_NO3_vr', 'CONC_O2_UNSAT', 'CONC_O2_SAT','SMIN_NH4_vr','SMINN_vr'
-hist_fincl1 += 'LEAFC_TO_LITTER', 'FROOTC_TO_LITTER','MET_LITC_TO_ACT_SOMC','MET_LITN_TO_ACT_SOMN','CEL_LITC_TO_ACT_SOMC', 'CEL_LITN_TO_ACT_SOMN','LIG_LITC_TO_SLO_SOMC','LIG_LITN_TO_SLO_SOMN','DWT_WOOD_PRODUCTC_GAIN_PATCH'
+hist_fexcl1 += 'SOM_ACT_C_vr', 'SOM_ACT_N_vr', 'SOM_SLO_C_vr', 'SOM_SLO_N_vr', 'SOM_PAS_C_vr', 'SOM_PAS_N_vr', 'SOILC_vr','SOILN_vr', 'CWD_C_vr', 'LIT_MET_C_vr', 'LIT_CEL_C_vr', 'LIT_LIG_C_vr', 'LIT_MET_N_vr', 'LIT_CEL_N_vr', 'LIT_LIG_N_vr', 'CWD_N_vr', 'SMIN_NO3_vr', 'CONC_O2_UNSAT', 'CONC_O2_SAT','SMIN_NH4_vr','SMINN_vr'
+hist_fincl1 += 'LEAFC_TO_LITTER', 'FROOTC_TO_LITTER','LIT_MET_C_TO_SOM_ACT_C','LIT_MET_N_TO_SOM_ACT_N','LIT_CEL_C_TO_SOM_ACT_C', 'LIT_CEL_N_TO_SOM_ACT_N','LIT_LIG_C_TO_SOM_SLO_C','LIT_LIG_N_TO_SOM_SLO_N','DWT_WOOD_PRODUCTC_GAIN_PATCH'
! h1 stream (monthly average, finest sub-grid)
hist_fincl2 += 'GPP', 'NPP', 'AGNPP', 'TOTVEGC', 'NPP_NUPTAKE', 'AR', 'HR', 'HTOP'
@@ -14,7 +14,7 @@ hist_fincl2 += 'GPP', 'NPP', 'AGNPP', 'TOTVEGC', 'NPP_NUPTAKE', 'AR', 'HR', 'HTO
hist_fincl3 += 'GPP', 'NPP', 'AR', 'HR', 'DWT_CONV_CFLUX_PATCH', 'WOOD_HARVESTC', 'DWT_WOOD_PRODUCTC_GAIN_PATCH', 'SLASH_HARVESTC', 'COL_FIRE_CLOSS', 'FROOTC:I', 'HTOP'
! h3 stream (yearly average, gridcell-level)
-hist_fincl4 += 'SOILC_vr', 'SOILN_vr', 'CWDC_vr', 'MET_LITC_vr', 'CEL_LITC_vr', 'LIG_LITC_vr', 'MET_LITN_vr', 'CEL_LITN_vr', 'LIG_LITN_vr','CWDN_vr', 'TOTLITC:I', 'TOT_WOODPRODC:I', 'TOTSOMC:I','TOTVEGC:I'
+hist_fincl4 += 'SOILC_vr', 'SOILN_vr', 'CWD_C_vr', 'LIT_MET_C_vr', 'LIT_CEL_C_vr', 'LIT_LIG_C_vr', 'LIT_MET_N_vr', 'LIT_CEL_N_vr', 'LIT_LIG_N_vr','CWD_N_vr', 'TOTLITC:I', 'TOT_WOODPRODC:I', 'TOTSOMC:I','TOTVEGC:I'
! h4 stream (yearly average, landunit-level)
hist_fincl5 += 'TOTSOMC:I', 'TOTSOMC_1m:I', 'TOTECOSYSC:I', 'TOTVEGC:I', 'WOODC:I', 'TOTLITC:I', 'LIVECROOTC:I', 'DEADCROOTC:I', 'FROOTC:I'
diff --git a/cime_config/usermods_dirs/output_sp_exice/include_user_mods b/cime_config/usermods_dirs/output_sp_exice/include_user_mods
new file mode 100644
index 0000000000..786fa907a9
--- /dev/null
+++ b/cime_config/usermods_dirs/output_sp_exice/include_user_mods
@@ -0,0 +1,2 @@
+../_includes/output_base
+../output_sp
diff --git a/cime_config/usermods_dirs/output_sp_exice/user_nl_clm b/cime_config/usermods_dirs/output_sp_exice/user_nl_clm
new file mode 100644
index 0000000000..48e680df67
--- /dev/null
+++ b/cime_config/usermods_dirs/output_sp_exice/user_nl_clm
@@ -0,0 +1,8 @@
+!----------------------------------------------------------------------------------
+! Settings from output_sp_exice
+!----------------------------------------------------------------------------------
+
+! h3 stream (yearly average, gridcell-level)
+! Eyr
+hist_fincl4 += 'EXCESS_ICE'
+
diff --git a/doc/.ChangeLog_template b/doc/.ChangeLog_template
index 63f4628bad..a1170a61cf 100644
--- a/doc/.ChangeLog_template
+++ b/doc/.ChangeLog_template
@@ -27,19 +27,14 @@ Does this tag change answers significantly for any of the following physics conf
[ ] clm4_5
-Bugs fixed or introduced
-------------------------
+Bugs fixed
+----------
[Remove any lines that don't apply. Remove entire section if nothing applies.]
CTSM issues fixed (include CTSM Issue #):
-Externals issues fixed (include issue #):
-
Known bugs introduced in this tag (include issue #):
-Known bugs found since the previous tag (include issue #):
-
-
Notes of particular relevance for users
---------------------------------------
[Remove any lines that don't apply. Remove entire section if nothing applies.]
@@ -101,11 +96,11 @@ infrastructure should be run when appropriate, as described below.
build-namelist tests (if CLMBuildNamelist.pm has changed):
- cheyenne -
+ derecho -
tools-tests (test/tools) (if tools have been changed):
- cheyenne -
+ derecho -
python testing (if python code has changed; see instructions in python/README.md; document testing done):
@@ -119,15 +114,15 @@ infrastructure should be run when appropriate, as described below.
doing their own baseline generation. If you are already running the full aux_clm then you do NOT need to
separately run the clm_pymods test suite, and you can remove the following line.]
- clm_pymods test suite on cheyenne -
+ clm_pymods test suite on derecho -
regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
- cheyenne ----
+ derecho -----
izumi -------
fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
- cheyenne ----
+ derecho -----
izumi -------
any other testing (give details below):
@@ -150,7 +145,9 @@ Changes answers relative to baseline:
- nature of change (roundoff; larger than roundoff/same climate; new climate):
If bitwise differences were observed, how did you show they were no worse
- than roundoff?
+ than roundoff? Roundoff differences means one or more lines of code change results
+ only by roundoff level (because order of operation changes for example). Roundoff
+ changes to state fields usually grow to greater than roundoff as the simulation progresses.
If this tag changes climate describe the run(s) done to evaluate the new
climate (put details of the simulations in the experiment database)
diff --git a/doc/ChangeLog b/doc/ChangeLog
index b6c434f21c..084516e23e 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,4 +1,4865 @@
===============================================================
+Tag name: ctsm5.1.dev167
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Thu 08 Feb 2024 01:56:05 PM MST
+One-line Summary: Delete _FillValue and history from parameter files
+
+Purpose and description of changes
+----------------------------------
+
+Updates parameter files to c240207b. These are the same as c240105 except:
+- Attribute _FillValue has been removed from all variables
+- Global attributes history, history_of_appended_files, and latest_git_log have been removed
+
+
+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.)
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+
+CTSM issues fixed (include CTSM Issue #):
+- Fixes #2347
+
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- OK
+ izumi ------- OK
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+- #2350: Delete _FillValue and history from parameter files (https://github.com/ESCOMP/CTSM/pull/2350)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev166
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310), tking (Teagan King), samrabin (Sam Rabin)
+Date: Wed 24 Jan 2024 05:39:41 PM MST
+One-line Summary: BFB merge tag
+
+Purpose and description of changes
+----------------------------------
+
+ #2315 @TeaganKing Refactoring run_neon for PLUMBER2 part1
+ #2213 @samsrabin Automatically assign high priority items to project 25
+ #2330 @samsrabin Add Izumi version of the aux_clm unit testing
+ #2326 @samsrabin run_sys_tests: Check Python environment for FatesColdTwoStream tests
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #2315
+ Fixes #2213
+ Fixes #2330
+ Fixes #2326
+
+Known bugs introduced in this tag (include issue #):
+ - New feature coming in with #2213 where user will receive email from
+ github when pushing to their remote:
+ "Run failed: .github/workflows/assign-to-project.yml"
+ - New feature that also affects older tags: The izumi FatesColdTwoStream
+ test submitted from ./run_sys_tests will fail at CREATE_NEWCASE unless users
+ introduce "module load lang/python/3.7.0" in their .bash_profile.
+ Longterm solution discussed in #2335. The test also works when submitted
+ manually with ./create_test.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+ #2315 New unit tests for arg_parse and NeonSite
+ #2330 New test in aux_clm that does unit testing on izumi because unit
+ testing does not work on derecho, yet
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ derecho - OK, pylint gives long list of warnings (expected)
+
+ 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: No
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2334
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev165
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310), oleson (Keith Oleson), samrabin (Sam Rabin)
+Date: Fri 19 Jan 2024 06:40:36 PM MST
+One-line Summary: Turn Meier2022, tillage, and residue removal on for ctsm5.1, fix #2212
+
+Purpose and description of changes
+----------------------------------
+
+Answer-changing merge-tag:
+- Turn Meier2022 on for ctsm5.1. Had turned off temporarily while fixing a bug.
+- Bring in Urban answer fix #2212.
+- Turn tillage and residue removal on for ctsm5.1.
+
+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] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+CTSM issues fixed (include CTSM Issue #):
+Fixes #2212
+
+Notes of particular relevance for users
+---------------------------------------
+Changes made to namelist defaults (e.g., changed parameter values):
+- Making Meier2022 the default for ctsm5.1 again.
+- Making tillage low by default for ctsm5.1.
+- Making residue removal 0.5 by default for ctsm5.1.
+
+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 ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES
+
+ [ If a tag changes answers relative to baseline comparison the
+ following should be filled in (otherwise remove this section).
+ And always remove these three lines and parts that don't apply. ]
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: ALL
+ - what platforms/compilers: ALL
+ - nature of change:i
+ clm45 and clm50: larger than roundoff
+ clm51: possibly climate changing
+ Effect of Meier2022 was documented here: https://github.com/NCAR/LMWG_dev/issues/38
+ Effect of tillage and residue removal may require an Answer Changing Tag simulation
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2323
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev164
+Originator(s): rgknox (Ryan Knox)
+Date: Wed 17 Jan 2024 12:38:18 PM MST
+One-line Summary: Compatibility and tests for FATES 2-Stream
+
+Purpose and description of changes
+----------------------------------
+
+This set of changes enables compatibility and testing for FATES two-stream radiation scattering. Two stream radiation is selected by setting the FATES parameter file variable fates_rad_mod = 2. This is an alternative to Norman radiation. The FATES default radiation model will continue to be Norman for the time being, but is expected to transition to two-stream in the near future.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+
+CTSM issues fixed (include CTSM Issue #): 2305
+
+Known bugs introduced in this tag (include issue #): none, but testing was modified to catch a pre-existing bug via test: SMS_D_Ld3.f09_g17.I2000Clm51FatesSpCruRsGs.derecho_gnu.clm-FatesColdSatPhen_prescribed. This has been documented in CTSM issue #2321
+
+Notes of particular relevance for users
+---------------------------------------
+
+Caveats for users (e.g., need to interpolate initial conditions): none
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables): none
+
+Changes made to namelist defaults (e.g., changed parameter values): none
+
+Changes to the datasets (e.g., parameter, surface or initial files): none
+
+Substantial timing or memory changes:
+[e.g., check PFS test in the test suite and look at timings, if you
+expect possible significant timing changes]
+
+If a fates user does opt to use two-stream radiation, they should expect changes in simulation time compared with norman radiation. This difference varies and is somewhere between equal or 20% slower at a maximum. Most tests seemed to be about 10-15% slower for regions with high vegetation demographic diversity.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+NOTE: Be sure to review the steps in README.CHECKLIST.master_tags as well as the coding style in the Developers Guide
+[Remove any lines that don't apply. Remove entire section if nothing applies.]
+
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+
+Changes to tests or testing:
+
+New tests were added to the fates and aux_clm regression suites, with suffix clm-FatesColdTwoStream. One of them uses fixed giogeography and no cross-pft competition.
+
+Testing summary:
+----------------
+
+ regular tests, baseline: ctsm5.1.dev163
+
+ derecho ----- OK
+ izumi ------- OK
+
+ fates tests: baseline: fates-sci.1.70.0_api.32.0.0-ctsm5.1.dev163
+ derecho ----- OK
+ izumi ------- (being run after tag was made)
+
+ any other testing (give details below):
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+
+Answer changes
+--------------
+
+All answers are B4B with baselines mentioned above, except for one fates variable: FATES_RAD_ERROR. This variable was changed to report the maximum of VIS and NIR, instead of just VIS. A follow up set of changes will change the dimension of this variable. This change was expected.
+
+
+Other details
+-------------
+
+This set of changes is synchronized with the new FATES tag: sci.1.71.0_api.33.0.0
+PR: https://github.com/NGEET/fates/pull/1141
+
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev163
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Wed Jan 10 13:03:34 MST 2024
+One-line Summary: Add tillage and residue removal
+
+Purpose and description of changes
+----------------------------------
+
+Adds capability for cropland soil tillage and post-harvest residue removal.
+
+Tillage: This PR brings in the tillage code written by Sam Levis and Michael Graham and used in Graham et al. (2021, ERL, doi:10.1088/1748-9326/abe6c6). Low- and high-intensity tillage here work by increasing the decomposition rate of different soil carbon pools. These "decomposition multipliers" vary based on soil pool and how long it's been since the crop was planted; they are set with new paramfile variables till_decompk_multipliers and mimics_till_decompk_multipliers. Note that tillage is off by default.
+
+Residue removal: Adds a parameter hat represents what fraction of post-harvest crop residues (stems and leaves) should be removed to the crop product pool rather than being transferred to litter.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+
+CTSM issues fixed (include CTSM Issue #):
+- Resolves #112 (https://github.com/ESCOMP/CTSM/issues/112)
+- Contributes to #2310 (https://github.com/ESCOMP/CTSM/issues/2310) by adding NEON tests to expected failure list)
+- run_sys_tests no longer fails on Izumi
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+- Adds parameter tillage_mode with options off (default), low, and high.
+- Adds parameter use_original_tillage_phases (false by default; see Add soil tillage for crops #2040).
+- Adds parameter max_tillage_depth (cm).
+- Adds parameter crop_residue_removal_frac (default 0)
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+- Changes SMS_Ld5.f10_f10_mg37.I1850Clm45BgcCrop.derecho_gnu.clm-crop to use tillage and residue removal; now SMS_Ld5.f10_f10_mg37.I1850Clm45BgcCrop.derecho_gnu.clm-till--clm-remove_residues
+- Changes PEM_Ld1.f10_f10_mg37.I2000Clm51BgcCrop.izumi_intel.clm-crop to use tilllage; now PEM_Ld1.f10_f10_mg37.I2000Clm51BgcCrop.izumi_intel.clm-till
+
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ (any machine) - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- OK
+ izumi ------- PASS
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+- #2311: Add tillage and residue removal (https://github.com/ESCOMP/CTSM/pull/2311)
+which is a combination of:
+- #2040: Add soil tillage for crops (https://github.com/ESCOMP/CTSM/pull/2040)
+- #2297: Add crop residue removal (https://github.com/ESCOMP/CTSM/pull/2297)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev162
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Fri Jan 5 15:57:23 MST 2024
+One-line Summary: Improvements to processing of crop calendar files
+
+Purpose and description of changes
+----------------------------------
+
+In python/ctsm/crop_calendars/, process_ggcmi_shdates.py and regrid_ggcmi_shdates.py are used to convert the raw GGCMI crop calendar files into CTSM-compatible versions. This update fixes some bugs, removes dependencies on the nco utilities, enables the use of surface datasets as template files (in addition to the existing ability to use CTSM output files), and standardizes things for consistency with other CTSM Python tools.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+* Fixes #2167: run_ctsm_py_tests failures at os.getcwd() (https://github.com/ESCOMP/CTSM/issues/2167)
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+These scripts can now be called using the wrapper scripts in tools/crop_calendars/.
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+* Adds test_sys_regrid_ggcmi_shdates and test_unit_utils_import_coord
+* Fixes bugs that were causing failures using `python/run_ctsm_py_tests` even when `make all` was fine.
+
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ (derecho) - PASS
+
+ clm_pymods test suite on derecho - PASS
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+* #2292: Improvements to processing of crop calendar files (v2) (https://github.com/ESCOMP/CTSM/pull/2292)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev161
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Thu Jan 4 09:00:28 MST 2024
+One-line Summary: Refactor 20-year running means of crop GDD accumulation
+
+Purpose and description of changes
+----------------------------------
+
+Three variables track the 20-year running mean of GDD accumulation (base temperatures 0, 8, and 10°C) during the "growing season" (April through September in the Northern Hemisphere, October through March in the Southern Hemisphere). This PR refactors those to use accumulMod, resolving overly-strong weighting of the first few years after a crop becomes active.
+
+
+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] clm5_1
+
+[X] clm5_0
+
+[X] ctsm5_0-nwp
+
+[X] clm4_5
+
+
+Bugs fixed
+----------
+CTSM issues fixed (include CTSM Issue #):
+* Fixes #75.
+
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- DIFF
+ izumi ------- DIFF
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: All crop configurations
+ - what platforms/compilers: All
+ - nature of change (roundoff; larger than roundoff/same climate; new climate): larger than roundoff/same climate
+
+GDD020, GDD820, and GDD1020 will differ, most strongly in the first few years after a crop becomes active. This will have downstream effects on lots of variables, since those are used in determining sowing date and maturity requirements.
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+* #2060: Refactor 20-year running means of crop GDD accumulation (https://github.com/ESCOMP/CTSM/pull/2060)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev160
+Originator(s): glemieux (Gregory Lemieux, LBNL, glemieux@lbl.gov)
+Date: Sat 30 Dec 2023 11:23:47 PM MST
+One-line Summary: FATES landuse version 1
+
+Purpose and description of changes
+----------------------------------
+
+This tag enables FATES to utilize the state and transitions data
+from the Land Use Harmonization (https://luh.umd.edu/) data sets.
+This data has been preprocessed using tooling provided by FATES via
+a separate pull request (FATES#1032). A new module has been added
+to the dyn_subgrid directory that largely adapts the dynHarvest
+module to import and read this minimially processed data, which is
+data is passed to fates.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+CTSM issues fixed (include CTSM Issue #):
+ #1077 -- Read in full LUH2 dataset for use by FATES
+ #2283 -- fates wood product flux not being correctly reported during CBalanceCheck endrun diagnostic output
+
+Notes of particular relevance for users
+---------------------------------------
+Changes made to namelist defaults (e.g., changed parameter values):
+ New namelist item: fluh_timeseries and use_fates_luh
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+ FATES landuse testmod, FatesColdLUH2, added
+
+IMPORTANT NOTE ON BASELINES:
+ FATES baseline tests have a change in namelists because the fluh_timeseries file is listed in the baselines
+ but was removed in a last minute change. Compare to baseline other than that change are exact though.
+
+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 (66 FATES tests differ because of new fates param file)
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- OK
+ izumi ------- PASS
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ derecho ----- OK
+ izumi ------- OK
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: yes, for FATES only
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: FATES
+ - what platforms/compilers: ALL
+ - nature of change (roundoff; larger than roundoff/same climate; new climate): larger than roundoff
+
+ The fates tag update incorporates bug fixes and hydraulic mortality fixes, as well as the
+ restructured disturbance code necessary to accomodate the new landuse transitions capability.
+ As such, small differences were observed in testmods that engaged specific disturbance modes
+ or were long enough to trigger other default disturbances (e.g. fire)
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+ fates: sci.1.69.0_api.31.0.0 -> fates-sci.1.70.0_api.32.0.0
+
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2076
+ https://github.com/NGEET/fates/pull/1040
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev159
+Originator(s): multiple (slevis (Sam Levis), afoster (Adrianna Foster), erik (Erik Kluzek), wwieder (Will Wieder), glemieux (Greg Lemieux), oleson (Keith Oleson), sacks (Bill Sacks), samrabin (Sam Rabin), santos (Sean Patrick Santos))
+Date: Tue 12 Dec 2023 11:10:26 AM MST
+One-line Summary: Various BFB fixes and updates
+
+Purpose and description of changes
+----------------------------------
+#2253 Fix subset_data error (slevis)
+#2271 bfb bug-fix allowing us to make Meier2022 the default; making it
+the default comes in a later tag (slevis)
+#2267 Fix run_neon CIME path import (afoster, erik, wwieder)
+#2075 Add xesmf to the standard python env (glemieux)
+#2229 Fix misplaced if statement and end model run if no-isotope to isotope run with user_init_interp=.false. (oleson, sacks, wwieder)
+#2239 Add comment in LakeHydrology (samrabin, santos)
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+Fixes #2253
+Fixes #2271
+Fixes #2267
+Fixes #2075
+Fixes #2229
+Fixes #2239
+
+Testing summary:
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ 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 ------- PASS
+
+Answer changes
+--------------
+Changes answers relative to baseline: NO
+
+Other details
+-------------
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2253
+ https://github.com/ESCOMP/ctsm/pull/2271
+ https://github.com/ESCOMP/ctsm/pull/2267
+ https://github.com/ESCOMP/ctsm/pull/2075
+ https://github.com/ESCOMP/ctsm/pull/2229
+ https://github.com/ESCOMP/ctsm/pull/2239
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev158
+Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326)
+Date: Thu 07 Dec 2023 10:22:46 PM MST
+One-line Summary: First tag with testing moved to Derecho and working PE-layouts for Derecho
+
+Purpose and description of changes
+----------------------------------
+
+First tag for CTSM working and tested on Derecho. Update CDEPS so that we can run with the NAG compiler.
+Working PE layouts. Changes from CESM3_dev over to main-dev. Testing added for Derecho.
+Do some work to get tools testing working on Derecho, not completed.
+Add Derecho to the README files under tools/modify_input_files and tools/site_and_regional
+Remove some /glade/p references in the code. This is still an issue in the: doc, lilac, tools/mksurfdata_map,
+tools/contrib, tools/mkmapdata directories, and the namelist_defaults_ctsm_tools file.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Resolves Derecho transition: Tests and test infrastructure #1995
+ Resolves Updating Externals for Derecho causes Izumi nag tests to fail #2280
+ Resolves Transient simulation with ne30np4.pg3 fails due to floating point error #2268
+ Resolves Need to move location of DA_multidrv finidat files from /glade/p to /glade/campaign #2282
+ Works on Add support to test/tools/test_driver.sh for Derecho for NEON tools #2276
+
+Notes of particular relevance for users
+---------------------------------------
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ Added clm5_1_cam6 option to LND_TUNING_MODE
+ This is important in order to enable using latest clm5_1 physics with fully coupled cases
+
+Changes made to namelist defaults (e.g., changed parameter values):
+ Make sure there are finidat files for clm5_1 with CAM6 for 1850 and 2000 (from clm5_0 version at f09
+ Make sure ne30np4.pg3 is setup
+ Some adjustments for ne30np4 and ne30np4.pg3 to make sure landuse.timeseries files are correct
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+ Add cesm3_dev test list from the CESM3_dev branch
+ Make sure ne30np4.pg3
+
+ Unit tests fail on Derecho because of ESMCI/ccs_config_cesm#131
+ Derecho tests with DEBUG=T, intel compiler, and mpi-serial fail because of ESMCI/ccs_config_cesm#130
+
+
+Testing summary: regular + fates + ctsm_sci + cesm3_dev
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ derecho - PASS
+
+ 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):
+
+ cheyenne ---- OK
+ derecho ----- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ derecho ----- OK
+ izumi ------- OK
+
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: No, bit-for-bit
+
+Other details
+-------------
+[Remove any lines that don't apply. Remove entire section if nothing applies.]
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): cdeps
+ cdeps -> cdeps1.0.24 (allows to run with NAG compiler)
+
+Pull Requests that document the changes (include PR ids):
+ #2269 -- First tag with testing moved to Derecho and working PE layouts
+(https://github.com/ESCOMP/ctsm/pull)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev157
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Tue Dec 5 09:48:26 MST 2023
+One-line Summary: Update Externals to work on Derecho
+
+Purpose and description of changes
+----------------------------------
+
+Updates Externals.cfg to work on Derecho.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+* Resolves #2217 ("Tags for building CTSM library on Derecho [WRF-CTSM]", https://github.com/ESCOMP/CTSM/issues/2217)
+* Resolves #2090 ("Update to cesm2_3_beta16 externals.", https://github.com/ESCOMP/CTSM/issues/2090)
+
+Known bugs introduced in this tag (include issue #):
+* #2280: Updating Externals for Derecho causes Izumi nag tests to fail (https://github.com/ESCOMP/CTSM/issues/2280)
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+* All Izumi nag tests fail early in the run phase. This should be fixed in the next tag, which will be a more comprehensive Derecho-focused update.
+
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- PASS (except nag)
+
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+* cime: cime6.0.125 -> cime6.0.175
+* cmeps: cmeps0.14.21 -> cmeps0.14.43
+* cdeps: cdeps1.0.13 -> cdeps1.0.23
+* cpl7: cpl77.0.5 -> cpl77.0.7
+* parallelio: pio2_5_10 -> pio2_6_2
+
+Pull Requests that document the changes (include PR ids):
+* #2270: Update Externals.cfg to work on Derecho (https://github.com/ESCOMP/CTSM/pull/2270)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev156
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Thu Nov 30 15:27:18 MST 2023
+One-line Summary: Do not use Meier roughness by default
+
+Purpose and description of changes
+----------------------------------
+
+ctsm5.1.dev155 had turned on Meier2022 surface roughness calculation by default for 5.1 compsets. Several bugs have recently emerged that were not caught by pre-merge testing, so this tag reverts that change. Thus, the ZengWang2007 method is default for all compsets again.
+
+
+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] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+Changes made to namelist defaults (e.g., changed parameter values): 5.1 compsets now use ZengWang2007 method (instead of Meier2022) for roughness calculation.
+
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- DIFF
+ izumi ------- DIFF
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: 5.1 compsets
+ - what platforms/compilers: All
+ - nature of change (roundoff; larger than roundoff/same climate; new climate): new climate
+
+ No climate-evaluating run performed, as this change is reverting part of a commit thats barely a week old.
+
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+* #2273: Do not use Meier roughness by default, even with 5.1. (https://github.com/ESCOMP/CTSM/pull/2273)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev155
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Mon Nov 27 21:16:51 MST 2023
+One-line Summary: Use baset_latvary parameters
+
+Purpose and description of changes
+----------------------------------
+
+Namelist parameters baset_latvary_slope and baset_latvary_intercept were never actually used, with values of 0.4 and 12 being hard-coded in the relevant subroutine instead. This PR fixes that, and also adds unit testing of a refactored function that uses them.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- PASS
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+* #2240: Use baset_latvary parameters (https://github.com/ESCOMP/CTSM/pull/2240)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev154
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Wed Nov 22 09:53:01 MST 2023
+One-line Summary: New params files: Changes for Meier roughness, MIMICS, and SNICAR, and changes to leafcn and k*_nonmyc
+
+Purpose and description of changes
+----------------------------------
+
+This PR (#2258) addresses several issues:
+1) Start using existing new params file for Meier roughness:
+/glade/campaign/cesm/cesmdata/inputdata/lnd/clm2/paramdata/ctsm51_params.RMz0.c231011.nc
+and include bug-fix #2219.
+2) Update forcing heights per #2071.
+3) Update params file for MIMICS per #1845.
+4) Make leafcn for pfts 15 and 16 the same per #2184.
+5) Switch the values of params kc_nonmyc and kn_nonmyc per #2120.
+6) Move SNICAR parameters to ctsm51, clm50, and clm45 params files per #2247.
+
+See #2258 and the above issues for a list of contributors.
+
+
+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] clm5_1
+
+[x] clm5_0
+
+[x] ctsm5_0-nwp
+
+[x] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+Fixes #2219
+Fixes #2071
+Fixes #1845
+Fixes #2184
+Fixes #2120
+Fixes #2247
+
+
+Notes of particular relevance for users
+---------------------------------------
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ SNICAR namelist variable fresh_snw_rds_max moved to the params file.
+
+Changes made to namelist defaults (e.g., changed parameter values):
+ SNICAR namelist variable fresh_snw_rds_max moved to the params file.
+ Pointing to new params files for clm4_5, clm5_0, clm5_1.
+
+Changes to the datasets (e.g., parameter, surface or initial files):
+ New clm5_1 params file with new parameters and with modified values of existing parameters.
+ New clm5_0 and clm4_5 params files with new parameters for SNICAR.
+ ./rimport on the new params files fails with "No space left on device" but the 4 files are safe here:
+ /glade/u/home/slevis/paramfiles/*_params.c231117.nc
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+- Remove clm50 Meier test. Should be clm51 but the compset I1850Clm51BgcNoAnthro does not exist.
+- Remove Meier testmod directory and remove such reference from corresponding tests.
+- Change mimics tests from clm50 to clm51.
+- For details, see the updated testlist_clm.xml file.
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: ALL
+ - what platforms/compilers: ALL
+ - nature of change:
+ Larger than roundoff/same climate?
+ I will post this tag on the Answer changing tags wiki page as "SIGNIFICANT"
+ and will run a simulation and diagnostics to compare against dev145.
+
+ I used the izumi test-suite to perform one bfb sanity test:
+ I backed up my branch to 6dc1966 (before the snicar mods), then I put back the changes of the
+ commit right after snicar (71e174f). Comparing to dev154 (this tag's new baseline),
+ the izumi test-suite passed bfb (12 gnu, 18 intel, and 32 nag tests).
+ Other mods are quite confined and clear, so I will not pursue other sanity tests.
+
+ Changes to answers commit-by-commit in this PR:
+ f9978db and b8c71fa: These two change answers for Meier2022 and, therefore, clm51 only
+ 626f520: Takes out if (z0param_method == 'Meier2022'), so changes answers for all three CLMs
+ 319d194: Changes answers for mimics and, therefore clm51 only (order of ops, so roundoff)
+ 2ee6943: Changes clm51 params file, so affects clm51 only (expect more than roundoff)
+ f185a31: bfb
+ 6dc1966: This git merge escomp/master probably does change answers from previous commit
+ 29ca5ad and 71e174f: Puts snicar params on the params files for all three CLMs; sanity test gave bfb
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2258
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev153
+Originator(s): afoster (Adrianna Foster) and johnpaulalex (John Paul Alex)
+Date: Fri Nov 17 11:53:14 MST 2023
+One-line Summary: Call new FATES-side FatesReadParameters
+
+Purpose and description of changes
+----------------------------------
+
+Have CTSM use the new code path in FATES that allows passing in a `fates_param_reader_type`, which does the actual work reading the parameter files, in lieu of calling CTSM methods.
+
+Also updated NEON usermods to use version 2 data by default, rather than latest.
+
+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.)
+
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+Bugs fixed or introduced
+------------------------
+
+Some progress towards CTSM#2006 and FATES#1076
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates baseline: `fates-sci.1.68.2_api.31.0.0-ctsm5.1.dev153`
+
+
+Answer changes
+--------------
+
+None
+
+
+Other details
+--------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): fates
+
+Pull Requests that document the changes (include PR ids):
+https://github.com/NGEET/fates/pull/1096
+https://github.com/ESCOMP/CTSM/pull/2198
+
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev152
+Originator(s): multiple (tking (Teagan King); slevis (Sam Levis); AdrienDams (Adrien Damseaux); afoster (Adrianna Foster); samrabin (Sam Rabin); ekluzek (Erik Kluzek); wwieder (Will Wieder); sacks (Bill Sacks); a few others listed below)
+Date: Tue Nov 14 17:09:43 MST 2023
+One-line Summary: Mv tools to /python and add tests; add snow_thermal_cond_method; a few fixes / refactors
+
+Purpose and description of changes
+----------------------------------
+
+#2156 tking, slevis
+Move the following scripts to /python/ctsm/site_and_regional
+and make wrapper scripts for them in /tools/site_and_regional:
+- run_neon.py
+- neon_surf_wrapper.py
+- modify_singlept_site_neon.py
+
+Add unit testing for:
+- iso_utils
+- modify_singlept_site_neon
+- neon_surf_wrapper
+- run_neon
+
+Add system testing for:
+- modify_singlept_site_neon
+- run_neon
+
+#2148 Adrien Damseaux (AWI, Germany), Victoria Dutch, Leanne Wake
+Add namelist option snow_thermal_cond_method to select between Jordan (1991) (default) and
+Sturm et al. (1997). Sturm option described for single point runs by Dutch et al. (2022).
+
+#2233 afoster, sacks
+Fix a compiler error (for GNU 13.2) within cropcalStreamMod.
+Simple fix was to change whole-array assignments/references for the starts and ends arrays to specifically
+reference bounds (begp and endp).
+
+#2235 srabin, wwieder
+Refactor ssp_anomaly_forcing script to make it easier to read and more amenable to future development.
+- Adds --output-dir option; default ./anomaly_forcing reproduces previous behavior
+- Makes synonyms for options with hyphens replacing underscores
+
+#2237 srabin
+Add the following fields to restart files:
+- repr_grainc_to_seed_perharv_patch
+- swindow_starts_thisyr_patch
+- swindow_ends_thisyr_patch
+
+#2044 ekluzek
+More confined regular expression for NEON and a few simple fixes.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+Closes #2156 Fixes #1441
+Closes #2148
+Closes #2233 Fixes #2232
+Closes #2235
+Closes #2237 Fixes #2236
+Closes #2044 Fixes #2039 Fixes #2103 Fixes #2028 Fixes #1506 Fixes #1499
+
+Known Issues:
+pylint errors from previous work remain in this tag.
+
+Notes of particular relevance for users
+---------------------------------------
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+#2156 New wrapper scripts don't have .py suffixes.
+#2148 New namelist option snow_thermal_cond_method as described above.
+#2133 None
+#2135 New --output-dir option; default ./anomaly_forcing reproduces previous behavior.
+Also makes synonyms for options with hyphens replacing underscores.
+#2137 None
+#2044 None
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+#2156 Numerous changes were made to include new tests.
+README.md for testing was updated to clarify that arguments should be used.
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ (any machine) - cheyenne OK (pylint suggestions from previous work remain)
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK, the following PASS/FAILs are expected:
+
+PASS ERS_Lm20_Mmpi-serial.1x1_smallvilleIA.I2000Clm50BgcCropQianRs.izumi_gnu.clm-cropMonthlyNoinitial COMPARE_base_rest (UNEXPECTED: expected FAIL)
+FAIL ERS_Lm20_Mmpi-serial.1x1_smallvilleIA.I2000Clm50BgcCropQianRs.izumi_gnu.clm-cropMonthlyNoinitial BASELINE ctsm5.1.dev151: DIFF
+
+FAIL SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm51Bgc.izumi_nag.clm-default--clm-NEON-NIWO BASELINE ctsm5.1.dev151: DIFF
+FAIL SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm51Bgc.izumi_nag.clm-NEON-MOAB--clm-PRISM BASELINE ctsm5.1.dev151: DIFF
+
+
+Answer changes
+--------------
+Changes answers relative to baseline:
+#2156 NO
+#2148 NO
+#2233 NO
+#2235 NO, adds attributes to write_climo files' dimension variables
+#2237 ONLY Smallville "no initial" restarts; specifically, this previously
+failing (COMPARE_base_rest) aux_clm test
+ERS_Lm20_Mmpi-serial.1x1_smallvilleIA.I2000Clm50BgcCropQianRs.izumi_gnu.clm-cropMonthlyNoinitial
+now differs from the baseline as follows:
+ SUMMARY of cprnc:
+ A total number of 76 fields were compared
+ and 3 had differences in fill patterns
+ A total number of 2 fields could not be analyzed
+ diff_test: the two files seem to be DIFFERENT
+#2044 ONLY the NEON tests listed above due to the one-line change in
+cime_config/usermods_dirs/NEON/defaults/shell_commands in #2044
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2156
+ https://github.com/ESCOMP/ctsm/pull/2148
+ https://github.com/ESCOMP/ctsm/pull/2233
+ https://github.com/ESCOMP/ctsm/pull/2235
+ https://github.com/ESCOMP/ctsm/pull/2237
+ https://github.com/ESCOMP/ctsm/pull/2044
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev151
+Originator(s): rgknox (Ryan Knox,LAWRENCE BERKELEY NATIONAL LABORATORY,510-495-2153)
+Date: Sat Nov 11 16:53:01 MST 2023
+One-line Summary: Fixes to FATES long run restarts
+
+Purpose and description of changes
+----------------------------------
+
+This is a set of changes that enables exact restart tests to pass with FATES, for
+ longer periods, particularly those that have elapsed over a year.
+ We removed calls that were incrementing, uncecessary calls, and added key new
+ variables to the restart file (such as the leaf layer carbon balance vector).
+
+Collaborators: @mvdebolskiy, @mvertens, @glemieux, @ekluzek, @ckoven, @rosiealice
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+No changes to scientifically-supported configurations.
+
+Bugs fixed or introduced
+------------------------
+
+Fixes: FATES#1051 https://github.com/NGEET/fates/issues/1051
+
+Notes of particular relevance for users
+---------------------------------------
+
+This set of changes is introduced, while there is a known test failure in:
+ERS_Lm20_Mmpi-serial.1x1_smallvilleIA.I2000Clm50BgcCropQianRs.izumi_gnu.clm-cropMonthlyNoinitial
+
+This is documented in issue: 2236 and a fix is slated for integration. The nature of the changes
+ in this PR where obviously orthogonal to the issue.
+
+Substantial timing or memory changes: None
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+A new test was added to aux_clm and fates test suites. The walltime for this test
+ was 29 minutes. This is an important new test for FATES because it is the
+ first gridded test that spans significantly over a year (and passes). Various test
+ configurations were explored to find a gridded test that completed 25 months
+ with some attempt at expedience in walltime. A walltime
+ allowance of 60 minutes is set in the test. Here is the test:
+ ERS_P144x1_Lm25.f10_f10_mg37.I2000Clm51Fates clm-FatesColdNoComp
+
+
+Testing summary:
+----------------
+ regular tests:
+
+ cheyenne ---- ok
+ izumi ------- ok
+
+Answer changes
+--------------
+
+No answer changes
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): fates API30
+
+Pull Requests that document the changes (include PR ids):
+
+https://github.com/ESCOMP/CTSM/pull/2199
+https://github.com/NGEET/fates/pull/1098
+
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev150
+Originator(s): rgknox (Ryan Knox,LAWRENCE BERKELEY NATIONAL LABORATORY,510-495-2153)
+Date: Mon Nov 6 14:12:37 MST 2023
+One-line Summary: FATES API fix to support future fates npp-fixation coupling, and urgent coupling fixes with E3SM.
+
+Purpose and description of changes
+----------------------------------
+
+This set of changes accomodates an API change on the FATES side of the code. Those changes are needed
+to accomodate a bug-fix in E3SM. These changes will also accomodate correct coupling with free-living nitrogen
+fixation when it is enabled in clm-fates.
+
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+none
+
+Bugs fixed or introduced
+------------------------
+
+Supports fixes FATES issues:
+https://github.com/NGEET/fates/issues/1113
+https://github.com/NGEET/fates/issues/1106
+
+CTSM issues fixed (include CTSM Issue #): none
+
+Known bugs introduced in this tag (include issue #):
+
+Notes of particular relevance for users
+---------------------------------------
+
+none
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+This set of changes is introduced, while there is a known test failure in:
+ERS_Lm20_Mmpi-serial.1x1_smallvilleIA.I2000Clm50BgcCropQianRs.izumi_gnu.clm-cropMonthlyNoinitial
+
+This is documented in issue: 2236 and a fix is slated for integration. The nature of the changes
+in this PR where obviously orthogonal to the issue.
+
+Changes to tests or testing: none
+
+
+Testing summary:
+----------------
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- ok
+ izumi ------- ok
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- ok
+
+
+Answer changes
+--------------
+
+no answer changes
+
+Other details
+-------------
+
+none
+
+Pull Requests that document the changes (include PR ids):
+
+https://github.com/ESCOMP/CTSM/pull/2231
+
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev149
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Fri Nov 3 19:52:44 MDT 2023
+One-line Summary: Rearrange leaf/stem "harvest" and fix soil gas diffusivity
+
+Purpose and description of changes
+----------------------------------
+
+1. Rearranges the calculation of how much leaf and livestem C and N goes to biofuels vs. litter, in anticipation of adding crop residue removal. Also makes the affected subroutine easier to read.
+2. Resolves two bugs in the calculation of diffusion in SoilBiogeochemNitrifDenitrif(). Also does some rearranging and renaming to improve clarity.
+3. Includes unrelated documentation updates from Documentation Week Oct. 2023.
+
+
+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.)
+
+[X] clm5_1
+
+[X] clm5_0
+
+[X] ctsm5_0-nwp
+
+[X] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+* Resolves #1990: Problems about the soil gas diffusivity in methane code and nitrification-denitrification mod (https://github.com/ESCOMP/CTSM/issues/1990)
+
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- DIFF
+ izumi ------- DIFF
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: virtually all
+ - what platforms/compilers: cheyenne and izumi; intel, gnu, and nag
+ - nature of change (roundoff; larger than roundoff/same climate; new climate): larger than roundoff/same climate
+
+ If bitwise differences were observed, how did you show they were no worse
+ than roundoff? Roundoff differences means one or more lines of code change results
+ only by roundoff level (because order of operation changes for example). Roundoff
+ changes to state fields usually grow to greater than roundoff as the simulation progresses.
+
+ * Roundoff-level differences were observed for the rearrangement of leaf/stem "harvest" code.
+ * Notable differences were observed for the soil gas diffusivity bugfix, but only for output variable diffus.
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+* #2154: Rearrange calculation of leaf/livestem C and N to biofuels/litter (https://github.com/ESCOMP/CTSM/pull/2154)
+* #2157: Soil gas diffusivity bugfix (https://github.com/ESCOMP/CTSM/pull/2157)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev148
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Fri Nov 3 07:56:43 MDT 2023
+One-line Summary: Add GRAINN outputs
+
+Purpose and description of changes
+----------------------------------
+
+In response to a user request for GRAINN_TO_FOOD outputs, this adds *_N_TO_FOOD(_ANN) and *_N_TO_SEED(_ANN) outputs for reproductive N pools. These are off by default, unlike their C counterparts. Note that the results are not scientifically supported, and tests have revealed unrealistic values. (Also adds GRAINC_TO_SEED_ANN output.)
+
+
+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.)
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+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):
+
+ cheyenne ---- OK (with some fieldlist diffs)
+ izumi ------- PASS (with some fieldlist diffs)
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+* #2074 (https://github.com/ESCOMP/CTSM/pull/2074)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev147
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Mon Oct 30 16:53:20 MDT 2023
+One-line Summary: Add sowing window input files
+
+Purpose and description of changes
+----------------------------------
+
+Previously, one could run crops with either (a) sowing windows defined by the hemisphere-specific start and end dates on the paramfile or (b) prescribed sowing dates specified by input file stream_fldFileName_sdate. This PR replaces the latter with two new input files, stream_fldFileName_swindow_start and stream_fldFileName_swindow_end.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+* Replaces input file stream_fldfilename_sdate (prescribed sowing date) with stream_fldFileName_swindow_start (start of sowing window) and stream_fldFileName_swindow_end (end of sowing window).
+* Any gridcell with sowing window start == end will experience prescribed sowing, matching previous behavior with stream_fldfilename_sdate.
+* Setting new parameter allow_invalid_swindow_inputs to .true. makes it so that gridcell-crops without values in provided sowing window files will fall back to paramfile sowing windows. Otherwise, such cells will cause an error.
+
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK (some diffs in field lists)
+ izumi ------- OK (some diffs in field lists)
+
+ any other testing (give details below):
+ * RXCROPMATURITY test passes.
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+* #2193 (https://github.com/ESCOMP/CTSM/pull/2193)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev146
+Originator(s): glemieux (Gregory Lemieux, LBNL, glemieux@lbl.gov)
+Date: Tue Oct 24 20:13:17 MDT 2023
+One-line Summary: FATES cross-grid seed dispersal
+
+Purpose and description of changes
+----------------------------------
+
+This PR enables FATES to disperse seeds across neighboring grid cells using MPI.
+The API update includes calls to new fates dispersal procedures. There are
+four parameters that are utilized to control the dispersal kernel, although
+these were introduced in ctsm5.1.dev130 so no new default FATES parameter file
+is necessary with this update. A new namelist parameter has been added to
+enable the use of the seed dispersal mode.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+Known bugs introduced in this tag (include issue #):
+- ESCOMP/CTSM#1089 (Cross-grid seed dispersal mechanism is not b4b for PE layout changes)
+
+Notes of particular relevance for users
+---------------------------------------
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+- New namelist option, fates_seeddisp_cadence, added. This option Setting the switch
+value to zero turns off dispersal. Setting the switch to 1, 2, or 3 sets the dispersal
+cadence to daily, monthly or yearly.
+
+Substantial timing or memory changes:
+- Users should be careful to limit the maximum dispersal distance parameter,
+fates_seed_dispersal_max_dist, to a reasonable value based on the gridcell
+resolution used. Using a very large value will increase the memory requirements
+to store the gridcell neighborhood information.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+- This PR introduces MPI calls to subroutines that are called by clm_driver.
+Comments have been provided in code to make future developers aware of these
+calls so as to avoid moving them into OpenMP threaded regions.
+
+Changes to tests or testing:
+- Two new testmods have been added into the fates suite to test seed
+dispersal. One of the tests is to track issue CTSM#1089 which was introduced
+with this PR.
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- PASS
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: Only fates testmods in aux_clm are
+answer changing due to science updates associated with externals update.
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+- fates: sci.1.67.2_api.27.0.0 -> sci.1.68.0_api.28.0.0
+
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/2077
+https://github.com/NGEET/fates/pull/1005
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev145
+Originator(s): @cenlinhe (Cenlin He,UCAR/RAL), slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Thu Oct 19 14:34:25 MDT 2023
+One-line Summary: SNICAR snow albedo scheme updates
+
+Purpose and description of changes
+----------------------------------
+
+ Notes copied here from the PR #1861:
+
+ A few substantial changes in the SNICAR module for the following updated snow
+ albedo calculation features:
+ - Updated ice optical properties from Flanner et al. (2021), with multiple types
+ for ice refractive indices.
+ - Updated aerosol optical properties from Flanner et al. (2021) with multiple
+ dust types & new BC and OC optics.
+ - Updated downward solar spectra from Flanner et al. (2021) for multiple
+ condition types.
+ - More accurate radiative transfer solver (adding-doubling) from Dang et al. (2019).
+ - Nonspherical snow grain scheme from He et al. (2017).
+ - BC-snow internal mixing scheme from He et al. (2017).
+ - Dust-snow internal mixing scheme from He et al. (2019).
+ - Hyperspectral (480-band, 10-nm spectral res) capability with all the above features.
+ - New namelist controls for aerosol in snow and additional snow albedo
+ diagnostic output variables.
+
+ Specific notes
+ - Code contributors: Cenlin He (NCAR/RAL) with advice from
+ Dave Lawrence (NCAR/CGD) and Mark Flanner (UMich).
+ - The manuscript to report this update is
+ Cenlin He, Mark Flanner, David M Lawrence, Yu Gu: New features and
+ enhancements in Community Land Model (CLM5) snow albedo modeling: description,
+ sensitivity, and evaluation. Authorea. June 08, 2023.
+ DOI:10.22541/essoar.168626390.01530324/v1
+ - These updates will change the snow and surface albedo results along with
+ other surface fluxes changes.
+ - There are a few new namelist options related to SNICAR scheme added to the
+ namelist control.
+
+
+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] clm5_1
+
+[X] clm5_0
+
+[X] ctsm5_0-nwp
+
+[X] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (all three unrelated to this PR):
+Fixes #2173
+Fixes #2107
+Fixes #2129
+
+Notes of particular relevance for users
+---------------------------------------
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ New namelist variables:
+ snicar_numrad_snw = 5 or 480 wavelength bands, default 5
+ snicar_solarspec, default "mid_latitude_winter" among six available options
+ snicar_dust_optics, default "sahara" among three avail. options
+ snicar_snw_shape, default "hexagonal_plate" among fourn avail. options
+ snicar_use_aerosol, default .true.
+ snicar_snobc_intmix and snicar_snodst_intmix, default .false. means do not
+ activate bc-snow and dust-snow internal mixing
+
+ do_sno_oc, default .false., already appeared in previous code but in caps
+ use_snicar_frc, default .false., existed before
+ fsnowoptics now points to an updated 5-band file and gives the option for a
+ 480-band file
+
+Substantial timing or memory changes:
+[e.g., check PFS test in the test suite and look at timings, if you
+expect possible significant timing changes]
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+ YES
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: All
+ - what platforms/compilers: All
+ - nature of change: larger than roundoff; new climate?
+
+ Namelist defaults are such that phys="clm5.0" and phys="clm4.5" give different
+ answers only due to the changed fsnowoptics file.
+ Namelist defaults are such that phys="clm5.1" changes answers as a result of
+ new parameterizations.
+
+ If this tag changes climate, I will document such information on
+ https://github.com/ESCOMP/CTSM/wiki/Answer-changing-tags
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/1861
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev144
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Thu Oct 19 13:30:02 MDT 2023
+One-line Summary: Remove a deprecated shr_mpi_bcast call
+
+Purpose and description of changes
+----------------------------------
+
+Removes a use of the deprecated shr_mpi_mod, replacing with ESMF_VMBroadcast. In addition, since the last tag, some minor documentation changes have been made.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here: Compared ctsm5.1.dev142 to a version of this branch (1f39800e1) with ctsm5.1.dev142 merged in.
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: No
+
+Other details
+-------------
+[Remove any lines that don't apply. Remove entire section if nothing applies.]
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+
+Pull Requests that document the changes (include PR ids):
+* #1991 (https://github.com/ESCOMP/CTSM/pull/1991)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev143
+Originator(s): rgknox (Ryan Knox,LAWRENCE BERKELEY NATIONAL LABORATORY,510-495-)
+Date: Fri Oct 13 08:53:38 MDT 2023
+One-line Summary: Zeroing of wood product fluxes on fates columns
+
+Purpose and description of changes
+----------------------------------
+
+This is a small change that initializes wood product fluxes on fates columns to zero. These
+products are otherwise zero'd in a p2c() routine that is incompatible with fates. When
+wood product fluxes become available via fates, these routines will be updated. These fluxes
+were previously left as uninitialized, which was causing math issues on some compilers.
+
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+There are no changes to scientifically-supported configurations.
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+Fixes CTSM issue 2165
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+
+No caveats, no bugs, no issues of relevance.
+
+No noticable timing changes.
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+None
+
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- PASS
+
+ Compared against baseline: ctsm5.1.dev142
+
+
+Answer changes
+--------------
+
+Answer changes only on FATES tests, and only on the specific wood product fluxes modified. These values
+are now zeros, instead of being uninitialized. Everything else is b4b.
+
+
+Other details
+-------------
+
+No other details.
+
+Pull Requests that document the changes (include PR ids):
+ #2168 -- GRU update for FATES
+ #2134 -- Update to documentation for Meier et al. (2022) roughness length parameterization
+ https://github.com/ESCOMP/CTSM/pull
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev142
+Originator(s): samrabin (Sam Rabin, UCAR/TSS, samrabin@ucar.edu)
+Date: Tue Sep 19 11:30:22 MDT 2023
+One-line Summary: Merge 5 bit-for-bit pull requests
+
+Purpose and description of changes
+----------------------------------
+
+Merge 5 bit-for-bit pull requests; see "Other details."
+
+
+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.)
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+* Add unit test for making fsurdat with all crops everywhere (#2079)
+* Rework master_list_(no)?fates.rst? (#2083)
+* conda run -n can fail if a conda environment is already active (#2109)
+* conda fails to load for SystemTests (#2111)
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+* FSURDATMODIFYCTSM system test should now work for everyone.
+
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ cheyenne - PASS
+ clm_pymods test suite on cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+* Add system and unit tests for making fsurdat with all crops everywhere (#2081)
+* Rework master_list* files etc. (#2087)
+* Fixes to methane Tech Note (#2091)
+* Add is_doy_in_interval() function (#2158)
+* Avoid using subprocess.run() in FSURDATMODIFYCTSM (#2125)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev141
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Wed Sep 13 13:58:04 MDT 2023
+One-line Summary: Change small snocan to zero
+
+Purpose and description of changes
+----------------------------------
+
+ Issues #2041 and #2048 discuss and resolve a test failure in the ctsm5.2
+ branch. The failure goes away when we reset small snocan to zero.
+
+ Bill Sacks recommended merging this change in ctsm5.1 and then updating
+ the ctsm5.2 branch to the latest ctsm5.1.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #2041
+ Fixes #2048
+
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+ Yes
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: All
+ - what platforms/compilers: All
+ - nature of change: roundoff
+
+ The answer changes are expected to be roundoff-level because the code change
+ just truncates roundoff-level greater-than-zero states to exactly zero for
+ snocan that most likely needed to be zero anyway.
+
+ The answer changes grow to greater than roundoff, but the
+ cprnc.out file from a 20-year izumi test-suite case does not contain
+ differences of concerning magnitude.
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2053
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev140
+Originator(s): afoster (Adrianna Foster)
+Date: Tue Sep 12 14:47:06 MDT 2023
+One-line Summary: add lai_streams capability for FATES
+
+Purpose and description of changes
+----------------------------------
+
+Removed checks in clm_driver and CLMBuildNamelist.pm so that now FATES can run when use_lai_streams=.true.
+
+I also had to modify the init in cpl/share_esmf/laiStreamMod to allocate the g_to_ig array in the lai_init method (rather than in the lai_advance method. This was required because SatellitePhenology is called in clim_initializedMod in FATES cases (here). This happens before lai_advance is ever called so at that point the g_to_ig array was not yet allocated. Moving the allocation/initialization to the lai_init method fixes this.
+
+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.)
+
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #): #1722 - Should be able to use lai streams with FATES-SP mode
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+build-namelist tests (if CLMBuildNamelist.pm has changed): added tests to make sure use_lai_streams failed correctly
+
+Changes to tests or testing: Added a test for lai_streams with FATES
+
+Testing summary:
+----------------
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: None
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): fates
+
+Pull Requests that document the changes (include PR ids): #2054
+(https://github.com/ESCOMP/ctsm/pull)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev139
+Originator(s): slevis (Samuel Levis)
+Date: Fri Aug 25 16:47:45 MDT 2023
+One-line Summary: Fix problems uncovered by nag -nan tests
+
+Purpose and description of changes
+----------------------------------
+
+ Fix problems uncovered by adding the -nan compilation flag for the Nag
+ compiler.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+ Makes progress on issue #1994 (same title)
+
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- PASS
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: No
+
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2051
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev138
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Fri Aug 25 14:44:22 MDT 2023
+One-line Summary: Refactor max_patch_per_col and maxsoil_patches loops
+
+Purpose and description of changes
+----------------------------------
+
+Refactor such loops for clearer and more efficient code, as recommended in
+issue #2025.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+Fixes #2025 "Refactor loops that use max_patch_per_col?"
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+Changes answers relative to baseline: No
+
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2056
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev137
+Originator(s): Ronny Meier, slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Tue Aug 22 14:34:53 MDT 2023
+One-line Summary: Surface roughness modifications
+
+Purpose and description of changes
+----------------------------------
+
+Surface roughness (z0) modifications that appear in this publication:
+https://doi.org/10.5194/gmd-15-2365-2022
+
+When changing the namelist input z0param_method from ZengWang2007 (default)
+to Meier2022 the following modifications are activated:
+
+- A new parameterization of the vegetation surface roughness based on
+Raupach (1992) with optimized parameters to match the data collected in
+Hu et al. (2020) for different types of vegetation. This requires several new
+PFT-specific input parameters in the parameter file.
+- A spatially explicit z0m input field for bare soil based on the data of
+Prigent et al. (2005). This may be activated specifically by the user through
+the namelist input use_z0mg_2d. This requires a new input variable in the
+fsurdat file.
+- The parameterization of z0m for snow based on accumulated snow melt as
+proposed in Brock et al. (2006). This may be activated specifically by the
+user through the namelist input use_z0m_snowmelt.
+- The parameterization of Yang et al. (2008) for z0h and z0q over bare soil,
+snow, and glaciers.
+- The study in GMD also proposes new globally constant values for the
+z0m of bare soil, snow, and ice. To "activate" those the parameter file needs
+to be changed at the moment. The original and modified parameter files and
+fsurdat files will be shared by ftp.
+
+Open issues/questions (discussed with @ekluzek, @dlawrenncar, @olyson):
+
+- How to incorporate the data of Prigent et al. (2005) in the surfdata
+generation. I will write an email about this to Catherine Prigent.
+- One statement marked in CanopyFluxesMod should probably be changed when
+using Meier2022 (i.e., Yang et al. (2008) formulation should be used instead
+of Zeng and Dickinson (1998)).
+- At the moment one needs to change the parameter file to switch between the
+original and proposed globally constant z0m values for bare soil, snow, and
+ice. This is obviously not very user friendly and prone to mistakes.
+- The introduction of Yang et al. (2008) frequently results in z0h and z0q
+larger than z0m. This is only rarely observed in the field and in contradiction
+to the theory that z0h and z0q should be smaller because heat and water vapor
+need to be transported through molecular diffusion in the surface sublayer.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+Fixes #1316
+Fixes #1596
+
+Notes of particular relevance for users
+---------------------------------------
+Details already discussed in the description above.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+New tests are in place for this new code.
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+Changes answers relative to baseline:
+ No, unless user chooses to run in non-default Meier2022 mode.
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2045
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev136
+Originator(s): jedwards (Jim Edwards), sacks (Bill Sacks)
+Date: Tue Aug 22 13:10:28 MDT 2023
+One-line Summary: Change order of history fields to improve performance on derecho
+
+Purpose and description of changes
+----------------------------------
+
+Instead of just ordering history fields alphabetically, order them first
+by the name of their level dimension (with fields without a level
+dimension appearing first), then alphabetically within a given level
+dimension. This changed ordering gives a significant performance
+improvement especially noticeable on lustre file systems such as on
+derecho.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Notes of particular relevance for users
+---------------------------------------
+Caveats for users (e.g., need to interpolate initial conditions):
+- History fields will now appear in a different order from tools like
+ ncdump, etc.
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ In addition to expected fails, the test
+ FSURDATMODIFYCTSM_D_Mmpi-serial_Ld1.5x5_amazon.I2000Clm50SpRs.cheyenne_intel
+ also failed as in https://github.com/ESCOMP/CTSM/issues/2111
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: NO
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/2114
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev135
+Originator(s): slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Mon Aug 21 15:06:35 MDT 2023
+One-line Summary: Rename hist fields to track them down more easily
+
+Purpose and description of changes
+----------------------------------
+
+ Renaming history fields to make easier to find in lists, e.g. when
+ using ncview. For example, litter fields like MET_LIT and STR_LIT
+ will be LIT_MET and LIT_STR.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #2095
+
+
+Testing summary:
+----------------
+[Remove any lines that don't apply.]
+
+ [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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ any other testing (give details below):
+ Sam L. ran the LMWG diag. pkg and found only one plot affected by this
+ PR's changes. In particular, set 6 CWD_C, which was CWDC
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+ No. Field lists differ. In some tests, the namelists differ.
+
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2106
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev134
+Originator(s): rgknox (Ryan Knox,LBNL EESA), erik (Erik Kluzek,UCAR/TSS,303-497-1326)
+Date: Wed Aug 16 17:20:27 MDT 2023
+One-line Summary: Migration of FATES to share normal soil BGC call sequence and functionality
+
+Purpose and description of changes
+----------------------------------
+
+This set of changes enables the normal soil biogeochemistry that is used for CN, to be used for FATES as well. FATES had been using a simplified subset of soil biogeochemistry in its own module. This change required coordination of litter flux and methane boundary conditions from FATES to CLM. CNVEG datastructures were given trivial allocation (of size one on index zero) to prevent inappropriate use of CNVEG datastructures while FATES is active. Note that now the carbon balance checking for the soil is now active when FATES is active. Various accomodations have also been put in place to enable nitrogen cycling between the two models.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+Surprisingly, nvhpc tests are now working, but it may just be coincidental. All existing aux_clm tests are passing. Tests without FATES are b4b, with roundoff differences in just TOTCOLC and TOTCOLN.
+
+CTSM issues fixed (include CTSM Issue #):
+ We think #1879 -- "AD spinup issues for FATES", is fixed but haven't proved it
+ #2112 -- black check on SystemTest file
+
+Notes of particular relevance for users
+---------------------------------------
+A CLM-FATES simulation will turn on nitrogen supplementation, this enables sufficient immobilization and decomposition. Until FATES and CLM can handle fully coupled nitrogen exchange, which would include root uptake of the mineralized aqueous forms (NH4 and NO3), N limitations in the soil are meaningless when FATES is on.
+
+Caveats for users (e.g., need to interpolate initial conditions):
+ FATES MUST have suplnitro='ALL' now (was NONE). When fates_parteh_mode>=1 other settings are allowed.
+ More checking for use_luna and suplnitro is added for FATES in the build-namelist
+
+Changes made to namelist defaults (e.g., changed parameter values): FATES runs now supplement N
+ suplnitro set to ALL for FATES
+ use_luna set to .false. for FATES and clm4_5 physics
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+ We should update defaults for suplnitro, when Nitrogen nutrients are allowed in FATES
+ The black checdk github action has to duplicate actions for each source file or directory
+ We should move to using the Makefile in the python directory when we figure it out
+
+Testing summary:
+----------------
+
+aux_clm test run on cheyenne and izumi. See:
+
+izumi: OK /scratch/cluster/rgknox/tests_0814-095624iz
+cheyenne: OK /glade/scratch/rgknox/tests_0814-134713ch
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: Two diganostic fields (TOTCOLC and TOTCOLN)
+
+Baseline changes will be reported for many tests, all tests were combed to identify RMS diffs, all non-FATES tests had at most, roundoff level (-)
+ cheyenne ---- OK
+ izumi ------- OK
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+ Note that the previous ctsm5.1.dev132 tag was generated using FATES tagname
+ sci.1.66.1_api.25.5.0. This api update includes intermediate FATES science
+ tags that are non-b4b, so aux_clm FATES tests result in DIFFs as expected.
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: Yes, but only for aux_clm fates tests.
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+
+ sci.1.66.1_api.25.5.0 -> sci.1.67.1_api.26.0.0
+ ccs_config_cesm0.0.64 -> ccs_config_cesm0.0.65
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+
+ https://github.com/ESCOMP/CTSM/pull/2000 -- refactor
+ https://github.com/ESCOMP/CTSM/pull/2089 -- Change template update
+ https://github.com/NGEET/fates/pull/1024 -- FATES refactor
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev132
+Originator(s): mvdebolskiy (NORCE, Bergen, Norway), slevis (Samuel Levis,UCAR/TSS,303-665-1310)
+Date: Fri Aug 4 17:52:45 MDT 2023
+One-line Summary: Add parameterization to allow excess ice in soil and subsidence
+
+Purpose and description of changes
+----------------------------------
+
+As described in PR #1787:
+
+Parameterization for excess ice described in Lee et al. (2014):
+http://dx.doi.org/10.1088/1748-9326/9/12/124006
+
+This code is a modified version of code provided by Lei Cai:
+https://github.com/lca041/ctsm/tree/clm5.0.dev92_exice
+
+Works only for the nuopc driver.
+
+Files changed:
+bld/CLMBuildNamelist.pm, bld/namelist_files/namelist_defaults_ctsm.xml, bld/namelist_files/namelist_definitionss_ctsm.xml -- added namelist options;
+src/main/clm_varctl.F90, src/main/controlMod.F90 -- added option to switch excess ice physics and read namelist option;
+src/biogeophys/WaterStateType.F90 -- added prognostic excess ice variable and a history field;
+src/biogeophys/WaterStateBulkType.F90, src/main/clm_instMod.F90, -- added arguments to soubrutiens for proper initialization;
+src/biogeophys/TemperatureType.F90 -- initial soil temperature set to 268.15 K at the cold start (possibly redundant because #1460 is closed)
+src/biogeophys/WaterDiagnosticBulkType.F90 -- added two diagnostic excess ice variables and two history fields;
+src/biogeophys/SoilTemperatureMod.F90 -- added main excess ice calculations;
+src/biogeophys/TotalWaterAndHeatMod.F90 -- added excess ice to total water for balance checks;
+src/biogeophys/SoilHydrologyMod.F90 -- added excess ice for ice fraction calculation;
+
+New files:
+src/cpl/share_esmf/ExcessIceStreamType.F90 -- routines to read dataset with initial excess ice concentration
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #1229 -- excess ice
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+Caveats for users (e.g., need to interpolate initial conditions):
+ Excess ice can EITHER be turned on by using the stream file, OR a restart file that has excess ice on it.
+ Since, excess ice is expected to melt as time goes on, the use of a restart file is preferred.
+ But, use of a restart file requires a simulation that was spun up to that point.
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ New namelist options added:
+ - use_excess_ice (logical, in clm_inparm) default = .false.; turns on excess ice physics
+ - stream_meshfile_exice, stream_fldfilename_exice, stream_mapalgo_exice (char, in exice_streams)
+ meshfile, stream file, spatial interpolation algorithm for initial values of excess ice
+ defaults - lnd/clm2/paramdata/exice_init_0.125x0.125_ESMFmesh_c20220516.nc,
+ lnd/clm2/paramdata/exice_init_0.125x0.125_c20220516.nc
+ and bilinear
+ Dataset interpolated to 0.125x0.125 degrees grid from Brown et al. (1997) can be found here:
+ https://drive.google.com/file/d/1mA457Oa52zG_MtLGB7KHuUYQvsS2-P5o/view?usp=sharing
+ Dataset used only in cold start or hybrid runs (or starting with finidat) that do not have excess ice
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+ New tests in place for this new code
+
+Testing summary:
+----------------
+[Remove any lines that don't apply.]
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ heyenne ---- OK
+ izumi ------- OK
+
+ any other testing (give details below):
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: No
+
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/1787
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev131
+Originator(s): samrabin (Sam Rabin,UCAR/TSS)
+Date: Thu Jul 27 14:24:07 MDT 2023
+One-line Summary: Enable prescribed crop calendars.
+
+Purpose and description of changes
+----------------------------------
+
+This branch enables CLM to read in externally-prescribed crop sowing dates and "cultivar" maturity requirements (growing
+degree-days, GDDs). This has so far only been tested with static values, and the results indicate that yield performance is
+worsened. However, this capability is required by the GGCMI phase 3 / ISIMIP3 Agriculture protocol.
+
+Briefly, the way this works is that an offline run is first performed with prescribed sowing dates and 364-day seasons.
+Instantaneous GDD accumulation is saved daily. A Python script then cross-references those daily outputs with a map of mean sowing
+dates to determine the mean accumulated GDDs in the growing season, saving the result as a file for use as prescribed maturity
+requirements.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Resolves #281 -- Clean up CropPhenology logic
+ Resolves #519 -- Read in crop planting and harvest dates
+ Fixes #2042 -- Issue running SystemTests due to "conda activate" error
+
+ Some on #1649 -- Additional "annual" (per growing season) crop outputs
+
+Notes of particular relevance for users
+---------------------------------------
+
+Caveats for users:
+ Untested but theoretically possible:
+ * Time-varying inputs
+ * Running at any resolution other than one matching the crop calendar inputs
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ Adds optional namelist variables:
+ * stream_fldfilename_sdate: Filename of input stream data for sowing dates
+ * stream_fldfilename_cultivar_gdds: Filename of input stream data for cultivar growing degree-day targets
+ * stream_meshfile_cropcal: Filename of input stream data for crop calendar inputs
+ * stream_year_first_cropcal: First year to loop over for crop calendar data
+ * stream_year_last_cropcal: Last year to loop over for crop calendar data
+ * model_year_align_cropcal: Simulation year that aligns with stream_year_first_cropcal value
+ * generate_crop_gdds: Set to .true. in order to override crop harvesting logic and to instead harvest the day before the next sowing date. Used to generate growing-degree day outputs that can be used with an external script to generate new GDD requirement ("cultivar") files.
+ * use_mxmat: Set to .false. in order to ignore crop PFT parameter for maximum growing season length (mxmat). Must be set to .false. when generate_crop_gdds is .true.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+ * Adds RXCROPMATURITY SystemTest, with an example added to ctsm_sci test suite.
+ * Removes 12 MCT tests from testlist_clm.xml, as discussed in CTSM SE standup 2023-06-26.
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ cheyenne - PASS
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES for Clm45BgcCrop compsets only
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: Clm45BgcCrop
+ - what platforms/compilers: Cheyenne intel and gnu, Izumi intel and nag
+ - nature of change (roundoff; larger than roundoff/same climate; new climate): roundoff
+
+ 5 tests in aux_clm showed true DIFFs (i.e., not just field list differences / new output files):
+ - SMS_D_Ly6_Mmpi-serial.1x1_smallvilleIA.IHistClm45BgcCropQianRs.izumi_intel.clm-cropMonthOutput
+ - ERP_D_P36x2_Ld3.f10_f10_mg37.I2000Clm45BgcCrop.cheyenne_gnu.clm-no_subgrid_fluxes
+ - LGRAIN2_Ly2_P72x1.f10_f10_mg37.I1850Clm45BgcCrop.cheyenne_gnu.clm-ciso--clm-cropMonthOutput
+ - ERS_Ly5_P72x1.f10_f10_mg37.IHistClm45BgcCrop.cheyenne_intel.clm-cropMonthOutput
+ - SMS_D_Ld1_P48x1.f10_f10_mg37.I2000Clm45BgcCrop.izumi_nag.clm-oldhyd
+
+ The first four were likely due to an order-of-operations change in CNOffsetLitterfall(), as they resolve with the patch at
+ https://github.com/samsrabin/CTSM/commit/c30320cbd6583bccbcc290ffe536e8500e6ec358
+
+ The last is resolved with an additional patch that removes all my changes to CNOffsetLitterfall()---changes which *should* only
+ affect new diagnostic variables:
+ https://github.com/samsrabin/CTSM/commit/e025f555e74584c63d50f27c4df38326fa64bc4f
+
+Other details
+-------------
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): cime
+ cime: cime6.0.108 -> cime6.0.125
+
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/CTSM/pull/1863
+
+===============================================================
+
+===============================================================
+Tag name: ctsm5.1.dev130
+Originator(s): glemieux (Greg Lemieux,LBL/NGEET,510-486-5049)
+Date: Sun Jul 9 23:24:29 MDT 2023
+One-line Summary: FATES parameter file and test definition update
+
+Purpose and description of changes
+----------------------------------
+
+This tag incorporates updates to the FATES parameter file and test
+definitions to be consistent with updates to the drought deciduous
+phenology model in FATES. This also updates the external FATES
+pointer to the tag associated with the drought deciduous phenology
+update.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #2043 -- Five izumi NEON tests fail (for me) because the testnames include L10d instead of Ld10
+
+Known bugs found since the previous tag (include issue #):
+ #2049 -- Use of 0.01_r8 as a magic number
+ #2042 -- Issue running SystemTests due to "conda activate" error
+ #2039 -- Conditional for NEON usermods is too broad
+
+Notes of particular relevance for users
+---------------------------------------
+Changes made to namelist defaults (e.g., changed parameter values):
+
+ FATES parameter file default updated to fates_params_api.25.5.0_12pft_c230628.nc
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES for FATES tests only
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: FATES
+ - what platforms/compilers: ALL
+ - nature of change (roundoff; larger than roundoff/same climate; new climate): larger than roundoff
+
+ If this tag changes climate describe the run(s) done to evaluate the new
+ climate (put details of the simulations in the experiment database)
+
+ See FATES #958 for discussion. The update increased the dimensions of
+ some FATES history output from site-level to pft-level. As such, these
+ have been removed from some test cases to keep the test light weight and
+ added to the AllVars test to maintain coverage.
+
+ Note that this FATES update also incorporates a number of additional science updates
+ since the previous tag.
+
+Other details
+-------------
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): fates
+ fates: sci.1.65.3_api.25.4.0 -> fates-sci.1.66.0_api.25.5.0
+
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/2009
+ https://github.com/NGEET/fates/pull/958
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev129
+Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326)
+Date: Thu Jun 22 01:21:56 MDT 2023
+One-line Summary: NEON fixes for TOOL and user-mods, add SP for NEON, some history file updates, black refactor for buildlib/buildnml
+
+Purpose and description of changes
+----------------------------------
+
+Merge the NEON fixes for TOOL and allowing SP mode, as well as a few simple history PR's, and a black reformat.
+
+Fixes NEON bug identified at the NCAR-NEON workshop. Corrects the dominant PFT at TOOL site & usermods_dirs
+Some small changes for quality of life improvements for the run_neon script. Some documentation and code
+cleanup type changes regarding history code (delete a unused subroutine). Do a black reformat of python files
+buildlib/buildnml (and CTSM SystemTests) for consistency across CESM. Also add running them through black in the python
+
+Specific notes:
+
+ - fixed a couple lines so that python will stop complaining about deprecated things
+ - added print statements about warning messages being not an issue, and that building/running may take a while
+ - added a "success" print statement - I'm not sure this will actually only print if "successful"
+ - Add more documentation to history tape code
+ - Add more breadcrumbs between related variables and methods
+ - Put related history namelist flags/methods together
+ - Update some out of date comments in history code
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #2013 -- Incorrect PFT at TOOL
+ Fixes #2014 -- NEON usermods not working as intended
+ Fixes #2029 -- fire_method is used before it's set and hence fire_res isn't set to none
+ Fixes #2030 -- Logic in build-namelist not functioning correctly for FATES with light_res
+ Updates conda environment so that #1974 works
+
+Known bugs found since the previous tag (include issue #):
+ #2037 -- shell_commands for tests with two testmods listed don't concatenate both together
+ #2036 -- Remove setting of STOP options in user-mod directories
+ #2017 -- subset_data does not function for regional grids that span across Greenwich longitude zero
+ #2024 -- snow fraction is uninitialized when passed to fates during cold-starts
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+Caveats for users (e.g., need to interpolate initial conditions):
+ Ability to run for SP sites was added for NEON, but run-neon.py doesn't have an option for it
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ New --light_res option for 106x74 for NEON lightning data added (can be set in CLM_BLDNML_OPTS)
+ This is the default for NEON sites (with $CLM_USRDAT_NAME == NEON or NEON.PRISM)
+ It fails for non CLM_USRDAT resolutions and gives a warning for non-NEON CLM_USRDAT resolutions)
+
+Changes made to namelist defaults (e.g., changed parameter values):
+ Add NEON 106x74 lightning dataset
+
+Changes to the datasets (e.g., parameter, surface or initial files): New NEON surface datasets
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+ Add a NEON case that runs in SP mode
+ Change one of the FATES tests to turn fire on and require lightning data
+
+Testing summary: regular NEON-tools
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS (57 tests different from baseline)
+
+ tools-tests (test/tools) (if tools have been changed):
+
+ cheyenne - PASS (NEON test list passes)
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ other testing:
+ izumi -- PASS (tests of changed NEON sites, see list in #2031)
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: bit-for-bit (except some NEON sites)
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: NEON TOOL site and other NEON sites with namelist changes
+ - what platforms/compilers: all
+ - nature of change: new climate
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+ #2031 -- Merge of below...
+ #2015 -- Address NEON bugs
+ #2021 -- Small changes to fix warnings, add print statements for clarity
+ #2023 -- Document side effects of htapes_fieldlist
+ #2022 -- Delete unued hist_add_subscript
+ #2020 -- Add more documentation to history tape code
+ #2007 -- black reformat python files for consistancy across cesm
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev128
+Originator(s): glemieux (Gregory Lemieux,LBL/NGEET,510-486-5049)
+Date: Thu Jun 1 15:31:52 MDT 2023
+One-line Summary: Update FATES tests to double precision
+
+Purpose and description of changes
+----------------------------------
+
+This pull request updates the fates tests to set the output
+precision to double precision. The usermod fates_sp is similarly
+updated.
+
+
+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.)
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+- Resolves https://github.com/ESCOMP/CTSM/issues/1986
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+ FATES tests run against fates-sci.1.65.6_api.25.4.0-ctsm5.1.dev127 baseline
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: Yes, but only for fates tests and compsets
+
+ Summarize any changes to answers, i.e.,
+ - Differences are due to changing hist_ndens to 1 (double precision)
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/2010
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev127
+Originator(s): sacks (Bill Sacks)
+Date: Fri May 19 04:48:30 MDT 2023
+One-line Summary: Fix nuopc cplhist test
+
+Purpose and description of changes
+----------------------------------
+
+Make some changes to the cplhist testmod that fix the cplhist test,
+based on testing done by Keith Oleson:
+- Point to new cplhist forcing data generated and used by Adam
+ Herrington and Keith Oleson
+- Use DATM_PRESNDEP=none until
+ https://github.com/escomp/ctsm/issues/1844 is resolved
+
+Also, remove mct cplhist test.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+- Takes steps towards addressing ESCOMP/CTSM#1844 (Create new auxiliary
+ history file for cplhist test with ndep data)
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+- Changes cplhist test; new test is
+ SMS_D_Ld1.ne30pg3_t061.I1850Clm50BgcSpinup.cheyenne_intel.clm-cplhist
+- Removes mct cplhist test
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- PASS
+ izumi ------- PASS
+
+ Note that there were no baselines for the new test
+ (SMS_D_Ld1.ne30pg3_t061.I1850Clm50BgcSpinup.cheyenne_intel.clm-cplhist)
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: NO
+
+Other details
+-------------
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+- cdeps: cdeps1.0.12 -> cdeps1.0.13
+
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/1999
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev126
+Originator(s): jpalex (John Alex)
+Date: Thu May 18 17:21:59 MDT 2023
+One-line Summary: Clean up some loops in UrbanTimeVarType
+
+Purpose and description of changes
+----------------------------------
+
+Refactor some inefficient and confusing looping structures in
+UrbanTimeVarType.F90
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+- Resolves ESCOMP/CTSM#1514 (Inefficient and confusing looping structures in UrbanTimeVarType.F90)
+
+Testing summary:
+----------------
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- PASS
+ izumi ------- PASS
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: NO
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/2005
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev125
+Originator(s): jpalex (John Alex)
+Date: Sun Jul 9 21:04:13 MDT 2023
+One-line Summary: Added cache for clock step_size in clm_time_manager.F90
+
+Purpose and description of changes
+----------------------------------
+
+Added cache for clock step_size in clm_time_manager.F90 to improve
+performance.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+- Resolves ESCOMP/CTSM#207 (Improve performance of get_step_size)
+
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- PASS
+ izumi ------- PASS
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: NO
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/2004
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev124
+Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326) / mvertens / adamrher / MiCurry / jtrusdal / TeaganKing
+Date: Tue May 9 16:52:05 MDT 2023
+One-line Summary: Initialization memory update, new surface datasets for new grids, add option for running NEON with PRISM data
+
+Purpose and description of changes
+----------------------------------
+
+Lower memory usage at initialization:
+
+ Some work by Mariana Vertenstein to lower the memory usage at initiatlization.
+
+New Low Resolutions for SE grids:
+
+ ne3np4.pg3, ne5np4.pg3, ne16np4.pg3
+
+New MPASA Resolutions:
+
+ mpasa480 --------- Course resolution
+ mpasa120 --------- Near 1-degree
+ mpasa60, mpasa30 - High resolution
+ mpasa15 ---------- Very high resolution
+
+ This merge adds the surface data and landuse.timeseries files for the CAM-MPAS dycore. At present, these grids are:
+
+ mpasa480 - 480 km quasi-uniform, global with 2,462 horizontal grid columns
+ mpasa120 - 120 km quasi-uniform, global with 40,962 horizontal grid columns
+ mpasa60 - 60 km quasi-uniform, global with 163,842 horizontal grid columns
+ mpasa30 - 30 km quasi-uniform, global with 655,362 horizontal grid columns
+ mpasa15 - 15 km quasi-uniform, global with 2,621,442 horizontal grid columns
+
+
+Option to Run NEON with PRISM preciption data:
+
+ Some NEON sites have bad or incomplete precitation data. By setting CLM_USRDAT_NAME="NEON.PRISM"
+ the PRISM 4km CONUS ReAnayslis data is used in place of the NEON precipitation data. This
+ is helpful for several NEON sites:
+ MLBS, MOAB, ONAQ, SJER, NIWO, TEAK, WREF, YELL
+
+ Allow PRISM precipitation to be used as a new datm stream.
+
+ Updates to cime_config/config_component.xml include additional valid values for PRECIP data stream names. Changes in
+ cime_config/usermods_dirs/NEON/defaults/user_nl_datm_streams specify which input variables are gathered from which streams and
+ specifies file location for PRISM data.
+
+ Using PRISM precipitation instead of NEON precipitation does have a substantial impact on CTSM output (eg. latent heat flux
+ biases).
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #1969 -- Move dynGrossUnrepMod.F90 from biogeochem to dyn_subgrid subdirectory
+ Fixes #1904 -- Other precipitation streams for NEON
+ Fixes #1927 -- Course SE resolutions support
+ Fixes #1313 -- MPASA resolution support
+
+Notes of particular relevance for users
+---------------------------------------
+
+Caveats for users (e.g., need to interpolate initial conditions):
+ New resolutions do NOT have specific initial conditions for them, they use the general ones
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ NEON cases will give a warning about spinup data for non default transient cases
+ if you set a NEON case with CLM_USRDAT_NAME=NEON.PRISM, PRISM data will be used for precip
+
+ Two new options to run_neon.py "--prism" and "--experiment"
+
+Changes made to namelist defaults (e.g., changed parameter values):
+ "v3" data option for NEONVERSION
+
+Changes to the datasets (e.g., parameter, surface or initial files):
+ New surface and landuse.timeseries datasets for:
+ ne3np4.pg3, ne5np4.pg3, ne16np4.pg3
+ mpasa480, mpasa120, mpasa60, mpasa30, mpasa15
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing: Add new tests for new resolutions
+
+Testing summary: regular, tools
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS (81 new tests)
+
+ tools-tests (test/tools) (if tools have been changed):
+
+ cheyenne - OK
+ cheyenne - PASS (tests_pretag_nompi_neon)
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ any other testing (give details below):
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: No bit-for-bit
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): cdeps
+ Update CDEPS to cdeps1.0.12
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+
+ #1998 -- combination of below PR's...
+
+ #1954 -- PRISM
+ #1973 -- SE
+ #1501 -- MPASA
+ #1899 -- memory scaling
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev123
+Originator(s): sacks (Bill Sacks)
+Date: Mon May 1 11:37:51 MDT 2023
+One-line Summary: Updates needed for pFUnit 4 and other externals updates
+
+Purpose and description of changes
+----------------------------------
+
+(1) Lots of small changes needed for the update to pFUnit4. Note that
+ this is a backwards-incompatible update, so we will require pFUnit 4
+ moving forward.
+
+(2) Externals updates: some of these are needed for the update to pFUnit
+ 4; others are included to update externals to those in a recent CESM
+ alpha tag.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+- Running the Fortran unit tests now requires pFUnit 4
+- I didn't run the mksurfdata_map unit tests... these will be removed
+ soon anyway with the replacement of mksurfdata_map with mksurfdata_esmf
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- PASS
+ izumi ------- PASS
+
+ Note: most testing run on 46968da7b; reran just izumi-nag testing on
+ the latest version (the only difference was in the version of the
+ ccs_config external, and the only diff there was for nag).
+
+ any other testing (give details below):
+ - Fortran unit tests (under src) on izumi and my Mac
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: NO
+
+Other details
+-------------
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+- ccs_config: ccs_config_cesm0.0.58 -> ccs_config_cesm0.0.64
+- cime: cime6.0.100 -> cime6.0.108
+- cmeps: cmeps0.14.17 -> cmeps0.14.21
+- cdeps: cdeps1.0.7 -> cdeps1.0.9
+- cpl7: cpl7.0.14 -> cpl77.0.5
+- share: share1.0.16 -> share1.0.17
+
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/1989
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev122
+Originator(s): sacks (Bill Sacks)
+Date: Sun Apr 23 19:36:37 MDT 2023
+One-line Summary: Rework handling of evaporation constraint in SoilFluxes
+
+Purpose and description of changes
+----------------------------------
+
+Occasionally, h2osoi_ice was going significantly negative in
+UpdateState_TopLayerFluxes - see
+https://github.com/ESCOMP/CTSM/issues/1979. As noted in that issue, this
+seems to be due to h2osoi_ice having a very different magnitude from
+h2osoi_liq, leading to greater-than-roundoff-level differences from zero
+final state in a relative sense (i.e., relative to the magnitude of
+h2osoi_ice) - I think because of the appearance of the sum (h2osoi_ice +
+h2osoi_liq) in the equations that limit fluxes.
+
+To try to deal with this, I have reworked the handling of the
+evaporation constraint to directly limit both the liqevap and solidevap,
+so that both of them should result in the equivalent liq or ice states
+going to 0 within roundoff.
+
+To do that, I needed to move the partitioning of the total flux into
+liquid and solid to earlier in the subroutine and then recalculate those
+partitioning fluxes in conditions where we're applying an evaporation
+constraint.
+
+Note that I applied a max of 0 to the new fluxes because many initial
+conditions files have roundoff-level negative H2OSOI_LIQ, so without
+this limit, we were getting roundoff-level negative fluxes.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+- Resolves ESCOMP/CTSM#1979 (Need some changes to avoid negative h2osoi_ice in UpdateState_TopLayerFluxes)
+
+
+Testing summary:
+----------------
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ Tests passed, some baseline differences as expected.
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: potentially all
+ - what platforms/compilers: potentially all
+ - nature of change (roundoff; larger than roundoff/same climate; new climate):
+ roundoff
+
+ Differences were only observed in a few tests:
+ - ERP_P36x2_Ld30.f45_f45_mg37.I2000Clm51FatesSpCruRsGs.cheyenne_intel.clm-FatesColdSatPhen
+ - ERI_D_Ld9_P48x1.T31_g37.I2000Clm50Sp.izumi_nag.clm-reduceOutput
+ - SMS_D_Ln9_P36x3.f19_g17.IHistClm50Sp.cheyenne_intel.clm-waccmx_offline
+ - SMS_D_Ln9_P36x3_Vmct.f19_g17.IHistClm50Sp.cheyenne_intel.clm-waccmx_offline
+
+ If bitwise differences were observed, how did you show they were no worse
+ than roundoff?
+
+ Only two tests had greater-than-roundoff-level differences in the
+ cprnc output:
+ SMS_D_Ln9_P36x3.f19_g17.IHistClm50Sp.cheyenne_intel.clm-waccmx_offline
+ and the mct equivalent,
+ SMS_D_Ln9_P36x3_Vmct.f19_g17.IHistClm50Sp.cheyenne_intel.clm-waccmx_offline.
+ To verify that differences were fundamentally no greater than
+ roundoff-level, I introduced temporary code; this minimal diff
+ ended up being enough to give just roundoff-level differences from baseline:
+
+ diff --git a/src/biogeophys/SoilFluxesMod.F90 b/src/biogeophys/SoilFluxesMod.F90
+ index c316d30fe..6a958c0ee 100644
+ --- a/src/biogeophys/SoilFluxesMod.F90
+ +++ b/src/biogeophys/SoilFluxesMod.F90
+ @@ -45,7 +45,7 @@ subroutine SoilFluxes (bounds, num_urbanl, filter_urbanl, &
+ ! Update surface fluxes based on the new ground temperature
+ !
+ ! !USES:
+ - use clm_time_manager , only : get_step_size_real
+ + use clm_time_manager , only : get_step_size_real, get_nstep
+ use clm_varcon , only : hvap, cpair, grav, vkc, tfrz, sb
+ use landunit_varcon , only : istsoil, istcrop
+ use column_varcon , only : icol_roof, icol_sunwall, icol_shadewall, icol_road_perv
+ @@ -79,7 +79,9 @@ subroutine SoilFluxes (bounds, num_urbanl, filter_urbanl, &
+ real(r8) :: t_grnd0(bounds%begc:bounds%endc) ! t_grnd of previous time step
+ real(r8) :: lw_grnd
+ real(r8) :: evaporation_limit ! top layer moisture available for evaporation
+ - real(r8) :: evaporation_demand ! evaporative demand
+ + real(r8) :: evaporation_demand ! evaporative demand
+ + real(r8) :: qflx_liqevap_orig
+ + real(r8) :: qflx_solidevap_orig
+ !-----------------------------------------------------------------------
+
+ associate( &
+ @@ -291,6 +293,7 @@ subroutine SoilFluxes (bounds, num_urbanl, filter_urbanl, &
+ qflx_evap_soi(p) = qflx_evap_soi(p) - frac_sno_eff(c)*(evaporation_demand - evaporation_limit)
+ qflx_liqevap_from_top_layer(p) = max(h2osoi_liq(c,j)/(frac_sno_eff(c)*dtime), 0._r8)
+ qflx_solidevap_from_top_layer(p) = max(h2osoi_ice(c,j)/(frac_sno_eff(c)*dtime), 0._r8)
+ +
+ ! conserve total energy flux
+ eflx_sh_grnd(p) = eflx_sh_grnd(p) + frac_sno_eff(c)*(evaporation_demand - evaporation_limit)*htvp(c)
+ endif
+ @@ -307,6 +310,24 @@ subroutine SoilFluxes (bounds, num_urbanl, filter_urbanl, &
+ qflx_ev_snow(p) = qflx_evap_soi(p)
+ qflx_liqevap_from_top_layer(p) = max(h2osoi_liq(c,j)/dtime, 0._r8)
+ qflx_solidevap_from_top_layer(p) = max(h2osoi_ice(c,j)/dtime, 0._r8)
+ +
+ + if (h2osoi_liq(c,j) + h2osoi_ice(c,j) > 0._r8) then
+ + qflx_liqevap_orig = max(qflx_evap_soi(p)*(h2osoi_liq(c,j)/ &
+ + (h2osoi_liq(c,j)+h2osoi_ice(c,j))), 0._r8)
+ + else
+ + qflx_liqevap_orig = 0._r8
+ + end if
+ + qflx_solidevap_orig = qflx_evap_soi(p) - qflx_liqevap_orig
+ + if (qflx_solidevap_from_top_layer(p) == 0._r8 .and. &
+ + qflx_solidevap_orig < 0._r8 .and. &
+ + qflx_solidevap_orig > -1.e-16_r8) then
+ + write(iulog,'(a, i0, 1x, i0, 1x, 5e24.17)') &
+ + 'WJS adj urb: solid orig le 0, new 0: nstep, p, orig, new, qflx_evap_soi, h2osoi_liq, h2osoi_ice = ', &
+ + get_nstep(), p, qflx_solidevap_orig, qflx_solidevap_from_top_layer(p), &
+ + qflx_evap_soi(p), h2osoi_liq(c,j), h2osoi_ice(c,j)
+ + qflx_solidevap_from_top_layer(p) = qflx_solidevap_orig
+ + end if
+ +
+ ! conserve total energy flux
+ eflx_sh_grnd(p) = eflx_sh_grnd(p) +(evaporation_demand -evaporation_limit)*htvp(c)
+ endif
+
+ (Note that the diffs in
+ ERP_P36x2_Ld30.f45_f45_mg37.I2000Clm51FatesSpCruRsGs.cheyenne_intel.clm-FatesColdSatPhen
+ were ambiguous as to whether they were roundoff-level due to the
+ single-precision output in that test; I reran with double precision
+ for the baseline and the branch and was able to verify that the
+ diffs were only double-precision roundoff-level.)
+
+Other details
+-------------
+
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/1987
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev121
+Originator(s): glemieux (Gregory Lemieux,LBL/NGEET,510-486-5049)
+Date: Wed Apr 5 13:34:09 MDT 2023
+One-line Summary: Changes soil moisture initialization logic for FATES
+
+Purpose and description of changes
+----------------------------------
+
+This PR changes the logic for soil moisture initialization to initialize
+with wetter soils (75% of saturated water content, as opposed to 15% of
+absolute water content) for all FATES configurations. The rationale for
+this is that in FATES-nocomp simulations, Jessica Needham was finding very
+high initial mortality rates in some seasonal tropical forest regions which
+she traced it back to the initial soil moisture killing off plants before the
+ecosystem could get established.
+
+This also updates the fates externals pointer to the latest tag which includes
+a number of science updates since the last tag update and updates the the
+default parameter file.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+Externals issues fixed (include issue #):
+ Partially addresses FATES#994 -- Bare ground establishment problem and increased soil moisture
+
+Known bugs found since the previous tag (include issue #):
+ #1979 -- Need to loosen tolerance on near-zero truncation of h2osoi_ice in UpdateState_TopLayerFluxes
+
+Notes of particular relevance for users
+---------------------------------------
+
+Changes made to namelist defaults (e.g., changed parameter values):
+ fates_paramfile updated to fates_params_api.25.4.0_12pft_c230327.nc
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+ This changes the starting level for a COLD start of soil moisture for ALL FATES cases to a much
+ higher value than for non-FATES. In the long run we'd like to have these the same and/or
+ have the value changable on the namelist.
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+ FATES tests run against fates-sci.1.65.3_api.25.4.0-ctsm5.1.dev120 baseline
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+
+ Changes answers in fates suite for all non-hydro fates tests since the soil
+ moisture initialization matches that of fates hydro now. Changes answer
+ for all fates testmods in the aux_clm suite as the science tag has iterated
+ forward by 4 minor version updates. All diffs accounted for with prior fates
+ suite tests.
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+
+- FATES: sci.1.61.0_api.25.0.0 -> sci.1.65.3_api.25.4.0
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+
+ https://github.com/ESCOMP/CTSM/pull/1962 -- Cold start moisture for FATES increased
+ https://github.com/ESCOMP/CTSM/pull/1978 -- revert some commits now that FUNITCTSM works again
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev120
+Originator(s): sacks (Bill Sacks)
+Date: Sat Mar 25 17:49:27 MDT 2023
+One-line Summary: Update externals and minor fixes
+
+Purpose and description of changes
+----------------------------------
+
+Main change is to update externals to cesm2_3_alpha12c-ish.
+
+Doing this exposed a few issues that are also fixed here.
+
+Also, reduce GU_LULCC tests down to a single test.
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+- Resolves ESCOMP/CTSM#1968 (Reduce the GULU tests down to one)
+- Resolves ESCOMP/CTSM#1971 (fsurdatmodifyctsm test should abort if it has trouble running the python script)
+
+Known bugs introduced in this tag (include issue #):
+- ESCOMP/CTSM#1972 (FUNITCTSM test fails when run through run_sys_tests in upcoming ctsm5.1.dev120)
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+- Fortran unit tests now need to be run manually, since FUNITCTSM is
+ failing when run through run_sys_tests
+- Reduced GU_LULCC tests down to a single test
+
+
+Testing summary:
+----------------
+
+ regular tests:
+ - aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing
+ - Fortran unit tests on cheyenne (until https://github.com/ESCOMP/CTSM/issues/1972 is resolved): from src, run:
+ ../cime/scripts/fortran_unit_testing/run_tests.py --build-dir `mktemp -d --tmpdir=. unit_tests.XXXXXXXX`
+
+ aux_clm on cheyenne ------------ OK
+ aux_clm on izumi --------------- OK
+ Fortran unit tests on cheyenne - PASS
+
+ For the two new tests (with BFAILs), ran them from dev119 with
+ comparison against this branch:
+ - ERP_D_Ld10_P36x2.f10_f10_mg37.IHistClm51BgcCrop.cheyenne_intel.clm-ciso_decStart
+ - SMS_Ld3_PS.f09_g17.IHistClm50BgcCrop.cheyenne_intel.clm-f09_dec1990Start_GU_LULCC
+ (with start date in the test mod changed to match the new version)
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES, but just for certain compilers
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: all on certain compilers
+ - what platforms/compilers:
+ - nvhpc on cheyenne in non-debug cases (can be explained from
+ differences in compilation flags for non-debug cases, and also
+ some module differences)
+ - intel on izumi in debug cases (there were updates in ESMF
+ modules, though that's the same for other izumi compilers; I'm not
+ seeing other relevant diffs in ccs_config, so I'm not sure why we're
+ getting diffs here. I tried investigating, but ran into trouble trying
+ to get things to compile with the old ccs_config, so gave up on
+ tracking down the source of this difference)
+
+ - nature of change (roundoff; larger than roundoff/same climate; new climate):
+ not investigated
+
+Other details
+-------------
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.):
+- ccs_config: ccs_config_cesm0.0.38 -> ccs_config_cesm0.0.58
+- cime: cime6.0.45 -> cime6.0.100
+- cmeps: cmeps0.13.71 -> cmeps0.14.17
+- cdeps: cdeps0.12.65 -> cdeps1.0.7
+- share: share1.0.13 -> share1.0.16
+- pio: pio2_5_7 -> pio2_5_10
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev119
+Originator(s): slevis (Samuel Levis,SLevis Consulting,303-665-1310), ekluzek Erik Kluzek), lawrencepj1 (Peter Lawrence)
+Date: Thu Mar 16 14:13:37 MDT 2023
+One-line Summary: Allow gross unrepresented land use transitions (PR #309)
+
+Purpose and description of changes
+----------------------------------
+
+ Get gross unrepresented land use transitions working in CLM5.1. This is additional optional
+ data added to the landuse.timeseries files for transient simulations. The current landuse.timseries
+ files have this data, but it's set to zero. This data will be part of the CTSM5.2 surface dataset
+ (that is upcoming) and be on by default for clm5_3 physics.
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+Does this tag change answers significantly for any of the following physics
+onfigurations?
+(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
+hanges.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+ Known bugs introduced in this tag (include issue #): #1968
+ #1968 -- Reduce the GULU tests down to one
+
+Notes of particular relevance for users
+---------------------------------------
+Changes made to namelist defaults (e.g., changed parameter values):
+ New namelist variable: do_grossunrep
+
+Changes to the datasets (e.g., parameter, surface or initial files):
+ Surface datasets may now contain non-zero gross unrepresented land use
+ transitions.
+
+Notes of particular relevance for developers:
+---------------------------------------------
+Changes to tests or testing:
+ Erik introduced new tests that can be identified by the GU_LULCC in
+ their names. I ran these with the test-suites and generated baselines
+ for them.
+
+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):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: NO (unless see next)
+
+ Code configurations: do_grossunrep = .true. and surface dataset
+ includes non-zero gross unrepresented land use
+ transitions. I (slevis) have not investigated the
+ nature of the changes.
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/309 -- Added new files to allow Gross Unrepresented Land Use transition
+ https://github.com/ESCOMP/ctsm/pull/1965 -- update README
+ (NOT a PR) Update manage externals
+
+
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev118
+Originator(s): slevis (Samuel Levis,SLevis Consulting,303-665-1310)
+Date: Sun Feb 5 18:31:29 MST 2023
+One-line Summary: Use conda environment rather than ncar_pylib with the fsurdat_modifier system test
+
+Purpose and description of changes
+----------------------------------
+
+ Reason: ncar_pylib is going away soon.
+
+ The fsurdat_modifier system test that we're discussing in this tag and
+ corresponding pull request (PR #1798)
+ FSURDATMODIFYCTSM_D_Mmpi-serial_Ld1.5x5_amazon.I2000Clm50SpRs.cheyenne_intel
+ stopped working when I updated the PR to dev117.
+ The test worked in the PR when I was still in dev115.
+ The test worked in vanilla dev117.
+ I fixed the failure by removing a restriction added in dev116 and the
+ corresponding override --allow_ideal_and_include_non_veg.
+
+ I am removing another restriction added in dev116 and the corresponding
+ override --allow_dom_pft_and_idealized. This one didn't cause a test to fail
+ but unnecessarily restricted usage of the fsurdat_modifier tool.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+Fixes #1786 -- ncar_pylib
+Fixes #1925 -- replace ncar_pylib
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ clm_pymods test suite on cheyenne - PASS
+ (softlinks created for baselines to previous tag since this is bit-for-bit)
+
+ any other testing (give details below):
+
+ make all (in /python directory) - PASS
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: NO
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+ https://github.com/ESCOMP/ctsm/pull/1798 -- Have fsurdat_modifier system test use conda environment rather than ncar_pylib
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev117
+Originator(s): afoster (Adrianna Foster)
+Date: Thu Feb 2 10:34:23 MST 2023
+One-line Summary: Updates to facilitate running FATES at NEON sites
+
+Purpose and description of changes
+----------------------------------
+
+Small updates to facilitate creation, modification, and
+use of FATES-usable (i.e. 16-PFT) NEON surface data files and
+user-mods for FATES NEON cases.
+
+Updated neon_surf_wrapper.py and modify_singlept_site_neon.py to include a
+--16pft argument that will create and/or modify the 16-PFT versions of the
+surface datasets, as well as a --mixed flag to the neon_surf_wrapper.py
+which tells subset_data to not overwrite the surfae dataset to be just 100%
+one PFT.
+
+Also corrects lat-lon being used for ONAQ NEON site and updates the surface
+datasets for all NEON sites.
+
+Also adds a check to ensure that fire emission (-fire_emis) is not on if FATES
+is being run.
+
+
+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.)
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+- Partially addresses ESCOMP/CTSM#1609(Get FATES working for NEON)
+
+Known bugs introduced in this tag (include issue #):
+#1949 - Duplication problems in user_mods
+
+Known bugs found since the previous tag (include issue #):
+#1948 - FATES and 78PFT surface datasets
+FATES#983 - PRT2 test failing on izumi
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+Changes to the datasets (e.g., parameter, surface or initial files):
+updated surface datasets for all NEON sites for big-leaf (78-PFT) and FATES (16-PFT)
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+Files changed in cime_config/usermods_dirs/NEON for big-leaf CLM must also
+be changed in similar files in cime_config/usermods_dirs/NEON/FATES, as these are
+currently duplicated. This duplication should be fixed at a later date.
+
+Changes to tests or testing:
+Added a test in bld/unit_testers/build-namelist_test.pl to check that FATES and
+fire emission cannot be on at the same time.
+
+
+Testing summary:
+----------------
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+
+Only for NEON sites.
+
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: All configurations at NEON sites
+ - what platforms/compilers: All platforms when running NEON sites
+ - nature of change: updated surface datasets
+
+
+Other details
+-------------
+#1933 - Update neon_sites_dompft.csv
+#1932 - NEON FATES capabilities
+
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev116
+Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326)
+Date: Thu Jan 26 02:17:27 MST 2023
+One-line Summary: Small answer changes with bug fixes, zetamaxstable=2 for BHS, new single point fsurdat files
+
+Purpose and description of changes
+----------------------------------
+
+Change zetamaxstable to 2 when biomass-heat-storage is on. This changes simulation answers once they
+run long enough to exceed that threshold.
+
+Also fix an issue with maintence respiration (MR) for BGC simulations. This changes answers for most BGC cases once
+they run long enough. Live course MR wasn't included.
+
+Make the default for MOSART to send negative flow to river outlets. Also fix an issue with this mode.
+
+Bring in new surface datasets for the single point sites. We now make these sites using subset_data rather
+than mksurfdata.
+
+Some new capability to the subset_data and modify_fsurdat tools.
+
+subset_data add options:
+--out-surface -- To name the surface dataset on the command line rather than based on the current date
+--cfg-file ----- Enter the default configure file to use rather than assume a fixed one
+
+modify_fsurdat add options:
+--fsurdat_in -- to input on command line rather than config file
+--fsurdat_out -- to input on command line rather than config file
+--allow_ideal_and_include_non_veg -- to allow idealized and include_non_veg at the same time
+--allow_dom_pft_and_idealized -- to allow dom_pft and idealized at the same time
+--overwrite -- allow output file to be overwritten
+config file options:
+process_subgrid_section -- Read in an optional section to set the PCT_* fractions
+process_var_list_section - Read in an optional section to set any variable on the file
+
+Add --silent option to python tools.
+
+
+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] clm5_1
+
+[x] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[x] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #1676 -- live coarse maintenance respiration is not included in the root respiration
+ Fixes #1674 -- Change mksurfdata_map/mksurfdata_esmf Makefile to build single-point datasets using subset_data
+ Fixes #1809 -- Add ability to name a different default config file for subset_data
+ Fixes #1941 -- Add --silent option to ctsm_logging python infrastructure
+ Fixes #1942 -- Move py_env_create outside of tools test driver, as fails on compute nodes on cheyenne
+ Fixes #1924 -- Some updates to fsurdat_modifier script
+ Fixes #1690 -- Set and use zetamaxstable for BHS cases
+ Fixes #1689 -- Set zetamaxstable to 2 consistently for BHS
+
+Externals issues fixed (include issue #):
+ MOSART #58 Make negative and direct_to_outlet the default option
+ MOSART #56 Some issues with direct_to_outlet
+
+Notes of particular relevance for users
+---------------------------------------
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables): tools
+ Just to the subset_data and fsurdat_modifier tools as outlined above
+
+Changes made to namelist defaults (e.g., changed parameter values):
+ zetamaxstable now 2.0 is use_biomass_heat_storage is on
+
+Changes to the datasets (e.g., parameter, surface or initial files): Single point fsurdat
+ 1x1_brazil, 1x1_numaIA, 1x1_smallvilleIA, 1x1_vancouverCAN, 1x1_mexicocityMEX, 1x1_urbanc_alpha
+ surface datasets and 1x1_brazil landuse.timeseries
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+ tools test now just activates the ctsm_py conda environment rather than creating it
+ There are seperate configure files for each urban surface dataset for modify_fsurdat
+ There is a 1850 configure file for subset_data
+
+Changes to tests or testing:
+ fsurdatmodifyctsm.py script adjusted to compensate for changes
+ python directory changes include unit and system tests to support updates
+ Single point mksurdata_map tests were removed
+
+
+Testing summary: regular tools
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS
+
+ tools-tests (test/tools) (if tools have been changed):
+
+ cheyenne - PASS
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: clm5_1, supported single point resolutions
+ - what platforms/compilers: All
+ - nature of change: adjusted climate
+ clm5_1 changes because zetmaxstable set to 2.0. If a simulation runs long enough
+ this max will be hit and it will change answers once it does. But if stability
+ doesn't hit the max answers can be identical.
+ clm5_0 and clm4_5 also change if biomass heat storage is turned on
+ single point resolutions (i.e. 1x1_smallvilleIA, 1x1_brazil, 1x1_mexicocityMEX) have differences
+ maintenence respiration
+
+ If this tag changes climate describe the run(s) done to evaluate the new
+ climate (put details of the simulations in the experiment database)
+ Keith Oleson ran experiments with changing zetamaxstable some slides showing this are here:
+ https://docs.google.com/presentation/d/1u6ycr7F97QYYRcRfEdD9yIxH75diUx2r
+
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): mosart
+ mosart updated to mosart1_0_48
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+ #1812 -- Get single point surface datasets from subset_data rather than mksurfdata
+ #1802 -- Make zetamaxstable consistently 2.0 when BHS on
+ #1915 -- Fix issue #1864 in release documentation
+ Update manage_externals (direct push to main-dev)
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev115
+Originator(s): rgknox (Ryan Knox)
+Date: Fri Dec 2 15:45:32 MST 2022
+One-line Summary: API compatability with FATES V2 nutrient dynamics
+
+Purpose and description of changes
+----------------------------------
+
+This set of changes allows CTSM to continue API compatability with changes to the FATES API. FATES has updated its nutrient dynamics routine, and required a modification to the test environment, some minor updates to variable dimensions in the history, and a call to a new FATES history routine. Implicitly, the updating of the FATES tag introduces new content in the FATES model since the last API update (mostly bug fixes).
+
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+
+The changes here will only affect FATES simulations. Any FATES simulation will be affected. Carbon-only FATES simulations will not have qualitatively different results since the last API update (but will have bit-for-bit differences). Nutrient enabled FATES simulations (not fully coupled to CLM, only via prognosed plant N,P boundaries), and FATES-Hydro simulations (bug fix) will be different.
+
+Bugs fixed or introduced
+------------------------
+
+See the descriptions in FATES tags between sci.1.57.4_api.24.0.0 to sci.1.60.0_api.25.0.0 for details on FATES changes in this tag.
+
+CTSM issues fixed (include CTSM Issue #): None
+
+Externals issues fixed (include issue #): None
+
+Known bugs introduced in this tag (include issue #): None
+
+Known bugs found since the previous tag (include issue #): None
+
+
+Notes of particular relevance for users
+---------------------------------------
+
+This set of changes comes with an updated FATES parameter file. This includes format changes only. No changes to variable values were introduced. Format changes are relegated to new parameters and/or name changes only. These changes are encapsulated in: fates/parameter_files/archive/apichange_24.2to25.xml
+
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Nothing of note regarding changes for developers.
+
+Changes to tests or testing: New history variables were added to the FATES PRT2 user_nl_clm.
+
+
+Testing summary:
+----------------
+
+regular
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- nominal: /glade/scratch/rgknox/tests_1201-121507ch
+ izumi ------- nominal: /scratch/cluster/rgknox/tests_1201-122133iz
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- nominal against ctsm5.1_dev112 /glade/scratch/rgknox/tests_1130-082657ch
+ izumi ------- NA
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: FATES answers changed relative to base. Explanation already provided (nutrient and hydro changes are qualitative).
+
+
+Other details
+-------------
+
+FATES external was updated.
+
+Pull Requests that document the changes (include PR ids):
+
+https://github.com/ESCOMP/CTSM/pull/1874
+https://github.com/NGEET/fates/pull/880
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev114
+Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326)/@wwieder/@olyson/@ka7eh
+Date: Sat Nov 19 18:11:15 MST 2022
+One-line Summary: Some NEON updates fixing AG sites, update MOSART, small fixes
+
+Purpose and description of changes
+----------------------------------
+
+Minor changes to python scripts and usermod_dirs for NEON cases. Also update the lightning mesh file so that it goes with the
+smaller lightning file. Have NEON use new use-cases for 2018 and 2018-PD conditions for CLM. Have NEON
+Agricultural sites run with prognostic crop. Simple fix for warning about NaN's in import/export data from/to coupler.
+
+Get NEON tests working on izumi, add --inputdata-dir to subset_data and modify_singlept_site_neon.py so they aren't tied
+to only running on cheyenne.
+
+Also update MOSART with fixed for direct_to_outlet option.
+
+Add error checking in ParitionWoodFluxes. Fix value of albgrd_col in SurfaceAlbefdoType.F90.
+Previously, the wrong value (albgri_col) was being set in InitHistory.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #1871 -- Error in NEON surface datasets for AG sites
+ Fixes #1876 -- NEON data in container
+ Fixes #1889 -- NEON AG sites are running without prognostic crop
+ Fixes #1363 -- 2018_control and 2018-PD_transient use-cases for NEON
+ Fixes #1896 -- Improve misleading error message in check_for_nans
+ Fixes #1263 -- Fix partitionWood fluxes
+ Fixes #1788 -- Fix albgrd_col
+ Fixes #1901 -- Fix NEONSITE YELL
+
+ Some on #1910 -- add pandas version check to modify_singlept_site_neon.py so will abort cleanly if version not updated
+
+ Known bugs found since the previous tag (include issue #):
+ #1910 -- modify_singlept_site_neon.py has trouble on izumi
+
+Notes of particular relevance for users
+---------------------------------------
+
+Caveats for users (e.g., need to interpolate initial conditions):
+ NEON users: use neon_gcs_upload now. Filenames for NEON surface
+ datasets are changed. Start and end of simulations is different
+ for some sites, and managed by the user-mod-directories. The NEON
+ user-mod assumes transient cases will run with a transient compset
+ and the settings are slightly different for transient vs control
+ including pointing to 2018_control or 2018-PD_transient use-cases.
+
+Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables):
+ Add notes to python tools to run using conda environment setup in py_env_create
+
+Changes made to namelist defaults (e.g., changed parameter values):
+ New use cases: 2018_control and 2018-PD_transient
+
+Changes to the datasets (e.g., parameter, surface or initial files):
+ New updated NEON surface datasets
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Caveats for developers (e.g., code that is duplicated that requires double maintenance):
+ Remove toolchain python scripts as this work was moved over to the ctsm5.2 development
+
+Changes to tests or testing:
+ Add a run_black target to the python directory Makefile to run black and not just do a black check
+ Add python modules needed for neon scripts to conda py_create_env conda environment
+
+Testing summary: regular, tools
+----------------
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - OK (141 NEON tests are different than baseline)
+
+ tools-tests (test/tools) (if tools have been changed):
+
+ cheyenne - OK
+ cheyenne (NEON) - PASS
+ izumi (NEON) -- OK (modify_singlept_site_neon.py test fails due to #1910)
+ izumi -- OK
+
+ python testing (if python code has changed; see instructions in python/README.md; document testing done):
+
+ Acheyenne -- PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ any other testing (give details below):
+ run_neon.py ran for all NEON sites ad, post-ad, and transient
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: No (other than NEON sites, and if direct_to_outlet turned on in MOSART)
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations: NEON or if bypass_routing_option==direct_to_outlet in MOSART
+ - what platforms/compilers: all
+ - nature of change:
+ NEON AG sites are significantly different
+
+ NEON sites reran and reevaluated
+ MOSART direct_to_outlet option evaluated by @swensosc and @olyson
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): mosart
+ mosart updated from mosart1_0_45 to to mosart1_0_47 (asynchronous changes, and direct_to_outlet fixes)
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+ #1872 -- NEON updates
+ #1814 -- Add error checking in partitionWoodFluxes
+ #1810 -- Fix albdgrd_col value
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev113
+Originator(s): sacks (Bill Sacks), ekluzek (Erik Kluzek), jedwards (Jim Edwards)
+Date: Fri Oct 28 11:00:26 MDT 2022
+One-line Summary: Fix some compsets; add only clauses for ESMF use statements
+
+Purpose and description of changes
+----------------------------------
+
+(1) Fix I1850Clm51BgcCrop compset (was using CLM50 instead of CLM51)
+- Resolves https://github.com/ESCOMP/CTSM/issues/1882
+
+(2) Change LND_TUNING_MODE for DATM%CPLHIST compsets to use CAM tunings
+ since these cases typically use atmosphere forcings from CAM.
+- Resolves https://github.com/ESCOMP/CTSM/issues/1885
+
+(3) Add "only" clauses to ESMF use statements
+- Resolves https://github.com/ESCOMP/CTSM/issues/1846
+
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+CTSM issues fixed (include CTSM Issue #):
+- Resolves https://github.com/ESCOMP/CTSM/issues/1882 (I1850Clm51BgcCrop actually uses CLM50)
+- Resolves https://github.com/ESCOMP/CTSM/issues/1885 (CPLHIST compsets should use same land tunings as for CAM compsets)
+- Resolves https://github.com/ESCOMP/CTSM/issues/1846 (Add "only" clause to a problematic use statement in lnd_comp_nuopc for cce compiler)
+
+Known bugs introduced in this tag (include issue #):
+- https://github.com/ESCOMP/CTSM/issues/1887 (Gnu MCT builds will fail starting in ctsm5.1.dev113)
+
+
+Testing summary:
+----------------
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: YES, but just for limited cases
+
+ Summarize any changes to answers, i.e.,
+ - what code configurations:
+ - Cases with I1850Clm51BgcCrop compset
+ - Cases with DATM%CPLHIST
+ - what platforms/compilers: all
+ - nature of change (roundoff; larger than roundoff/same climate; new climate):
+ Larger than roundoff; may be new climate
+
+Other details
+-------------
+Pull Requests that document the changes (include PR ids):
+https://github.com/ESCOMP/CTSM/pull/1870
+
+===============================================================
+===============================================================
+Tag name: ctsm5.1.dev112
+Originator(s): adrifoster (Adrianna Foster), glemieux (Gregory Lemieux, LBL/NGEET)
+Date: Sat Oct 15 16:26:28 MDT 2022
+One-line Summary: Rework fates test definitions and add new fates tests
+
+Purpose and description of changes
+----------------------------------
+
+This tag includes a number of updates to the fates test definitions and test list to gain more coverage:
+
+(1) Reorder and update the fates test definitions so that fates satellite phenology mode
+can be configured for cases using a compset.
+
+(2) Add a long-term exact restart test to catch issues that may arise due to updates to
+fates procedure calls during end of year simulation dates.
+
+(3) Add a no-competition + fixed biogeography, non-satellite phenology test definition to provide
+additional mode combination configuration.
+
+(4) Update the fates externals tag to incorporate a fix a vegetation temperature exact restart
+issue discovered while implementing (1) above.
+
+(5) Truncate all testmods starting with "Fates" to mitigate running over the limits on the length
+of testnames, typically when specifying custom `test_id` using `run_sys_test`.
+
+(6) Updates the expected failures list.
+
+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.]
+
+[ ] clm5_1
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed or introduced
+------------------------
+
+CTSM issues fixed (include CTSM Issue #):
+ Fixes #1839 - Add more FATES tests that are longer than one year
+ Fixes #1817 - Make sure at least one test running FatesSp just uses the compset and not a test-mod directory
+ Fixes #1551 - Add FATES NoComp + FixedBiogeog regression test to the fates category of tests
+
+Externals issues fixed (include issue #):
+ FATES#908 - Bareground area_pft not being carried over during restarts
+ FATES#911 - 24-hr running mean vegetation temperature is not b4b on threaded exact restart SatPhen test
+
+Notes of particular relevance for developers:
+---------------------------------------------
+
+Changes to tests or testing:
+ FATES#897 is still unresolved, but is now covered by this updated test list.
+ FATES#701 was reopened
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ cheyenne - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ cheyenne ---- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ cheyenne ---- OK
+ izumi ------- OK
+
+ any other testing (give details below):
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+ FATES tests run against both fates-sci.1.58.1_api.24.1.0-ctsm5.1.dev111 to check the
+ fates update against the previous baseline is in line with expected DIFFs and
+ fates-sci.1.59.7_api.24.1.0-ctsm5.1.dev111.
+
+Answer changes
+--------------
+
+Changes answers relative to baseline:
+ Yes, for fates run modes only due non-b4b updates in multiple fates tags. These
+ include both software bug fixes and answer changing science updates.
+
+Other details
+-------------
+
+List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): fates
+
+Pull Requests that document the changes (include PR ids):
+
+ https://github.com/ESCOMP/CTSM/pull/1827
+ https://github.com/ESCOMP/CTSM/pull/1849
+
+
+===============================================================
+===============================================================
Tag name: ctsm5.1.dev111
Originator(s): jedwards (Jim Edwards), wwieder (Will Wieder), sacks (Bill Sacks)
Date: Wed Oct 5 13:05:52 MDT 2022
diff --git a/doc/ChangeSum b/doc/ChangeSum
index cdbc339758..d644cff144 100644
--- a/doc/ChangeSum
+++ b/doc/ChangeSum
@@ -1,5 +1,61 @@
Tag Who Date Summary
============================================================================================================================
+ ctsm5.1.dev167 samrabin 02/08/2024 Delete _FillValue and history from parameter files
+ ctsm5.1.dev166 multiple 01/24/2024 BFB merge tag
+ ctsm5.1.dev165 slevis 01/19/2024 Turn Meier2022, tillage, residue removal on for ctsm5.1, fix #2212
+ ctsm5.1.dev164 rgknox 01/17/2024 Compatibility and tests for FATES 2-Stream
+ ctsm5.1.dev163 samrabin 01/10/2024 Add tillage and residue removal
+ ctsm5.1.dev162 samrabin 01/05/2024 Improvements to processing of crop calendar files
+ ctsm5.1.dev161 samrabin 01/04/2024 Refactor 20-year running means of crop GDD accumulation
+ ctsm5.1.dev160 glemieux 12/30/2023 FATES landuse version 1
+ ctsm5.1.dev159 multiple 12/12/2023 Various BFB fixes and updates
+ ctsm5.1.dev158 erik 12/07/2023 First tag with testing moved to Derecho and working PE-layouts for Derecho
+ ctsm5.1.dev157 samrabin 12/05/2023 Update Externals to work on Derecho
+ ctsm5.1.dev156 samrabin 11/30/2023 Do not use Meier roughness by default.
+ ctsm5.1.dev155 samrabin 11/27/2023 Use baset_latvary parameters
+ ctsm5.1.dev154 slevis 11/22/2023 New params files with changes for Meier roughness, MIMICS, and SNICAR, and changes to leafcn and k*_nonmyc
+ ctsm5.1.dev153 afoster 11/17/2023 Call new FATES-side FatesReadParameters
+ ctsm5.1.dev152 multiple 11/14/2023 Mv tools to /python and add tests; add snow_thermal_cond_method; a few fixes / refactors
+ ctsm5.1.dev151 rgknox 11/11/2023 Fixes to FATES long run restarts
+ ctsm5.1.dev150 rgknox 11/06/2023 FATES API fix to support future fates npp-fixation coupling, and urgent coupling fixes with E3SM.
+ ctsm5.1.dev149 samrabin 11/03/2023 Rearrange leaf/stem "harvest" and fix soil gas diffusivity
+ ctsm5.1.dev148 samrabin 11/03/2023 Add GRAINN outputs
+ ctsm5.1.dev147 samrabin 10/30/2023 Add sowing window input files
+ ctsm5.1.dev146 glemieux 10/24/2023 FATES cross-grid seed dispersal
+ ctsm5.1.dev145 slevis 10/19/2023 SNICAR snow albedo scheme updates
+ ctsm5.1.dev144 samrabin 10/19/2023 Remove a deprecated shr_mpi_bcast call
+ ctsm5.1.dev143 rgknox 10/13/2023 Zeroing of wood product fluxes on fates columns
+ ctsm5.1.dev142 samrabin 09/19/2023 Merge 5 bit-for-bit pull requests
+ ctsm5.1.dev141 slevis 09/13/2023 Change small snocan to zero
+ ctsm5.1.dev140 afoster 09/12/2023 add lai_streams capability for FATES
+ ctsm5.1.dev139 slevis 08/28/2023 Fix problems uncovered by nag -nan tests
+ ctsm5.1.dev138 slevis 08/25/2023 Refactor max_patch_per_col and maxsoil_patches loops
+ ctsm5.1.dev137 slevis 08/23/2023 Surface roughness modifications
+ ctsm5.1.dev136 multiple 08/22/2023 Change order of history fields to improve performance on derecho
+ ctsm5.1.dev135 slevis 08/21/2023 Rename hist fields to track them down more easily
+ ctsm5.1.dev134 rgknox 08/16/2023 Migration of FATES to share normal soil BGC call sequence and functionality
+ ctsm5.1.dev133 glemieux 08/09/2023 FATES API update to facilitate fates refactor
+ ctsm5.1.dev132 slevis 08/04/2023 Add parameterization to allow excess ice in soil and subsidence
+ ctsm5.1.dev131 samrabin 07/27/2023 Enable prescribed crop calendars
+ ctsm5.1.dev130 glemieux 07/09/2023 FATES parameter file and test definition update
+ ctsm5.1.dev129 erik 06/22/2023 NEON fixes for TOOL and user-mods, add SP for NEON, some history file updates, black refactor for buildlib/buildnml
+ ctsm5.1.dev128 glemieux 06/01/2023 Update FATES tests to double precision
+ ctsm5.1.dev127 sacks 05/19/2023 Fix nuopc cplhist test
+ ctsm5.1.dev126 jpalex 05/18/2023 Clean up some loops in UrbanTimeVarType
+ ctsm5.1.dev125 jpalex 05/17/2023 Added cache for clock step_size in clm_time_manager.F90
+ ctsm5.1.dev124 erik 05/09/2023 Initialization memory update, new surface datasets for new grids, add option for running NEON with PRISM data
+ ctsm5.1.dev123 sacks 05/01/2023 Updates needed for pFUnit 4 and other externals updates
+ ctsm5.1.dev122 sacks 04/23/2023 Rework handling of evaporation constraint in SoilFluxes
+ ctsm5.1.dev121 glemieux 04/05/2023 Changes soil moisture initialization logic for FATES
+ ctsm5.1.dev120 sacks 03/25/2023 Update externals and minor fixes
+ ctsm5.1.dev119 slevis 03/16/2023 Allow gross unrepresented land use transition (PR #309)
+ ctsm5.1.dev118 slevis 02/05/2023 Use conda environment rather than ncar_pylib with the fsurdat_modifier system test
+ ctsm5.1.dev117 afoster 02/02/2023 Updates to facilitate running FATES at NEON sites
+ ctsm5.1.dev116 erik 01/26/2023 Small answer changes with bug fixes, zetamaxstable=2 for BHS, new single point fsurdat files
+ ctsm5.1.dev115 rgknox 12/02/2022 API compatability with FATES V2 nutrient dynamics
+ ctsm5.1.dev114 multiple 11/19/2022 Some NEON updates fixing AG sites, update MOSART, small fixes
+ ctsm5.1.dev113 multiple 10/28/2022 Fix some compsets; add only clauses for ESMF use statements
+ ctsm5.1.dev112 multiple 10/15/2022 Rework fates test definitions and add new fates tests
ctsm5.1.dev111 multiple 10/05/2022 Fixes for NEON cases
ctsm5.1.dev110 slevis 09/26/2022 Introduction of modify_meshes tool for use in I-cases and F-cases
ctsm5.1.dev109 slevis 09/26/2022 If not MIMICS, do not output certain MIMICS history fields
diff --git a/doc/README.CHECKLIST.master_tags b/doc/README.CHECKLIST.master_tags
index 31c09895be..ed7794130b 100644
--- a/doc/README.CHECKLIST.master_tags
+++ b/doc/README.CHECKLIST.master_tags
@@ -55,6 +55,14 @@ https://github.com/ESCOMP/ctsm/wiki/CTSM-development-workflow
---- THE FOLLOWING CAN ONLY BE DONE BY INTEGRATORS ----
+NOTE (especially for new integrators): Be sure to follow the recommended
+git setup in
+.
+Especially note that you should never use something like `git merge
+escomp/master` to merge the upstream master branch into your local copy:
+instead, you should always use `git pull` with the recommended
+configuration settings (or `git merge --ff-only`) for that scenario.
+
(7) Merge the PR to master when review is approved
(8) Compare master to branch show that they are identical
@@ -65,7 +73,10 @@ This should show no diffs
(9) Make an annotated tag on master
-(10) Push master and tag to ESCOMP/ctsm
+(10) Push tag to ESCOMP/ctsm
+
+(10a) Push to master (if needed because you changed something in master after PR was merged, or
+if you did step 7 above using git commands that require this step)
(11) Update the CTSM upcoming tags project, if necessary
(https://github.com/ESCOMP/ctsm/projects/6)
diff --git a/doc/design/dynamic_urban.rst b/doc/design/dynamic_urban.rst
index 0ca5d488f4..fa7a499725 100644
--- a/doc/design/dynamic_urban.rst
+++ b/doc/design/dynamic_urban.rst
@@ -6,18 +6,18 @@
Overview of this design document
==================================
-This documents some of the high-level design decisions made during implementation of
+This documents some of the high-level design decisions made during implementation of
dynamic urban landunits.
============================================================================
The use of dzsoi_decomp for urban landunits to calculate totcolch4 in ch4Mod.F90
============================================================================
-During the first test simulation for dynamic urban, we encountered a methane conservation
-error the first time PCT_URBAN changed. The dynamic adjustments for conc_ch4_sat_col and
+During the first test simulation for dynamic urban, we encountered a methane conservation
+error the first time PCT_URBAN changed. The dynamic adjustments for conc_ch4_sat_col and
conc_ch4_unsat_col (the column_state_updater in subroutine DynamicColumnAdjustments within
ch4Mod.F90) were distributing non-zero values for roof and walls for layers 1,nlevsoi.
-When the total column ch4 is summed over the soil layers (or in this case, urban layers), the
-summation is done over nlevsoi, not nlevurb, using dz. dz is 1.e36 for roof/wall layers
+When the total column ch4 is summed over the soil layers (or in this case, urban layers), the
+summation is done over nlevsoi, not nlevurb, using dz. dz is 1.e36 for roof/wall layers
that are greater than nlevurb, thus creating an imbalance.
Rather than trying to keep the BGC variables physically meaningful in urban landunits,
diff --git a/doc/design/python_script_user_interface.rst b/doc/design/python_script_user_interface.rst
index 4dd0c9c546..3ad6a4d2cf 100644
--- a/doc/design/python_script_user_interface.rst
+++ b/doc/design/python_script_user_interface.rst
@@ -40,8 +40,8 @@ Options that are more than a single character should be formatted as ``--some-va
2. Standard options: verbose, silent, help and debug:
-Scripts should support ``--verbose`` / ``-v`` and ``--debug`` options. See comments at the top of ``ctsm_logging.py`` for details.
-Also the options silent and help are recommended as well.
+Scripts should support ``--verbose`` / ``-v``, ''--silent'', and ``--debug`` options. See comments at the top of ``ctsm_logging.py`` for details.
+Also the help option is highly recommended as well.
3. Value flags:
diff --git a/doc/design/water_tracers.rst b/doc/design/water_tracers.rst
index b52d653393..c17b14a43d 100644
--- a/doc/design/water_tracers.rst
+++ b/doc/design/water_tracers.rst
@@ -30,7 +30,7 @@ Broadly speaking, we considered three ways to store information for each tracer:
``h2osoi_liq_col_tracer(c,j,m)`` for tracers).
3. Multiple instances of ``waterstate_type`` (etc.), with no extra dimension required for
- individual variables.
+ individual variables.
We decided to go with option (3) for a number of reasons:
diff --git a/doc/source/conf.py b/doc/source/conf.py
index bee524164a..dcd0b2eae6 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -37,7 +37,6 @@
'sphinx.ext.autodoc',
'sphinx.ext.todo',
'sphinx.ext.coverage',
- 'sphinx.ext.imgmath',
'sphinx.ext.githubpages']
# Add any paths that contain templates here, relative to this directory.
@@ -94,8 +93,6 @@
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True
-imgmath_image_format = 'svg'
-
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
diff --git a/doc/source/lilac/obtaining-building-and-running/index.rst b/doc/source/lilac/obtaining-building-and-running/index.rst
index 14dc6f40be..0739800137 100644
--- a/doc/source/lilac/obtaining-building-and-running/index.rst
+++ b/doc/source/lilac/obtaining-building-and-running/index.rst
@@ -9,4 +9,5 @@
obtaining-and-building-ctsm.rst
setting-ctsm-runtime-options.rst
+ notes-on-running-ctsm.rst
restarting.rst
diff --git a/doc/source/lilac/obtaining-building-and-running/notes-on-running-ctsm.rst b/doc/source/lilac/obtaining-building-and-running/notes-on-running-ctsm.rst
new file mode 100644
index 0000000000..1e3d36cdf7
--- /dev/null
+++ b/doc/source/lilac/obtaining-building-and-running/notes-on-running-ctsm.rst
@@ -0,0 +1,26 @@
+.. highlight:: shell
+
+.. _notes-on-running-ctsm:
+
+=======================
+ Notes on running CTSM
+=======================
+
+.. _runtime-environment-variables:
+
+Environment variables that may need to be set at runtime
+========================================================
+
+With the MPT MPI library (which is the default MPI library on NCAR's cheyenne machine), it is important to set the environment variable ``MPI_TYPE_DEPTH`` to 16 when running CTSM (this setting is required by the Parallel IO library). Typically you should set this variable in your job submission script, using either:
+
+.. code-block:: Bash
+
+ export MPI_TYPE_DEPTH=16
+
+or:
+
+.. code-block:: Tcsh
+
+ setenv MPI_TYPE_DEPTH 16
+
+prior to running the model.
diff --git a/doc/source/lilac/obtaining-building-and-running/obtaining-and-building-ctsm.rst b/doc/source/lilac/obtaining-building-and-running/obtaining-and-building-ctsm.rst
index 99cb908d28..c0e510c017 100644
--- a/doc/source/lilac/obtaining-building-and-running/obtaining-and-building-ctsm.rst
+++ b/doc/source/lilac/obtaining-building-and-running/obtaining-and-building-ctsm.rst
@@ -250,7 +250,6 @@ Makefile-formatted file gives variables that should be set in the atmosphere mod
build. :ref:`See below for information on how to use this
file`.
-
Rebuilding after changing CTSM source code
------------------------------------------
diff --git a/doc/source/lilac/specific-atm-models/index.rst b/doc/source/lilac/specific-atm-models/index.rst
index b5c3d2bc08..317732fb58 100644
--- a/doc/source/lilac/specific-atm-models/index.rst
+++ b/doc/source/lilac/specific-atm-models/index.rst
@@ -1,7 +1,7 @@
.. _specific-atm-models:
==============================================================
- Instructions on using CTSM with specific atmosphere models
+ Instructions on using CTSM with specific atmosphere models
==============================================================
.. toctree::
diff --git a/doc/source/lilac/specific-atm-models/wrf-nesting.rst b/doc/source/lilac/specific-atm-models/wrf-nesting.rst
index b21593029b..f4c4570f2f 100644
--- a/doc/source/lilac/specific-atm-models/wrf-nesting.rst
+++ b/doc/source/lilac/specific-atm-models/wrf-nesting.rst
@@ -11,15 +11,15 @@ nested domain.
A nested domain is usually used to have a finer-resolution domain within the
coarser model domain. A nested simulation enables running at a higher
-resolution over a smaller domain
+resolution over a smaller domain
.. note::
A nest should cover a portion of the parent domain and is fully contained by
the parent domain, so that it is driven along its lateral boundaries by the
- parent domain.
+ parent domain.
.. todo::
- Negin wants to add a flowchart showing the workflow of a nested case.
+ Negin wants to add a flowchart showing the workflow of a nested case.
There are currently two types of nesting available within WRF:
@@ -33,10 +33,10 @@ There are currently two types of nesting available within WRF:
- Also, the averaged values from the inner domain are being sent back to the outer domain at the corresponding grid points.
.. important::
- Currently, the WRF-CTSM coupling infrastructure only support one-way nesting.
- This example clarifies the workflow for running a nested WRF-CTSM case using one-way nesting with ``ndown.exe``.
+ Currently, the WRF-CTSM coupling infrastructure only support one-way nesting.
+ This example clarifies the workflow for running a nested WRF-CTSM case using one-way nesting with ``ndown.exe``.
-The procedure for running a nested simulation for WRF with CTSM is
+The procedure for running a nested simulation for WRF with CTSM is
similar to the workflow for running WRF real cases, except that it requires
additional steps to (1) clone the CTSM repository, (2) build
CTSM and LILAC, and (3) define namelist options reuired for CTSM.
@@ -46,14 +46,12 @@ A full description of all steps for a WRF-CTSM run are included here.
.. important::
This section assumes the user has completed all the steps required for
- WRF-CTSM simulation single domain.
+ WRF-CTSM simulation single domain.
Therefore, we are not repeating the steps necessary for building WRF and
- CTSM.
-
+ CTSM.
In this example we use a nested domain over the CONUS as shows below:
-
.. _Figure ctsm-ndown:
.. figure:: ndown_ctsm_diagram.svg
@@ -105,7 +103,7 @@ Nested Simulations : Pre-processing (ungrib.exe)
-------------------------------------------------
As mentioned previously, the purpose of the ungrib script is to unpack GRIB
meteorological data and pack it into an intermediate file format.
-This step is exactly identical to a non-nested simulation.
+This step is exactly identical to a non-nested simulation.
Run ungrib to get gribbed data into usable format to be ingested by WRF.
@@ -128,12 +126,11 @@ Check ungrib log for the following message showing successful completion of ungr
At this point, you should see ungrib output (intermediate files) in your WPS directory.
-
Nested Simulations : Pre-processing (metgrid.exe)
-------------------------------------------------
Ensure that the `start_date` and `end_date` for domain two is set correctly for
your simulation.
-Next, run ``metgrid.exe``::
+Next, run ``metgrid.exe``::
./metgrid.exe >& log.metgrid
@@ -144,14 +141,12 @@ metgrid step::
! Successful completion of metgrid. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
Running metgrid for two domains will create files like
below::
+
met_em.d01.*
met_em.d02.*
-
-
Nested Simulations : real.exe
------------------------------
@@ -160,31 +155,30 @@ both domains.
In summary, complete the following steps:
-Move or link WPS output files (``met_em.d01*`` and ``met_em.d02`` files) to your WRF test directory.
+Move or link WPS output files (``met_em.d01*`` and ``met_em.d02`` files) to your WRF test directory.
Edit namelist.input for your WRF domain and desirable configurations.
This should be the same domain as WPS namelist. Make sure you set ``max_dom =
-2,`` in the namelist.
+2,`` in the namelist.
To run WRF-CTSM, in your namelist change land-surface option to 6 for both
domains::
- sf_surface_physics = 6, 6,
-
+ sf_surface_physics = 6, 6,
Run real.exe (if compiled parallel submit a batch job) to generate
-initail and boundary condition files for both domain.
+initail and boundary condition files for both domain.
Make sure the following three files have been created in your directory::
wrfinput_d01
wrfinput_d02
wrfbdy_d01
-The boundary condition file is only created for the outer domain.
+The boundary condition file is only created for the outer domain.
-Check the last line of the real log file for the following message::
+Check the last line of the real log file for the following message:
-Rename wrfinput_d02
+Rename wrfinput_d02
-------------------
Next, rename the ``wrfinput_d02`` file to ``wrfndi_d02``::
@@ -199,24 +193,24 @@ Add the following into your namelist.input file under ``&time_control``::
io_form_auxinput2 = 2
-Run ndown.exe to create ``wrfinput_d02`` and ``wrfbdy_d02``.
+Run ndown.exe to create ``wrfinput_d02`` and ``wrfbdy_d02``.
-Run WRF for coarser domain
+Run WRF for coarser domain
---------------------------
In this step, run WRF for the outer domain.
-Make sure that ``max_dom = 1`` to run only for the coarser domain.
+Make sure that ``max_dom = 1`` to run only for the coarser domain.
This step is exactly identical as the previous example and only creates the
-``wrfout*`` files for the coarser domain.
+``wrfout*`` files for the coarser domain.
Please make sure to copy ``lnd_in`` , ``lilac_in``, and ``lnd_modelio`` for the
-coarser domain in this directory.
+coarser domain in this directory.
Create CTSM runtime files for the fine domain
---------------------------------------------
This step is in addition creating CTSM runtime files for coarser domain which
was explained here. For succesfully completing the previous step you should
-have already created these files for the coarser domain.
+have already created these files for the coarser domain.
.. seealso::
@@ -225,7 +219,6 @@ have already created these files for the coarser domain.
files for the finer domain you should follow the steps in section
:numref:`setting-ctsm-runtime-options`.
-
Again, the goal here is to create files that determine CTSM runtime options which
are defined within these three files:
@@ -235,20 +228,18 @@ are defined within these three files:
- ``lilac_in``: This namelist controls the operation of LILAC
-
-Run WRF for the finer domain
+Run WRF for the finer domain
-----------------------------
First, save (rename or move) the data from the coarser domain simulation
(``wrfout_d01_*`` files).
Next, rename ``wrfinput_d02`` and ``wrfbdy_d02`` to ``wrfinput_d01`` and ``wrfbdy_d01``, respectively.
-
Edit namelist.input, moving all of the fine-grid domain data from column 2 to column 1
so that this run will be for the fine-grid domain only. Make sure you set
`max_dom=1` and set your `time_step` based on the finer domain.
-.. note::
- It may be beneficial to save namelist.input to something else prior to this step in case you need to repeat this
+.. note::
+ It may be beneficial to save namelist.input to something else prior to this step in case you need to repeat this
process in the future. Save the newly-edited namelist as namelist.input .
Now run wrf.exe by submitting a job similar to a not-nested case.
@@ -256,7 +247,5 @@ Now run wrf.exe by submitting a job similar to a not-nested case.
.. important::
The output for the finer domain is wrfout_d01_* not wrfout_d02_* and although
- in the name it is saying d01 it is technically d02 domain.
-
-
+ in the name it is saying d01 it is technically d02 domain.
diff --git a/doc/source/lilac/specific-atm-models/wrf-tools.rst b/doc/source/lilac/specific-atm-models/wrf-tools.rst
index 8b3c423a58..0366bc1582 100644
--- a/doc/source/lilac/specific-atm-models/wrf-tools.rst
+++ b/doc/source/lilac/specific-atm-models/wrf-tools.rst
@@ -9,8 +9,6 @@
This section includes instructions on tools and utilities developed for
WRF-CTSM simulations.
-
-
Generate CTSM surface dataset for a WRF domain
----------------------------------------------
@@ -18,7 +16,6 @@ Before this step, make sure you have successfully created geo_em* files for
your specific WRF domain using WPS. Instructions on how to run ``geogrid.exe``
is described in here.
-
1. Create SCRIP grid file from WRF ``geo_em*`` files, using the following ncl
script::
@@ -39,7 +36,6 @@ is described in here.
ncl mkunitymap.ncl
-
.. warning::
This will throw some git errors if not run in a repository.
@@ -52,7 +48,6 @@ is described in here.
../../../configure --macros-format Makefile --mpilib mpi-serial
-
5. Generate CTSM domain files using ``get_domain`` tool::
./gen_domain -m /glade/work/$USER/ctsm/nldas_grid/scrip/wrf2clm_mapping_noneg.nc -o wrf2clm_ocn_noneg -l wrf2clm_lnd_noneg
@@ -61,20 +56,15 @@ is described in here.
./mksurfdata.pl -res usrspec -usr_gname "nldas" -usr_gdate "190124" -usr_mapdir "/glade/work/$USER/ctsm/nldas_grid/map" -y 2000 -exedir "/glade/u/home/$USER/src/ctsm/ctsm_surfdata/tools/mksurfdata_map" -no-crop
-
-
Merge WRF initial conditions into an existing CTSM initial condition file
--------------------------------------------------------------------------
The following procedure is if you'd wish to merget WRF inital conditions from
``wrfinput`` file into CTSM initial condition file ::
-
ncl transfer_wrfinput_to_ctsm_with_snow.ncl 'finidat="the_existing_finidat_file.nc"' 'wrfinput="your_wrfinput_file"' 'merged="the_merged_finidat_file.nc"'
-
.. todo::
Sam, can you please make the above ncl script available.
-
diff --git a/doc/source/lilac/specific-atm-models/wrf.rst b/doc/source/lilac/specific-atm-models/wrf.rst
index d34dd66d0b..5d104778ec 100644
--- a/doc/source/lilac/specific-atm-models/wrf.rst
+++ b/doc/source/lilac/specific-atm-models/wrf.rst
@@ -18,7 +18,7 @@ A full description of all steps for a WRF-CTSM run are included here.
Specific new steps that would not be completed in a standard WRF real case
are described in sections :numref:`clone-WRF-CTSM-repositories`,
-:numref:`build-CTSM-and-dependencies` ,
+:numref:`build-CTSM-and-dependencies` ,
and :numref:`wrf-set-ctsm-runtime-options`.
.. important::
@@ -27,8 +27,7 @@ and :numref:`wrf-set-ctsm-runtime-options`.
If CIME is not ported to your machine, please see `instructions on porting CIME
`_.
- In this example we assume NCAR’s ``Cheyenne`` HPC system in particular.
-
+ In this example we assume NCAR's ``Cheyenne`` HPC system in particular.
.. _clone-WRF-CTSM-repositories:
@@ -41,20 +40,18 @@ Clone the WRF repository and checkout ``develop`` branch::
cd WRF-CTSM
git checkout develop
-
Clone the CTSM repository::
git clone https://github.com/ESCOMP/CTSM.git
cd CTSM
./manage_externals/checkout_externals
-
.. _build-CTSM-and-dependencies:
Build CTSM and its dependencies
-------------------------------
-In your CTSM directory, build CTSM and its dependencies based on the
+In your CTSM directory, build CTSM and its dependencies based on the
instructions from section :numref:`obtaining-and-building-ctsm`::
./lilac/build_ctsm /PATH/TO/CTSM/BUILD --machine MACHINE --compiler COMPILER
@@ -63,7 +60,6 @@ For example on ``Cheyenne`` and for ``Intel`` compiler::
./lilac/build_ctsm ctsm_build_dir --compiler intel --machine cheyenne
-
.. warning::
The directory you provided for the build script (``/PATH/TO/CTSM/BUILD``) must *not* exist.
@@ -74,20 +70,19 @@ For example on ``Cheyenne`` and for ``Intel`` compiler::
Run ``./lilac/build_ctsm -h`` to see all options available.
For example if you would like to run with threading support you can use ``--build-with-openmp``.
-
Building WRF with CTSM
----------------------
First, load the same modules and set the same environments as used for CTSM build by
sourcing ``ctsm_build_environment.sh`` for Bash::
- source ctsm_build_dir/ctsm_build_environment.sh
+ source ctsm_build_dir/ctsm_build_environment.sh
or sourcing ``ctsm_build_environment.csh`` for Cshell:
.. code-block:: Tcsh
- source ctsm_build_dir/ctsm_build_environment.csh
+ source ctsm_build_dir/ctsm_build_environment.csh
Set makefile variables from CTSM needed for the WRF build by setting the following environment.
For example for Bash::
@@ -108,29 +103,27 @@ Some of these are not required, but might help if you face any compilation error
For more information check
`WRF Users' Guide `_.
-
Explicitly define the model core to build by (Bash)::
export WRF_EM_CORE=1
-or (Cshell):
+or (Cshell):
-.. code-block:: Tcsh
+.. code-block:: Tcsh
setenv WRF_EM_CORE 1
-
Explicilty turn off data assimilation by (Bash)::
export WRF_DA_CORE=0
-or (Cshell):
+or (Cshell):
-.. code-block:: Tcsh
+.. code-block:: Tcsh
setenv WRF_DA_CORE 0
-Now in your WRF directory configure and build WRF for your machine
+Now in your WRF directory configure and build WRF for your machine
and intended compiler::
./clean -a
@@ -138,7 +131,7 @@ and intended compiler::
At the prompt choose one of the options, based on the compiler used
for building CTSM. Then you should choose if you'd like to build serially or
-in parallel. For example, you can choose to build with ``intel`` compiler with
+in parallel. For example, you can choose to build with ``intel`` compiler with
distributed memory parallelization (``dmpar``).
.. tip::
@@ -149,12 +142,10 @@ distributed memory parallelization (``dmpar``).
The next prompt requests an option for nesting. Currently nesting is not
available for WRF-CTSM so select option ``1 (basic)``.
-
Now compile em_real and save the log::
./compile em_real >& compile.log
-
Check the bottom of your log file for a successful compilation message.
.. note::
@@ -178,7 +169,6 @@ skip to section :numref:`wrf-set-ctsm-runtime-options`.
Building WPS requires that WRF be already built successfully.
-
Get WPS from this website::
https://www2.mmm.ucar.edu/wrf/users/download/wrf-regist_or_download.php
@@ -202,7 +192,6 @@ Then, compile WPS::
If wps builds succesfully you should see ``geogrid.exe``, ``ungrib.exe``, and ``metgrid.exe``.
Alternatively, you can check the log for successful build messages.
-
Run WPS Programs
----------------
@@ -253,37 +242,32 @@ metgrid step::
! Successful completion of metgrid. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
Run real.exe
------------
Run ``real.exe`` to generate initial and boundary conditions.
-Follow WRF instructions for creating initial and boundary conditions.
+Follow WRF instructions for creating initial and boundary conditions.
In summary, complete the following steps:
-Move or link WPS output files (``met_em.d01*`` files) to your WRF test directory.
+Move or link WPS output files (``met_em.d01*`` files) to your WRF test directory.
Edit namelist.input for your WRF domain and desirable configurations.
This should be the same domain as WPS namelist.
-
To run WRF-CTSM, in your namelist change land-surface option to 6::
sf_surface_physics = 6
-
Run real.exe (if compiled parallel submit a batch job) to generate
``wrfinput`` and ``wrfbdy`` files.
-
Check the last line of the real log file for the following message::
SUCCESS COMPLETE REAL_EM INIT
.. _wrf-set-ctsm-runtime-options:
-
Set CTSM runtime options
------------------------
@@ -301,7 +285,6 @@ are defined within these three files:
- ``lilac_in``: This namelist controls the operation of LILAC
-
The basic process for creating the necessary input files are summarized as
follows:
@@ -342,8 +325,7 @@ Run the script ``make_runtime_inputs`` to create ``lnd_in`` and
Modify ``lilac_in`` as needed. For this example, you can use the following options::
atm_mesh_filename = '/glade/scratch/negins/wrf_ctsm_files/wrf2ctsm_land_conus_ESMFMesh_c20201110.nc'
- lnd_mesh_filename = '/glade/scratch/negins/wrf_ctsm_files/wrf2ctsm_land_conus_ESMFMesh_c20201110.nc'
-
+ lnd_mesh_filename = '/glade/scratch/negins/wrf_ctsm_files/wrf2ctsm_land_conus_ESMFMesh_c20201110.nc'
Run ``download_input_data`` script to download any of CTSM's standard input
files that are needed based on settings in ``lnd_in`` and ``lilac_in``::
@@ -361,17 +343,17 @@ Run wrf.exe
-----------
If real.exe completed successfully, we should have ``wrfinput`` and ``wrfbdy`` files
-in our directory.
+in our directory.
If you plan to use this example's preexisting files, copy
the following files to your WRF run directory::
- cp /glade/scratch/negins/wrf_ctsm_files/namelist.input .
+ cp /glade/scratch/negins/wrf_ctsm_files/namelist.input .
cp /glade/scratch/negins/wrf_ctsm_files/wrfinput_d01 .
cp /glade/scratch/negins/wrf_ctsm_files/wrfbdy_d01 .
Now run WRF-CTSM. On Cheyenne this means submitting a batch job to PBS (Pro workload management system).
-Please check NCAR CISL's `instructions on running a batch job on Cheyenne.
+Please check NCAR CISL's `instructions on running a batch job on Cheyenne.
`__
A simple PBS script to run WRF-CTSM on ``Cheyenne`` looks like this:
@@ -390,12 +372,14 @@ A simple PBS script to run WRF-CTSM on ``Cheyenne`` looks like this:
#PBS -l select=2:ncpus=36:mpiprocs=36
### Run the executable
+ setenv MPI_TYPE_DEPTH 16
mpiexec_mpt ./wrf.exe
+(See :numref:`runtime-environment-variables` for a description of the need to set ``MPI_TYPE_DEPTH`` on ``Cheyenne``.)
+
To submit a batch job to the ``Cheyenne`` queues, use ``qsub`` command followed
-by the PBS script name.
+by the PBS script name.
For example, if you named this script ``run_wrf_ctsm.csh``, submit the job like this::
qsub run_wrf_ctsm.csh
-
diff --git a/doc/source/tech_note/BVOCs/CLM50_Tech_Note_BVOCs.rst b/doc/source/tech_note/BVOCs/CLM50_Tech_Note_BVOCs.rst
index e7e8637649..5d34fdce64 100644
--- a/doc/source/tech_note/BVOCs/CLM50_Tech_Note_BVOCs.rst
+++ b/doc/source/tech_note/BVOCs/CLM50_Tech_Note_BVOCs.rst
@@ -3,61 +3,24 @@
Biogenic Volatile Organic Compounds (BVOCs)
===============================================
-This chapter briefly describes the biogenic volatile organic compound
-(BVOC) emissions model implemented in CLM. The CLM3 version (Levis et
-al. 2003; Oleson et al. 2004) was based on Guenther et al. (1995). Heald
-et al. (2008) updated this scheme in CLM4 based on Guenther et al.
-(2006). The current version was implemented in CLM4.5 and is based on MEGAN2.1 discussed in
-detail in Guenther et al. (2012). This update of MEGAN incorporates four
-main features: 1) expansion to 147 chemical compounds, 2) the treatment of the
-light-dependent fraction (LDF) for each compound, 3) inclusion of the
-inhibition of isoprene emission by atmospheric CO\ :sub:`2` and
-4) emission factors mapped to the specific PFTs of the CLM.
-
-MEGAN2.1 now describes the emissions of speciated monoterpenes,
-sesquiterpenes, oxygenated VOCs as well as isoprene. A flexible scheme
-has been implemented in the CLM to specify a subset of emissions. This
-allows for additional flexibility in grouping chemical compounds to form
-the lumped species frequently used in atmospheric chemistry. The mapping
-or grouping is therefore defined through a namelist parameter in
-drv\_flds\_in, e.g. megan\_specifier = ’ISOP = isoprene’, ’BIGALK =
-pentane + hexane + heptane + tricyclene’.
-
-Terrestrial BVOC emissions from plants to the atmosphere are expressed
-as a flux, :math:`F_{i}` (:math:`\mu` \ g C m\ :sup:`-2` ground area h\ :sup:`-1`), for emission of chemical compound
-:math:`i`
+This chapter briefly describes the biogenic volatile organic compound (BVOC) emissions model implemented in CLM. The CLM3 version (Levis et al. 2003; Oleson et al. 2004) was based on Guenther et al. (1995). Heald et al. (2008) updated this scheme in CLM4 based on Guenther et al (2006). The current version was implemented in CLM4.5 and is based on MEGAN2.1 discussed in detail in Guenther et al. (2012). This update of MEGAN incorporates four main features: 1) expansion to 147 chemical compounds, 2) the treatment of the light-dependent fraction (LDF) for each compound, 3) inclusion of the inhibition of isoprene emission by atmospheric CO\ :sub:`2` and 4) emission factors mapped to the specific PFTs of the CLM.
+
+MEGAN2.1 now describes the emissions of speciated monoterpenes, sesquiterpenes, oxygenated VOCs as well as isoprene. A flexible scheme has been implemented in the CLM to specify a subset of emissions. This allows for additional flexibility in grouping chemical compounds to form the lumped species frequently used in atmospheric chemistry. The mapping or grouping is therefore defined through a namelist parameter in drv\_flds\_in, e.g. megan\_specifier = 'ISOP = isoprene', 'BIGALK pentane + hexane + heptane + tricyclene'.
+
+Terrestrial BVOC emissions from plants to the atmosphere are expressed as a flux, :math:`F_{i}` (:math:`\mu` \ g C m\ :sup:`-2` ground area h\ :sup:`-1`), for emission of chemical compound :math:`i`
.. math::
- :label: ZEqnNum964222
+ :label: ZEqnNum964222
F_{i} =\gamma _{i} \rho \sum _{j}\varepsilon _{i,j} \left(wt\right)_{j}
-where :math:`\gamma _{i}` is the emission activity factor accounting
-for responses to meteorological and phenological conditions,
-:math:`\rho` is the canopy loss and production factor also known as
-escape efficiency (set to 1), and :math:`\varepsilon _{i,\, j}`
-(:math:`\mu` \ g C m\ :sup:`-2` ground area h\ :sup:`-1`) is
-the emission factor at standard conditions of light, temperature, and
-leaf area for plant functional type *j* with fractional coverage
-:math:`\left(wt\right)_{j}` (Guenther et al. 2012). The emission
-activity factor :math:`\gamma _{i}` depends on plant functional type,
-temperature, LAI, leaf age, and soil moisture (Guenther et al. 2012).
-For isoprene only, the effect of CO\ :sub:`2` inhibition is now
-included as described by Heald et al. (2009). Previously, only isoprene
-was treated as a light-dependent emission. In MEGAN2.1, each chemical
-compound is assigned a LDF (ranging from 1.0 for isoprene to 0.2 for
-some monoterpenes, VOCs and acetone). The activity factor for the light
-response of emissions is therefore estimated as:
+where :math:`\gamma _{i}` is the emission activity factor accounting for responses to meteorological and phenological conditions, :math:`\rho` is the canopy loss and production factor also known as escape efficiency (set to 1), and :math:`\varepsilon _{i,\, j}` (:math:`\mu` \ g C m\ :sup:`-2` ground area h\ :sup:`-1`) is the emission factor at standard conditions of light, temperature, and leaf area for plant functional type *j* with fractional coverage :math:`\left(wt\right)_{j}` (Guenther et al. 2012). The emission activity factor :math:`\gamma _{i}` depends on plant functional type, temperature, LAI, leaf age, and soil moisture (Guenther et al. 2012) For isoprene only, the effect of CO\ :sub:`2` inhibition is now included as described by Heald et al. (2009). Previously, only isoprene was treated as a light-dependent emission. In MEGAN2.1, each chemical compound is assigned a LDF (ranging from 1.0 for isoprene to 0.2 for some monoterpenes, VOCs and acetone). The activity factor for the light response of emissions is therefore estimated as:
.. math::
- :label: 28.2)
+ :label: 28.2)
\gamma _{P,\, i} =\left(1-LDF_{i} \right)+\gamma _{P\_ LDF} LDF_{i}
-where the LDF activity factor (:math:`\gamma _{P\_ LDF}` ) is specified
-as a function of PAR as in previous versions of MEGAN.
+where the LDF activity factor (:math:`\gamma _{P\_ LDF}` ) is specified as a function of PAR as in previous versions of MEGAN.
-The values for each emission factor :math:`\epsilon _{i,\, j}` are
-now available for each of the plant functional types in the CLM and
-each chemical compound. This information is distributed through an
-external file, allowing for more frequent and easier updates.
+The values for each emission factor :math:`\epsilon _{i,\, j}` are now available for each of the plant functional types in the CLM and each chemical compound. This information is distributed through an external file, allowing for more frequent and easier updates.
diff --git a/doc/source/tech_note/CN_Allocation/CLM50_Tech_Note_CN_Allocation.rst b/doc/source/tech_note/CN_Allocation/CLM50_Tech_Note_CN_Allocation.rst
index e85a59439f..1c0e5dee57 100644
--- a/doc/source/tech_note/CN_Allocation/CLM50_Tech_Note_CN_Allocation.rst
+++ b/doc/source/tech_note/CN_Allocation/CLM50_Tech_Note_CN_Allocation.rst
@@ -6,36 +6,14 @@ Carbon and Nitrogen Allocation
Introduction
-----------------
-
-The carbon and nitrogen allocation routines in CLM determine the fate of
-newly assimilated carbon, coming from the calculation of photosynthesis,
-and available mineral nitrogen, coming from plant uptake of mineral
-nitrogen in the soil or being drawn out of plant reserves. A significant change to CLM5 relative to prior versions is that allocation of carbon and nitrogen proceed independently rather than in a sequential manner.
-
+The carbon and nitrogen allocation routines in CLM determine the fate of newly assimilated carbon, coming from the calculation of photosynthesis, and available mineral nitrogen, coming from plant uptake of mineral nitrogen in the soil or being drawn out of plant reserves. A significant change to CLM5 relative to prior versions is that allocation of carbon and nitrogen proceed independently rather than in a sequential manner.
Carbon Allocation for Maintenance Respiration Costs
--------------------------------------------------------
-Allocation of available carbon on each time step is prioritized, with
-first priority given to the demand for carbon to support maintenance
-respiration of live tissues (section 13.7). Second priority is to
-replenish the internal plant carbon pool that supports maintenance
-respiration during times when maintenance respiration exceeds
-photosynthesis (e.g. at night, during winter for perennial vegetation,
-or during periods of drought stress) (Sprugel et al., 1995). Third
-priority is to support growth of new tissues, including allocation to
-storage pools from which new growth will be displayed in subsequent time
-steps.
-
-The total maintenance respiration demand (:math:`CF_{mr}`, gC
-m\ :sup:`-2` s\ :sup:`-1`) is calculated as a function of
-tissue mass and nitrogen concentration, and temperature (section 13.7).
-The carbon supply to support this demand is composed of fluxes allocated
-from carbon assimilated in the current timestep
-(:math:`CF_{GPP,mr}`, gC m\ :sup:`-2` s\ :sup:`-1`)
-and from a storage pool that is drawn down when total demand exceeds
-photosynthesis ( :math:`CF_{xs,mr}`, gC m\ :sup:`-2`
-s\ :sup:`-1`):
+Allocation of available carbon on each time step is prioritized, with first priority given to the demand for carbon to support maintenance respiration of live tissues (section 13.7). Second priority is to replenish the internal plant carbon pool that supports maintenance respiration during times when maintenance respiration exceeds photosynthesis (e.g. at night, during winter for perennial vegetation, or during periods of drought stress) (Sprugel et al., 1995). Third priority is to support growth of new tissues, including allocation to storage pools from which new growth will be displayed in subsequent time steps.
+
+The total maintenance respiration demand (:math:`CF_{mr}`, gC m\ :sup:`-2` s\ :sup:`-1`) is calculated as a function of tissue mass and nitrogen concentration, and temperature (section 13.7) The carbon supply to support this demand is composed of fluxes allocated from carbon assimilated in the current timestep (:math:`CF_{GPP,mr}`, gC m\ :sup:`-2` s\ :sup:`-1` and from a storage pool that is drawn down when total demand exceeds photosynthesis ( :math:`CF_{xs,mr}`, gC m\ :sup:`-2` s\ :sup:`-1`):
.. math::
:label: 19.1
@@ -52,24 +30,7 @@ s\ :sup:`-1`):
CF_{xs,mr} =\_ \left\{\begin{array}{l} {0\qquad \qquad \qquad {\rm for\; }CF_{mr} \le CF_{GPP} } \\ {CF_{mr} -CF_{GPP} \qquad {\rm for\; }CF_{mr} >CF_{GPP} } \end{array}\right.
-The storage pool that supplies carbon for maintenance respiration in
-excess of current :math:`CF_{GPP}` ( :math:`CS_{xs}`, gC
-m\ :sup:`-2`) is permitted to run a deficit (negative state), and
-the magnitude of this deficit determines an allocation demand which
-gradually replenishes :math:`CS_{xs}`. The logic for allowing a
-negative state for this pool is to eliminate the need to know in advance
-what the total maintenance respiration demand will be for a particular
-combination of climate and plant type. Using the deficit approach, the
-allocation to alleviate the deficit increases as the deficit increases,
-until the supply of carbon into the pool balances the demand for carbon
-leaving the pool in a quasi-steady state, with variability driven by the
-seasonal cycle, climate variation, disturbance, and internal dynamics of
-the plant-litter-soil system. In cases where the combination of climate
-and plant type are not suitable to sustained growth, the deficit in this
-pool increases until the available carbon is being allocated mostly to
-alleviate the deficit, and new growth approaches zero. The allocation
-flux to :math:`CS_{xs}` (:math:`CF_{GPP,xs}`, gC
-m\ :sup:`-2` s\ :sup:`-1`) is given as
+The storage pool that supplies carbon for maintenance respiration in excess of current :math:`CF_{GPP}` ( :math:`CS_{xs}`, gC m\ :sup:`-2`) is permitted to run a deficit (negative state), and the magnitude of this deficit determines an allocation demand which gradually replenishes :math:`CS_{xs}`. The logic for allowing a negative state for this pool is to eliminate the need to know in advance what the total maintenance respiration demand will be for a particular combination of climate and plant type. Using the deficit approach, the allocation to alleviate the deficit increases as the deficit increases, until the supply of carbon into the pool balances the demand for carbon leaving the pool in a quasi-steady state, with variability driven by the seasonal cycle, climate variation, disturbance, and internal dynamics of the plant-litter-soil system. In cases where the combination of climate and plant type are not suitable to sustained growth, the deficit in this pool increases until the available carbon is being allocated mostly to alleviate the deficit, and new growth approaches zero. The allocation flux to :math:`CS_{xs}` (:math:`CF_{GPP,xs}`, gC m\ :sup:`-2` s\ :sup:`-1`) is given as
.. math::
:label: 19.4
@@ -81,56 +42,37 @@ m\ :sup:`-2` s\ :sup:`-1`) is given as
CF_{GPP,xs} =\left\{\begin{array}{l} {CF_{GPP,xs,pot} \qquad \qquad \qquad {\rm for\; }CF_{GPP,xs,pot} \le CF_{GPP} -CF_{GPP,mr} } \\ {\max (CF_{GPP} -CF_{GPP,mr} ,0)\qquad {\rm for\; }CF_{GPP,xs,pot} >CF_{GPP} -CF_{GPP,mr} } \end{array}\right.
-where :math:`\tau_{xs}` is the time constant (currently
-set to 30 days) controlling the rate of replenishment of :math:`CS_{xs}`.
+where :math:`\tau_{xs}` is the time constant (currently set to 30 days) controlling the rate of replenishment of :math:`CS_{xs}`.
-Note that these two top-priority carbon allocation fluxes
-(:math:`CF_{GPP,mr}` and :math:`CF_{GPP,xs}`) are not
-stoichiometrically associated with any nitrogen fluxes.
+Note that these two top-priority carbon allocation fluxes (:math:`CF_{GPP,mr}` and :math:`CF_{GPP,xs}`) are not stoichiometrically associated with any nitrogen fluxes.
Carbon and Nitrogen Stoichiometry of New Growth
----------------------------------------------------
-After accounting for the carbon cost of maintenance respiration, the
-remaining carbon flux from photosynthesis which can be allocated to new
-growth (:math:`CF_{avail}`, gC m\ :sup:`-2` s\ :sup:`-1`) is
+After accounting for the carbon cost of maintenance respiration, the remaining carbon flux from photosynthesis which can be allocated to new growth (:math:`CF_{avail}`, gC m\ :sup:`-2` s\ :sup:`-1`) is
.. math::
:label: 19.6
CF_{avail\_ alloc} =CF_{GPP} -CF_{GPP,mr} -CF_{GPP,xs} .
-Potential allocation to new growth is calculated for all of the plant
-carbon and nitrogen state variables based on specified C:N ratios for
-each tissue type and allometric parameters that relate allocation
-between various tissue types. The allometric parameters are defined as
-follows:
+Potential allocation to new growth is calculated for all of the plant carbon and nitrogen state variables based on specified C:N ratios for each tissue type and allometric parameters that relate allocation between various tissue types. The allometric parameters are defined as follows:
.. math::
:label: 19.7
\begin{array}{l} {a_{1} ={\rm \; ratio\; of\; new\; fine\; root\; :\; new\; leaf\; carbon\; allocation}} \\ {a_{2} ={\rm \; ratio\; of\; new\; coarse\; root\; :\; new\; stem\; carbon\; allocation}} \\ {a_{3} ={\rm \; ratio\; of\; new\; stem\; :\; new\; leaf\; carbon\; allocation}} \\ {a_{4} ={\rm \; ratio\; new\; live\; wood\; :\; new\; total\; wood\; allocation}} \\ {g_{1} ={\rm ratio\; of\; growth\; respiration\; carbon\; :\; new\; growth\; carbon.\; }} \end{array}
-Parameters :math:`a_{1}`, :math:`a_{2}`, and :math:`a_{4}` are defined as constants for a given PFT (Table
-13.1), while :math:`g_{l }` = 0.3 (unitless) is prescribed as a
-constant for all PFTs, based on construction costs for a range of woody
-and non-woody tissues (Larcher, 1995).
+Parameters :math:`a_{1}`, :math:`a_{2}`, and :math:`a_{4}` are defined as constants for a given PFT (Table 13.1), while :math:`g_{l }` = 0.3 (unitless) is prescribed as a constant for all PFTs, based on construction costs for a range of woody and non-woody tissues (Larcher, 1995).
-The model includes a dynamic allocation scheme for woody vegetation
-(parameter :math:`a_{3}` = -1, :numref:`Table Allocation and CN ratio parameters`), in which case the
-ratio for carbon allocation between new stem and new leaf increases with
-increasing net primary production (NPP), as
+The model includes a dynamic allocation scheme for woody vegetation (parameter :math:`a_{3}` = -1, :numref:`Table Allocation and CN ratio parameters`), in which case the ratio for carbon allocation between new stem and new leaf increases with increasing net primary production (NPP), as
.. math::
:label: 19.8
a_{3} =\frac{2.7}{1+e^{-0.004NPP_{ann} -300} } -0.4
-where :math:`NPP_{ann}` is the annual sum of NPP from the previous
-year. This mechanism has the effect of increasing woody allocation in
-favorable growth environments (Allen et al., 2005; Vanninen and Makela,
-2005) and during the phase of stand growth prior to canopy closure
-(Axelsson and Axelsson, 1986).
+where :math:`NPP_{ann}` is the annual sum of NPP from the previous year. This mechanism has the effect of increasing woody allocation in favorable growth environments (Allen et al., 2005; Vanninen and Makela, 2005) and during the phase of stand growth prior to canopy closure (Axelsson and Axelsson, 1986).
.. _Table Allocation and CN ratio parameters:
@@ -194,24 +136,17 @@ favorable growth environments (Allen et al., 2005; Vanninen and Makela,
+----------------------------------+-----------------------+-----------------------+-----------------------+-----------------------+---------------------------+-------------------------+-------------------------+-------------------------+
| Switchgrass I | 2 | 0 | 0 | 1 | 25 | 42 | 50 | 500 |
+----------------------------------+-----------------------+-----------------------+-----------------------+-----------------------+---------------------------+-------------------------+-------------------------+-------------------------+
-
-Carbon to nitrogen ratios are defined for different tissue types as
-follows:
+
+Carbon to nitrogen ratios are defined for different tissue types as follows:
.. math::
:label: 19.9
\begin{array}{l} {CN_{leaf} =\_ {\rm \; C:N\; for\; leaf}} \\ {CN_{fr} =\_ {\rm \; C:N\; for\; fine\; root}} \\ {CN_{lw} =\_ {\rm \; C:N\; for\; live\; wood\; (in\; stem\; and\; coarse\; root)}} \\ {CN_{dw} =\_ {\rm \; C:N\; for\; dead\; wood\; (in\; stem\; and\; coarse\; root)}} \end{array}
-where all C:N parameters are defined as constants for a given PFT
-(:numref:`Table Allocation and CN ratio parameters`).
+where all C:N parameters are defined as constants for a given PFT (:numref:`Table Allocation and CN ratio parameters`).
-Given values for the parameters in and , total carbon and nitrogen
-allocation to new growth ( :math:`CF_{alloc}`, gC
-m\ :sup:`-2` s\ :sup:`-1`, and :math:`NF_{alloc}`, gN
-m\ :sup:`-2` s\ :sup:`-1`, respectively) can be expressed as
-functions of new leaf carbon allocation (:math:`CF_{GPP,leaf}`, gC
-m\ :sup:`-2` s\ :sup:`-1`):
+Given values for the parameters in and, total carbon and nitrogen allocation to new growth ( :math:`CF_{alloc}`, gC m\ :sup:`-2` s\ :sup:`-1`, and :math:`NF_{alloc}`, gN m\ :sup:`-2` s\ :sup:`-1`, respectively) can be expressed as functions of new leaf carbon allocation (:math:`CF_{GPP,leaf}`, gC m\ :sup:`-2` s\ :sup:`-1`):
.. math::
:label: 19.10
@@ -230,30 +165,19 @@ where
N_{allom} =\left\{\begin{array}{l} {\frac{1}{CN_{leaf} } +\frac{a_{1} }{CN_{fr} } +\frac{a_{3} a_{4} \left(1+a_{2} \right)}{CN_{lw} } +} \\ {\qquad \frac{a_{3} \left(1-a_{4} \right)\left(1+a_{2} \right)}{CN_{dw} } \qquad {\rm for\; woody\; PFT}} \\ {\frac{1}{CN_{leaf} } +\frac{a_{1} }{CN_{fr} } \qquad \qquad \qquad {\rm for\; non-woody\; PFT.}} \end{array}\right.
-Since the C:N stoichiometry for new growth allocation is defined, from
-Eq. , as :math:`C_{allom}`/ :math:`N_{allom}`, the total carbon available for new growth allocation
-(:math:`CF_{avail\_alloc}`) can be used to calculate the total
-plant nitrogen demand for new growth ( :math:`NF_{plant\_demand}`,
-gN m\ :sup:`-2` s\ :sup:`-1`) as:
+Since the C:N stoichiometry for new growth allocation is defined, from Eq., as :math:`C_{allom}`/ :math:`N_{allom}`, the total carbon available for new growth allocation (:math:`CF_{avail\_alloc}`) can be used to calculate the total plant nitrogen demand for new growth ( :math:`NF_{plant\_demand}`, gN m\ :sup:`-2` s\ :sup:`-1`) as:
.. math::
:label: 19.13
NF_{plant\_ demand} =CF_{avail\_ alloc} \frac{N_{allom} }{C_{allom} } .
+.. _Carbon Allocation to New Growth:
+
Carbon Allocation to New Growth
-----------------------------------------
-There are two carbon pools associated with each plant tissue – one which
-represents the currently displayed tissue, and another which represents
-carbon stored for display in a subsequent growth period. The nitrogen
-pools follow this same organization. The model keeps track of stored
-carbon according to which tissue type it will eventually be displayed
-as, and the separation between display in the current timestep and
-storage for later display depends on the parameter :math:`f_{cur}`
-(values 0 to 1). Given :math:`CF_{alloc,leaf}` and :math:`f_{cur}`, the allocation fluxes of carbon to display and
-storage pools (where storage is indicated with *\_stor*) for the various
-tissue types are given as:
+There are two carbon pools associated with each plant tissue – one which represents the currently displayed tissue, and another which represents carbon stored for display in a subsequent growth period. The nitrogen pools follow this same organization. The model keeps track of stored carbon according to which tissue type it will eventually be displayed as, and the separation between display in the current timestep and storage for later display depends on the parameter :math:`f_{cur}` (values 0 to 1). Given :math:`CF_{alloc,leaf}` and :math:`f_{cur}`, the allocation fluxes of carbon to display and storage pools (where storage is indicated with *\_stor*) for the various tissue types are given as:
.. math::
:label: 19.14
@@ -315,12 +239,10 @@ tissue types are given as:
CF_{alloc,deadcroot\_ stor} \_ =CF_{alloc,leaf\_ tot} a_{2} a_{3} \left(1-a_{4} \right)\left(1-f_{cur} \right).
-
-
Nitrogen allocation
-----------------------------------------
-The total flux of nitrogen to be allocated is given by the FUN model (Chapter :numref:`rst_FUN`). This gives a total N to be allocated within a given timestep, :math:`N_{supply}`. The total N allocated for a given tissue :math:`i` is the minimum between the supply and the demand:
+The total flux of nitrogen to be allocated is given by the FUN model (Chapter :numref:`rst_FUN`). This gives a total N to be allocated within a given timestep, :math:`N_{supply}`. The total N allocated for a given tissue :math:`i` is the minimum between the supply and the demand:
.. math::
:label: 19.26
@@ -389,14 +311,14 @@ The demand for each tissue, calculated for the tissue to remain on stoichiometry
NF_{demand,deadcroot\_ stor} \_ =\frac{CF_{alloc,leaf} a_{2} a_{3} \left(1-a_{4} \right)}{CN_{dw} } \left(1-f_{cur} \right).
-After each pool's demand is calculated, the total plant N demand is then the sum of each individual pool :math: `i` corresponding to each tissue:
+After each pool's demand is calculated, the total plant N demand is then the sum of each individual pool :math:`i` corresponding to each tissue:
.. math::
:label: 19.39
NF_{demand,tot} = \sum _{i=tissues} NF_{demand,i}
-and the total supply for each tissue :math: `i` is the product of the fractional demand and the total available N, calculated as the term :math: `N_{uptake}` equal to the sum of the eight N uptake streams described in the FUN model (Chapter :numref:`rst_FUN`).
+and the total supply for each tissue :math:`i` is the product of the fractional demand and the total available N, calculated as the term :math:`N_{uptake}` equal to the sum of the eight N uptake streams described in the FUN model (Chapter :numref:`rst_FUN`).
.. math::
:label: 19.40
diff --git a/doc/source/tech_note/CN_Pools/CLM50_Tech_Note_CN_Pools.rst b/doc/source/tech_note/CN_Pools/CLM50_Tech_Note_CN_Pools.rst
index 77bd7af415..ebff41577a 100644
--- a/doc/source/tech_note/CN_Pools/CLM50_Tech_Note_CN_Pools.rst
+++ b/doc/source/tech_note/CN_Pools/CLM50_Tech_Note_CN_Pools.rst
@@ -6,32 +6,9 @@ CN Pools
Introduction
-----------------
-CLM includes a prognostic treatment of the terrestrial carbon and
-nitrogen cycles including natural vegetation, crops, and soil biogeochemistry. The model is
-fully prognostic with respect to all carbon and nitrogen state variables
-in the vegetation, litter, and soil organic matter. The seasonal timing
-of new vegetation growth and litterfall is also prognostic, responding
-to soil and air temperature, soil water availability, daylength, and
-crop management practices in
-varying degrees depending on a specified phenology type or management for each PFT
-(Chapter
-:numref:`rst_Vegetation Phenology and Turnover`). The
-prognostic LAI, SAI,
-tissue stoichiometry, and vegetation heights are
-utilized by the biophysical model that couples carbon, water, and
-energy cycles.
+CLM includes a prognostic treatment of the terrestrial carbon and nitrogen cycles including natural vegetation, crops, and soil biogeochemistry. The model is fully prognostic with respect to all carbon and nitrogen state variables in the vegetation, litter, and soil organic matter. The seasonal timing of new vegetation growth and litterfall is also prognostic, responding to soil and air temperature, soil water availability, daylength, and crop management practices in varying degrees depending on a specified phenology type or management for each PFT (Chapter :numref:`rst_Vegetation Phenology and Turnover`). The prognostic LAI, SAI, tissue stoichiometry, and vegetation heights are utilized by the biophysical model that couples carbon, water, and energy cycles.
-Separate state variables for C and N are tracked for leaf, live stem,
-dead stem, live coarse root, dead coarse root, fine root, and grain pools
-(:numref:`Figure Vegetation fluxes and pools`). Each of these pools has two corresponding
-storage pools representing, respectively, short-term and long-term
-storage of non-structural carbohydrates and labile nitrogen. There are
-two additional carbon pools, one for the storage of growth respiration
-reserves, and another used to meet excess demand for maintenance
-respiration during periods with low photosynthesis. One additional
-nitrogen pool tracks retranslocated nitrogen, mobilized from leaf tissue
-prior to abscission and litterfall. Altogether there are 23 state
-variables for vegetation carbon, and 22 for vegetation nitrogen.
+Separate state variables for C and N are tracked for leaf, live stem, dead stem, live coarse root, dead coarse root, fine root, and grain pools (:numref:`Figure Vegetation fluxes and pools`). Each of these pools has two corresponding storage pools representing, respectively, short-term and long-term storage of non-structural carbohydrates and labile nitrogen. There are two additional carbon pools, one for the storage of growth respiration reserves, and another used to meet excess demand for maintenance respiration during periods with low photosynthesis. One additional nitrogen pool tracks retranslocated nitrogen, mobilized from leaf tissue prior to abscission and litterfall. Altogether there are 23 state variables for vegetation carbon, and 22 for vegetation nitrogen.
.. _Figure Vegetation fluxes and pools:
@@ -41,33 +18,16 @@ variables for vegetation carbon, and 22 for vegetation nitrogen.
Vegetation fluxes and pools for carbon cycle in CLM5.
-In addition to the vegetation pools, CLM includes a series of
-decomposing carbon and nitrogen pools as vegetation successively
-breaks down to CWD, and/or litter, and subsequently to soil organic
-matter. Discussion of the decomposition model, alternate
-specifications of decomposition rates, and methods to rapidly
-equilibrate the decomposition model, is in Chapter
-:numref:`rst_Decomposition`.
+In addition to the vegetation pools, CLM includes a series of decomposing carbon and nitrogen pools as vegetation successively breaks down to CWD, and/or litter, and subsequently to soil organic matter. Discussion of the decomposition model, alternate specifications of decomposition rates, and methods to rapidly equilibrate the decomposition model, is in Chapter :numref:`rst_Decomposition`.
Tissue Stoichiometry
-----------------------
-As of CLM5, vegetation tissues have a flexible stoichiometry, as
-described in :ref:`Ghimire et al. (2016) `. Each
-tissue has a target C\:N ratio, with the target leaf C\:N varying by plant functional type
-(see :numref:`Table Plant functional type (PFT) target CN parameters`), and nitrogen is allocated at each
-timestep in order to allow the plant to best match the target
-stoichiometry. Nitrogen downregulation of productivity acts by
-increasing the C\:N ratio of leaves when insufficient nitrogen is
-available to meet stoichiometric demands of leaf growth, thereby
-reducing the N available for photosynthesis and reducing the :math:`V_{\text{c,max25}}` and
-:math:`J_{\text{max25}}` terms, as described in Chapter
-:numref:`rst_Photosynthetic Capacity`. Details of the flexible tissue
-stoichiometry are described in Chapter :numref:`rst_CN Allocation`.
+As of CLM5, vegetation tissues have a flexible stoichiometry, as described in :ref:`Ghimire et al. (2016) `. Each tissue has a target C\:N ratio, with the target leaf C\:N varying by plant functional type (see :numref:`Table Plant functional type (PFT) target CN parameters`), and nitrogen is allocated at each timestep in order to allow the plant to best match the target stoichiometry. Nitrogen downregulation of productivity acts by increasing the C\:N ratio of leaves when insufficient nitrogen is available to meet stoichiometric demands of leaf growth, thereby reducing the N available for photosynthesis and reducing the :math:`V_{\text{c,max25}}` and :math:`J_{\text{max25}}` terms, as described in Chapter :numref:`rst_Photosynthetic Capacity`. Details of the flexible tissue stoichiometry are described in Chapter :numref:`rst_CN Allocation`.
.. _Table Plant functional type (PFT) target CN parameters:
-.. table:: Plant functional type (PFT) target C:N parameters.
+.. table:: Plant functional type (PFT) target C:N parameters.
+----------------------------------+-------------------+
| PFT | target leaf C:N |
diff --git a/doc/source/tech_note/Crop_Irrigation/CLM50_Tech_Note_Crop_Irrigation.rst b/doc/source/tech_note/Crop_Irrigation/CLM50_Tech_Note_Crop_Irrigation.rst
index a03142e92e..42238c4273 100755
--- a/doc/source/tech_note/Crop_Irrigation/CLM50_Tech_Note_Crop_Irrigation.rst
+++ b/doc/source/tech_note/Crop_Irrigation/CLM50_Tech_Note_Crop_Irrigation.rst
@@ -8,12 +8,9 @@ Crops and Irrigation
Summary of CLM5.0 updates relative to the CLM4.5
------------------------------------------------
-We describe here the complete crop and irrigation parameterizations that
-appear in CLM5.0. Corresponding information for CLM4.5 appeared in the
-CLM4.5 Technical Note (:ref:`Oleson et al. 2013 `).
+We describe here the complete crop and irrigation parameterizations that appear in CLM5.0. Corresponding information for CLM4.5 appeared in the CLM4.5 Technical Note (:ref:`Oleson et al. 2013 `).
-CLM5.0 includes the following new updates to the CROP option, where CROP
-refers to the interactive crop management model and is included as an option with the BGC configuration:
+CLM5.0 includes the following new updates to the CROP option, where CROP refers to the interactive crop management model and is included as an option with the BGC configuration:
- New crop functional types
@@ -35,18 +32,15 @@ refers to the interactive crop management model and is included as an option wit
- C for annual crop seeding comes from the grain C pool
-- Initial seed C for planting is increased from 1 to 3 g C/m^2
-
-These updates appear in detail in the sections below. Many also appear in
-:ref:`Levis et al. (2016) `.
+- Initial seed C for planting is increased from 1 to 3 g C/m^2
+These updates appear in detail in the sections below. Many also appear in :ref:`Levis et al. (2016) `.
Available new features since the CLM5 release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Addition of bioenergy crops
-
-
-
+- Ability to customize crop calendars (sowing windows/dates, maturity requirements) using stream files
+- Cropland soil tillage
.. _The crop model:
@@ -56,394 +50,398 @@ The crop model: cash and bioenergy crops
Introduction
^^^^^^^^^^^^
-Groups developing Earth System Models generally account for the human
-footprint on the landscape in simulations of historical and future
-climates. Traditionally we have represented this footprint with natural
-vegetation types and particularly grasses because they resemble many
-common crops. Most modeling efforts have not incorporated more explicit
-representations of land management such as crop type, planting,
-harvesting, tillage, fertilization, and irrigation, because global scale
-datasets of these factors have lagged behind vegetation mapping. As this
-begins to change, we increasingly find models that will simulate the
-biogeophysical and biogeochemical effects not only of natural but also
-human-managed land cover.
-
-AgroIBIS is a state-of-the-art land surface model with options to
-simulate dynamic vegetation (:ref:`Kucharik et al. 2000 `) and interactive
-crop management (:ref:`Kucharik and Brye 2003 `). The interactive crop
-management parameterizations from AgroIBIS (March 2003 version) were
-coupled as a proof-of-concept to the Community Land Model version 3
-[CLM3.0, :ref:`Oleson et al. (2004) ` ] (not published), then coupled to the
-CLM3.5 (:ref:`Levis et al. 2009 `) and later released to the community with
-CLM4CN (:ref:`Levis et al. 2012 `), and CLM4.5BGC. Additional updates after the
-release of CLM4.5 were available by request (:ref:`Levis et al. 2016 `),
-and those are now incorporated into CLM5.
-
-With interactive crop management and, therefore, a more accurate
-representation of agricultural landscapes, we hope to improve the CLM’s
-simulated biogeophysics and biogeochemistry. These advances may improve
-fully coupled simulations with the Community Earth System Model (CESM),
-while helping human societies answer questions about changing food,
-energy, and water resources in response to climate, environmental, land
-use, and land management change (e.g., :ref:`Kucharik and Brye 2003 `; :ref:`Lobell et al. 2006 `).
-As implemented here, the crop model uses the same physiology as the
-natural vegetation, though uses different crop-specific parameter values,
-phenology, and allocation, as well as fertilizer and irrigation management.
+Groups developing Earth System Models generally account for the human footprint on the landscape in simulations of historical and future climates. Traditionally we have represented this footprint with natural vegetation types and particularly grasses because they resemble many common crops. Most modeling efforts have not incorporated more explicit representations of land management such as crop type, planting, harvesting, tillage, fertilization, and irrigation, because global scale datasets of these factors have lagged behind vegetation mapping. As this begins to change, we increasingly find models that will simulate the biogeophysical and biogeochemical effects not only of natural but also human-managed land cover.
+
+AgroIBIS is a state-of-the-art land surface model with options to simulate dynamic vegetation (:ref:`Kucharik et al. 2000 `) and interactive crop management (:ref:`Kucharik and Brye 2003 `). The interactive crop management parameterizations from AgroIBIS (March 2003 version) were coupled as a proof-of-concept to the Community Land Model version 3 [CLM3.0, :ref:`Oleson et al. (2004) ` ] (not published), then coupled to the CLM3.5 (:ref:`Levis et al. 2009 `) and later released to the community with CLM4CN (:ref:`Levis et al. 2012 `), and CLM4.5BGC. Additional updates after the release of CLM4.5 were available by request (:ref:`Levis et al. 2016 `), and those are now incorporated into CLM5.
+
+With interactive crop management and, therefore, a more accurate representation of agricultural landscapes, we hope to improve the CLM's simulated biogeophysics and biogeochemistry. These advances may improve fully coupled simulations with the Community Earth System Model (CESM), while helping human societies answer questions about changing food, energy, and water resources in response to climate, environmental, land use, and land management change (e.g., :ref:`Kucharik and Brye 2003 `; :ref:`Lobell et al. 2006 `). As implemented here, the crop model uses the same physiology as the natural vegetation but with uses different crop-specific parameter values, phenology, and allocation, as well as fertilizer and irrigation management.
.. _Crop plant functional types:
Crop plant functional types
^^^^^^^^^^^^^^^^^^^^^^^^^^^
-To allow crops to coexist with natural vegetation in a grid cell, the
-vegetated land unit is separated into a naturally vegetated land unit and
-a managed crop land unit. Unlike the plant functional types (pfts) in the
-naturally vegetated land unit, the managed crop pfts in the managed crop
-land unit do not share soil columns and thus permit for differences in the
-land management between crops. Each crop type has a rainfed and an irrigated
-pft that are on independent soil columns. Crop grid cell coverage is assigned from
-satellite data (similar to all natural pfts), and the managed crop type
-proportions within the crop area is based on the dataset created by
-:ref:`Portmann et al. (2010)` for present day. New in CLM5, crop area is
-extrapolated through time using the dataset provided by Land Use Model
-Intercomparison Project (LUMIP), which is part of CMIP6 Land use timeseries
-(:ref:`Lawrence et al. 2016 `). For more details about how
-crop distributions are determined, see Chapter :numref:`rst_Transient Landcover Change`.
-
-CLM5 includes ten actively managed crop types
-(temperate soybean, tropical soybean, temperate corn, tropical
-corn, spring wheat, cotton, rice, sugarcane, miscanthus, and switchgrass) that are chosen
-based on the availability of corresponding algorithms in AgroIBIS and as
-developed by :ref:`Badger and Dirmeyer (2015)` and
-described by :ref:`Levis et al. (2016)`, or from available observations
-as described by :ref:`Cheng et al. (2019)`.
-The representations of sugarcane, rice, cotton, tropical corn, and tropical soy are new in CLM5.
-Miscanthus and switchgrass are added after the CLM5 release.
-Sugarcane and tropical corn are both C4 plants and are therefore represented
-using the temperate corn functional form. Tropical soybean uses the temperate
-soybean functional form, while rice and cotton use the wheat functional form.
-In tropical regions, parameter values were developed for the Amazon Basin, and planting
-date window is shifted by six months relative to the Northern Hemisphere.
-Plantation areas of bioenergy crops are projected to expand throughout the 21st century as a major energy source to
-replace fossil fuels and mitigate climate change. Miscanthus and switchgrass are perennial bioenergy crops and
-have quite different physiological traits and land management practices than annual crops,
-such as longer growing seasons, higher productivity, and lower demands for nutrients and water.
-About 70% of biofuel aboveground biomass (leaf & livestem) is removed at harvest. Parameter values were developed by using
-observation data collected at the University of Illinois Energy Farm
-located in Central Midwestern United States (:ref:`Cheng et al., 2019`).
-
-
-In addition, CLM’s default list of plant functional types (pfts) includes an
-irrigated and unirrigated unmanaged C3 crop (:numref:`Table Crop plant functional types`) treated as a second C3 grass.
-The unmanaged C3 crop is only used when the crop model is not active and
-has grid cell coverage assigned from satellite data, and
-the unmanaged C3 irrigated crop type is currently not used
-since irrigation requires the crop model to be active.
-The default list of pfts also includes twenty-one inactive crop pfts
-that do not yet have associated parameters required for active management.
-Each of the inactive crop types is simulated using the parameters of the
-spatially closest associated crop type that is most similar to the functional type (e.g., C3 or C4),
-which is required to maintain similar phenological parameters based on temperature thresholds.
-Information detailing which parameters are used for each crop type is
-included in :numref:`Table Crop plant functional types`. It should be noted that pft-level history output merges
-all crop types into the actively managed crop type, so analysis
-of crop-specific output will require use of the land surface dataset to
-remap the yields of each actively and inactively managed crop type. Otherwise, the
-actively managed crop type will include yields for that crop type and all inactively
-managed crop types that are using the same parameter set.
+To allow crops to coexist with natural vegetation in a grid cell, the vegetated land unit is separated into a naturally vegetated land unit and a managed crop land unit. Unlike the plant functional types (PFTs) in the naturally vegetated land unit, the managed crop PFTs in the managed crop land unit do not share soil columns and thus permit for differences in the land management between crops. Each crop type has a rainfed and an irrigated PFT that are on independent soil columns. Crop grid cell coverage is assigned from satellite data (similar to all natural PFTs), and the managed crop type proportions within the crop area is based on the dataset created by :ref:`Portmann et al. (2010)` for present day. New in CLM5, crop area is extrapolated through time using the dataset provided by Land Use Model Intercomparison Project (LUMIP), which is part of CMIP6 Land use timeseries (:ref:`Lawrence et al. 2016 `). For more details about how crop distributions are determined, see Chapter :numref:`rst_Transient Landcover Change`.
+
+CLM5 includes ten actively managed crop types (temperate soybean, tropical soybean, temperate corn, tropical corn, spring wheat, cotton, rice, sugarcane, miscanthus, and switchgrass) that are chosen based on the availability of corresponding algorithms in AgroIBIS and as developed by :ref:`Badger and Dirmeyer (2015)` and described by :ref:`Levis et al. (2016)`, or from available observations as described by :ref:`Cheng et al. (2019)`. The representations of sugarcane, rice, cotton, tropical corn, and tropical soy were new in CLM5; miscanthus and switchgrass were added after the CLM5 release. Sugarcane and tropical corn are both C4 plants and are therefore represented using the temperate corn functional form. Tropical soybean uses the temperate soybean functional form, while rice and cotton use the wheat functional form. In tropical regions, parameter values were developed for the Amazon Basin, and planting date window is shifted by six months relative to the Northern Hemisphere. Plantation areas of bioenergy crops are projected to expand throughout the 21st century as a major energy source to replace fossil fuels and mitigate climate change. Miscanthus and switchgrass are perennial bioenergy crops and have quite different physiological traits and land management practices than annual crops, such as longer growing seasons, higher productivity, and lower demands for nutrients and water. About 70% of biofuel aboveground biomass (leaf & livestem) is removed at harvest. Parameter values were developed by using observation data collected at the University of Illinois Energy Farm located in Central Midwestern United States (:ref:`Cheng et al., 2019`).
+
+In addition, CLM's default list of plant functional types (PFTs) includes an irrigated and unirrigated unmanaged C3 crop (:numref:`Table Crop plant functional types`) treated as a second C3 grass. The unmanaged C3 crop is only used when the crop model is not active and has grid cell coverage assigned from satellite data, and the unmanaged C3 irrigated crop type is currently not used since irrigation requires the crop model to be active. The default list of PFTs also includes twenty-one inactive crop PFTs that do not yet have associated parameters required for active management. Each of the inactive crop types is simulated using the parameters of the spatially closest associated crop type that is most similar to the functional type (e.g., C3 or C4), which is required to maintain similar phenological parameters based on temperature thresholds. Information detailing which parameters are used for each crop type is included in :numref:`Table Crop plant functional types`. It should be noted that PFT-level history output merges all crop types into the actively managed crop type, so analysis of crop-specific output will require use of the land surface dataset to remap the yields of each actively and inactively managed crop type. Otherwise, the actively managed crop type will include yields for that crop type and all inactively managed crop types that are using the same parameter set.
.. _Table Crop plant functional types:
-.. table:: Crop plant functional types (pfts) included in CLM5BGCCROP.
+.. table:: Crop plant functional types (PFTs) included in CLM5BGCCROP.
=== =========================== ================ ===========================
IVT Plant function types (PFTs) Management Class Crop Parameters Used
=== =========================== ================ ===========================
- 15 c3 unmanaged rainfed crop none not applicable
- 16 c3 unmanaged irrigated crop none not applicable
- 17 rainfed temperate corn active rainfed temperate corn
- 18 irrigated temperate corn active irrigated temperate corn
- 19 rainfed spring wheat active rainfed spring wheat
- 20 irrigated spring wheat active irrigated spring wheat
- 21 rainfed winter wheat inactive rainfed spring wheat
- 22 irrigated winter wheat inactive irrigated spring wheat
- 23 rainfed temperate soybean active rainfed temperate soybean
+ 15 c3 unmanaged rainfed crop none not applicable
+ 16 c3 unmanaged irrigated crop none not applicable
+ 17 rainfed temperate corn active rainfed temperate corn
+ 18 irrigated temperate corn active irrigated temperate corn
+ 19 rainfed spring wheat active rainfed spring wheat
+ 20 irrigated spring wheat active irrigated spring wheat
+ 21 rainfed winter wheat inactive rainfed spring wheat
+ 22 irrigated winter wheat inactive irrigated spring wheat
+ 23 rainfed temperate soybean active rainfed temperate soybean
24 irrigated temperate soybean active irrigated temperate soybean
- 25 rainfed barley inactive rainfed spring wheat
- 26 irrigated barley inactive irrigated spring wheat
- 27 rainfed winter barley inactive rainfed spring wheat
- 28 irrigated winter barley inactive irrigated spring wheat
- 29 rainfed rye inactive rainfed spring wheat
- 30 irrigated rye inactive irrigated spring wheat
- 31 rainfed winter rye inactive rainfed spring wheat
- 32 irrigated winter rye inactive irrigated spring wheat
- 33 rainfed cassava inactive rainfed rice
- 34 irrigated cassava inactive irrigated rice
- 35 rainfed citrus inactive rainfed spring wheat
- 36 irrigated citrus inactive irrigated spring wheat
- 37 rainfed cocoa inactive rainfed rice
- 38 irrigated cocoa inactive irrigated rice
- 39 rainfed coffee inactive rainfed rice
- 40 irrigated coffee inactive irrigated rice
- 41 rainfed cotton active rainfed cotton
- 42 irrigated cotton active irrigated cotton
- 43 rainfed datepalm inactive rainfed cotton
- 44 irrigated datepalm inactive irrigated cotton
- 45 rainfed foddergrass inactive rainfed spring wheat
- 46 irrigated foddergrass inactive irrigated spring wheat
- 47 rainfed grapes inactive rainfed spring wheat
- 48 irrigated grapes inactive irrigated spring wheat
- 49 rainfed groundnuts inactive rainfed rice
- 50 irrigated groundnuts inactive irrigated rice
- 51 rainfed millet inactive rainfed tropical corn
- 52 irrigated millet inactive irrigated tropical corn
- 53 rainfed oilpalm inactive rainfed rice
- 54 irrigated oilpalm inactive irrigated rice
- 55 rainfed potatoes inactive rainfed spring wheat
- 56 irrigated potatoes inactive irrigated spring wheat
- 57 rainfed pulses inactive rainfed spring wheat
- 58 irrigated pulses inactive irrigated spring wheat
- 59 rainfed rapeseed inactive rainfed spring wheat
- 60 irrigated rapeseed inactive irrigated spring wheat
- 61 rainfed rice active rainfed rice
- 62 irrigated rice active irrigated rice
- 63 rainfed sorghum inactive rainfed tropical corn
- 64 irrigated sorghum inactive irrigated tropical corn
- 65 rainfed sugarbeet inactive rainfed spring wheat
- 66 irrigated sugarbeet inactive irrigated spring wheat
- 67 rainfed sugarcane active rainfed sugarcane
- 68 irrigated sugarcane active irrigated sugarcane
- 69 rainfed sunflower inactive rainfed spring wheat
- 70 irrigated sunflower inactive irrigated spring wheat
- 71 rainfed miscanthus active rainfed miscanthus
- 72 irrigated miscanthus active irrigated miscanthus
- 73 rainfed switchgrass active rainfed switchgrass
- 74 irrigated switchgrass active irrigated switchgrass
- 75 rainfed tropical corn active rainfed tropical corn
- 76 irrigated tropical corn active irrigated tropical corn
- 77 rainfed tropical soybean active rainfed tropical soybean
- 78 irrigated tropical soybean active irrigated tropical soybean
+ 25 rainfed barley inactive rainfed spring wheat
+ 26 irrigated barley inactive irrigated spring wheat
+ 27 rainfed winter barley inactive rainfed spring wheat
+ 28 irrigated winter barley inactive irrigated spring wheat
+ 29 rainfed rye inactive rainfed spring wheat
+ 30 irrigated rye inactive irrigated spring wheat
+ 31 rainfed winter rye inactive rainfed spring wheat
+ 32 irrigated winter rye inactive irrigated spring wheat
+ 33 rainfed cassava inactive rainfed rice
+ 34 irrigated cassava inactive irrigated rice
+ 35 rainfed citrus inactive rainfed spring wheat
+ 36 irrigated citrus inactive irrigated spring wheat
+ 37 rainfed cocoa inactive rainfed rice
+ 38 irrigated cocoa inactive irrigated rice
+ 39 rainfed coffee inactive rainfed rice
+ 40 irrigated coffee inactive irrigated rice
+ 41 rainfed cotton active rainfed cotton
+ 42 irrigated cotton active irrigated cotton
+ 43 rainfed datepalm inactive rainfed cotton
+ 44 irrigated datepalm inactive irrigated cotton
+ 45 rainfed foddergrass inactive rainfed spring wheat
+ 46 irrigated foddergrass inactive irrigated spring wheat
+ 47 rainfed grapes inactive rainfed spring wheat
+ 48 irrigated grapes inactive irrigated spring wheat
+ 49 rainfed groundnuts inactive rainfed rice
+ 50 irrigated groundnuts inactive irrigated rice
+ 51 rainfed millet inactive rainfed tropical corn
+ 52 irrigated millet inactive irrigated tropical corn
+ 53 rainfed oilpalm inactive rainfed rice
+ 54 irrigated oilpalm inactive irrigated rice
+ 55 rainfed potatoes inactive rainfed spring wheat
+ 56 irrigated potatoes inactive irrigated spring wheat
+ 57 rainfed pulses inactive rainfed spring wheat
+ 58 irrigated pulses inactive irrigated spring wheat
+ 59 rainfed rapeseed inactive rainfed spring wheat
+ 60 irrigated rapeseed inactive irrigated spring wheat
+ 61 rainfed rice active rainfed rice
+ 62 irrigated rice active irrigated rice
+ 63 rainfed sorghum inactive rainfed tropical corn
+ 64 irrigated sorghum inactive irrigated tropical corn
+ 65 rainfed sugarbeet inactive rainfed spring wheat
+ 66 irrigated sugarbeet inactive irrigated spring wheat
+ 67 rainfed sugarcane active rainfed sugarcane
+ 68 irrigated sugarcane active irrigated sugarcane
+ 69 rainfed sunflower inactive rainfed spring wheat
+ 70 irrigated sunflower inactive irrigated spring wheat
+ 71 rainfed miscanthus active rainfed miscanthus
+ 72 irrigated miscanthus active irrigated miscanthus
+ 73 rainfed switchgrass active rainfed switchgrass
+ 74 irrigated switchgrass active irrigated switchgrass
+ 75 rainfed tropical corn active rainfed tropical corn
+ 76 irrigated tropical corn active irrigated tropical corn
+ 77 rainfed tropical soybean active rainfed tropical soybean
+ 78 irrigated tropical soybean active irrigated tropical soybean
=== =========================== ================ ===========================
-
-
.. _Phenology:
Phenology
^^^^^^^^^
-CLM5-BGC includes evergreen, seasonally deciduous (responding to changes
-in day length), and stress deciduous (responding to changes in
-temperature and/or soil moisture) phenology algorithms (Chapter :numref:`rst_Vegetation Phenology and Turnover`).
-CLM5-BGC-crop uses the AgroIBIS crop phenology algorithm,
-consisting of three distinct phases.
+CLM5-BGC includes evergreen, seasonally deciduous (responding to changes in day length), and stress deciduous (responding to changes in temperature and/or soil moisture) phenology algorithms (Chapter :numref:`rst_Vegetation Phenology and Turnover`). CLM5-BGC-crop uses the AgroIBIS crop phenology algorithm, consisting of three distinct phases.
-Phase 1 starts at planting and ends with leaf emergence, phase 2
-continues from leaf emergence to the beginning of grain fill, and phase
-3 starts from the beginning of grain fill and ends with physiological
-maturity and harvest.
+Phase 1 starts at planting and ends with leaf emergence, phase 2 continues from leaf emergence to the beginning of grain fill, and phase 3 starts from the beginning of grain fill and ends with physiological maturity and harvest.
.. _Planting:
Planting
''''''''
-All crops must meet the following requirements between the minimum planting date and the maximum
-planting date (for the northern hemisphere) in :numref:`Table Crop phenology parameters`:
+All crops must meet the following requirements between the minimum planting date and the maximum planting date (for the northern hemisphere) in :numref:`Table Crop phenology parameters`:
.. math::
:label: 25.1
- \begin{array}{c}
- {T_{10d} >T_{p} } \\
- {T_{10d}^{\min } >T_{p}^{\min } } \\
- {GDD_{8} \ge GDD_{\min } }
+ \begin{array}{c}
+ {T_{10d} >T_{p} } \\
+ {T_{10d}^{\min } >T_{p}^{\min } } \\
+ {GDD_{8} \ge GDD_{\min } }
\end{array}
-where :math:`{T}_{10d}` is the 10-day running mean of :math:`{T}_{2m}`, (the simulated 2-m air
-temperature during each model time step) and :math:`T_{10d}^{\min}` is
-the 10-day running mean of :math:`T_{2m}^{\min }` (the daily minimum of
-:math:`{T}_{2m}`). :math:`{T}_{p}` and :math:`T_{p}^{\min }` are crop-specific coldest planting temperatures
-(:numref:`Table Crop phenology parameters`), :math:`{GDD}_{8}` is the 20-year running mean growing
-degree-days (units are degree-days or :sup:`o` days) tracked
-from April through September (NH) above 8\ :sup:`o` C with
-maximum daily increments of 30\ :sup:`o` days (see equation :eq:`25.3`), and
-:math:`{GDD}_{min }`\ is the minimum growing degree day requirement
-(:numref:`Table Crop phenology parameters`). :math:`{GDD}_{8}` does not change as quickly as :math:`{T}_{10d}` and :math:`T_{10d}^{\min }`, so
-it determines whether it is warm enough for the crop to be planted in a grid cell, while the
-2-m air temperature variables determine the day when the crop may be planted if the :math:`{GDD}_{8}` threshold is met.
-If the requirements in equation :eq:`25.1` are not met by the maximum planting date,
-crops are still planted on the maximum planting date as long as :math:`{GDD}_{8} > 0`. In
-the southern hemisphere (SH) the NH requirements apply 6 months later.
-
-At planting, each crop seed pool is assigned 3 gC m\ :sup:`-2` from its
-grain product pool. The seed carbon is transferred to the leaves upon leaf emergence. An
-equivalent amount of seed leaf N is assigned given the pft’s C to N
-ratio for leaves (:math:`{CN}_{leaf}` in :numref:`Table Crop allocation parameters`; this differs from AgroIBIS,
-which uses a seed leaf area index instead of seed C). The model updates the average growing degree-days necessary
-for the crop to reach vegetative and physiological maturity,
-:math:`{GDD}_{mat}`, according to the following AgroIBIS rules:
+where :math:`{T}_{10d}` is the 10-day running mean of :math:`{T}_{2m}`, (the simulated 2-m air temperature during each model time step) and :math:`T_{10d}^{\min}` is the 10-day running mean of :math:`T_{2m}^{\min }` (the daily minimum of :math:`{T}_{2m}`). :math:`{T}_{p}` and :math:`T_{p}^{\min }` are crop-specific coldest planting temperatures (:numref:`Table Crop phenology parameters`), :math:`{GDD}_{8}` is the 20-year running mean growing degree-days (units are °C day) tracked from April through September (NH) above 8°C with maximum daily increments of 30 degree-days (see equation :eq:`25.3`), and :math:`{GDD}_{min }`\ is the minimum growing degree day requirement (:numref:`Table Crop phenology parameters`). :math:`{GDD}_{8}` does not change as quickly as :math:`{T}_{10d}` and :math:`T_{10d}^{\min }`, so it determines whether it is warm enough for the crop to be planted in a grid cell, while the 2-m air temperature variables determine the day when the crop may be planted if the :math:`{GDD}_{8}` threshold is met. If the requirements in equation :eq:`25.1` are not met by the maximum planting date, crops are still planted on the maximum planting date as long as :math:`{GDD}_{8} > 0`. In the southern hemisphere (SH) the NH requirements apply 6 months later.
+
+At planting, each crop seed pool is assigned 3 gC m\ :sup:`-2` from its grain product pool. The seed carbon is transferred to the leaves upon leaf emergence. An equivalent amount of seed leaf N is assigned given the PFT's C to N ratio for leaves (:math:`{CN}_{leaf}` in :numref:`Table Crop allocation parameters`; this differs from AgroIBIS, which uses a seed leaf area index instead of seed C). The model updates the average growing degree-days necessary for the crop to reach vegetative and physiological maturity, :math:`{GDD}_{mat}`, according to the following AgroIBIS rules:
.. math::
:label: 25.2
- \begin{array}{lll}
- GDD_{{\rm mat}}^{{\rm corn,sugarcane}} =0.85 GDD_{{\rm 8}} & {\rm \; \; \; and\; \; \; }& 950 `, :ref:`Crawford et al. 1982 `, :ref:`Simpson et al. 1983
-`, :ref:`Ta and Weiland 1992 `, :ref:`Barbottin et al. 2005 `,
-:ref:`Gallais et al. 2006 `, :ref:`Gallais et al. 2007 `). Nitrogen allocation
-for crops follows that of natural vegetation, is supplied in CLM by the
-soil mineral nitrogen pool, and depends on C:N ratios for leaves, stems,
-roots, and organs. Nitrogen demand during organ development is fulfilled
-through retranslocation from leaves, stems, and roots. Nitrogen
-retranslocation is initiated at the beginning of the grain fill stage
-for all crops except soybean, for which retranslocation is after LAI decline.
-Nitrogen stored in the leaf and stem is moved into a storage
-retranslocation pool for all crops, and for wheat and rice, nitrogen in roots is also
-released into the retranslocation storage pool. The quantity of nitrogen
-mobilized depends on the C:N ratio of the plant tissue, and is
-calculated as
+Nitrogen retranslocation in crops occurs when nitrogen that was used for tissue growth of leaves, stems, and fine roots during the early growth season is remobilized and used for grain development (:ref:`Pollmer et al. 1979 `, :ref:`Crawford et al. 1982 `, :ref:`Simpson et al. 1983 `, :ref:`Ta and Weiland 1992 `, :ref:`Barbottin et al. 2005 `, :ref:`Gallais et al. 2006 `, :ref:`Gallais et al. 2007 `). Nitrogen allocation for crops follows that of natural vegetation, is supplied in CLM by the soil mineral nitrogen pool, and depends on C:N ratios for leaves, stems, roots, and organs. Nitrogen demand during organ development is fulfilled through retranslocation from leaves, stems, and roots. Nitrogen retranslocation is initiated at the beginning of the grain fill stage for all crops except soybean, for which retranslocation is after LAI decline. Nitrogen stored in the leaf and stem is moved into a storage retranslocation pool for all crops, and for wheat and rice, nitrogen in roots is also released into the retranslocation storage pool. The quantity of nitrogen mobilized depends on the C:N ratio of the plant tissue and is calculated as
.. math::
:label: 25.6
@@ -532,77 +502,56 @@ calculated as
frootn\_ to\_ retransn=N_{froot} -\frac{C_{froot} }{CN_{froot}^{f} }
-where :math:`{C}_{leaf}`, :math:`{C}_{stem}`, and :math:`{C}_{froot}` is the carbon in the plant leaf, stem, and fine
-root, respectively, :math:`{N}_{leaf}`, :math:`{N}_{stem}`, and :math:`{N}_{froot}`
-is the nitrogen in the plant leaf, stem, and fine root, respectively, and :math:`CN^f_{leaf}`,
-:math:`CN^f_{stem}`, and :math:`CN^f_{froot}` is the post-grain fill C:N
-ratio of the leaf, stem, and fine root respectively (:numref:`Table Crop allocation parameters`). Since
-C:N measurements are often taken from mature crops, pre-grain development C:N
-ratios for leaves, stems, and roots in the model are optimized to allow maximum
-nitrogen accumulation for later use during organ development, and post-grain
-fill C:N ratios are assigned the same as crop residue. After
-nitrogen is moved into the retranslocated pool,
-the nitrogen in this pool is used to meet plant
-nitrogen demand by assigning the available nitrogen from the
-retranslocated pool equal to the plant nitrogen demand for each organ (:math:`{CN_{[organ]}^{f} }` in :numref:`Table Crop allocation parameters`). Once the
-retranslocation pool is depleted, soil mineral nitrogen pool is used to
-fulfill plant nitrogen demands.
+where :math:`{C}_{leaf}`, :math:`{C}_{stem}`, and :math:`{C}_{froot}` is the carbon in the plant leaf, stem, and fine root, respectively, :math:`{N}_{leaf}`, :math:`{N}_{stem}`, and :math:`{N}_{froot}` is the nitrogen in the plant leaf, stem, and fine root, respectively, and :math:`CN^f_{leaf}`, :math:`CN^f_{stem}`, and :math:`CN^f_{froot}` is the post-grain fill C:N ratio of the leaf, stem, and fine root respectively (:numref:`Table Crop allocation parameters`). Since C:N measurements are often taken from mature crops, pre-grain development C:N ratios for leaves, stems, and roots in the model are optimized to allow maximum nitrogen accumulation for later use during organ development, and post-grain fill C:N ratios are assigned the same as crop residue. After nitrogen is moved into the retranslocated pool, the nitrogen in this pool is used to meet plant nitrogen demand by assigning the available nitrogen from the retranslocated pool equal to the plant nitrogen demand for each organ (:math:`{CN_{[organ]}^{f} }` in :numref:`Table Crop allocation parameters`). Once the retranslocation pool is depleted, soil mineral nitrogen pool is used to fulfill plant nitrogen demands.
.. _Harvest to food and seed:
Harvest
'''''''
-Variables track the flow of grain C and N to food and of all other plant pools, including live stem C and N, to litter, and to biofuel feedstock.
-A fraction (determined by the :math:`biofuel\_harvfrac`, defined in
-:numref:`Table Plant functional type (PFT) parameters for harvested fraction of leaf/livestem for bioenergy production`) of leaf/livestem C and N from bioenergy crops is removed at harvest for biofuels
-(Equations :eq:`25.9`, :eq:`25.10`, :eq:`25.12`, and :eq:`25.13`),
-with the remaining portions going to the litter pools (Equations :eq:`20.14)`, :eq:`25.11`, and :eq:`25.14`).
-Putting live stem C and N into the litter and biofuel pools is in contrast to the approach for unmanaged PFTs which
-puts live stem C and N into dead stem pools first.
-Biofuel crop leaf C and N pools are routed to the litter and biofuel pools, in contrast to that of unmanaged PFTs and non-biofuel crops, which put leaf C and N into litter pools only.
-Root C and N pools are routed to the litter pools in the same manner as natural vegetation.
-
+Variables track the flow of grain C and N to food and of all other plant pools, including live stem C and N, to litter, and to biofuel feedstock. A fraction (determined by the :math:`biofuel\_harvfrac`, defined in :numref:`Table Plant functional type (PFT) parameters for harvested fraction of leaf/livestem for bioenergy production`) of leaf/livestem C and N from bioenergy crops is removed at harvest for biofuels (Equations :eq:`25.9`. :eq:`harv_c_to_removed_residue`, :eq:`25.12`, and :eq:`harv_n_to_removed_residue`), with the remaining portions going to the litter pools (Equations :eq:`20.14)`, :eq:`25.11`, and :eq:`25.14`). Putting live stem C and N into the litter and biofuel pools is in contrast to the approach for unmanaged PFTs which puts live stem C and N into dead stem pools first. Biofuel crop leaf and stem C and N pools are routed to the litter and biofuel pools, in contrast to that of unmanaged PFTs and non-biofuel crops, which under default settings put leaf C and N into litter pools only. All crops can have their leaf and stem pools routed to a "removed residue" pool by setting namelist parameter :math:`crop\_residue\_removal\_frac` to something greater than its default zero. Root C and N pools are routed to the litter pools in the same manner as natural vegetation.
+
+In the equations below, subscript :math:`p` refers to either the leaf or live stem biomass pool.
+
.. math::
:label: 25.9
- CF_{leaf,biofuel} = \left({CS_{leaf} \mathord{\left/ {\vphantom {CS_{leaf} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{p,biofuel} = \left({CS_{p} \mathord{\left/ {\vphantom {CS_{p} \Delta t}} \right.} \Delta t}
\right) * biofuel\_harvfrac
-
+
.. math::
- :label: 25.10
+ :label: harv_c_to_removed_residue
+
+ CF_{p,removed\_residue} = \left({CS_{p} \mathord{\left/ {\vphantom {CS_{p} \Delta t}} \right.} \Delta t}
+ \right) * (1 - biofuel\_harvfrac) * crop\_residue\_removal\_frac
- CF_{livestem,biofuel} = \left({CS_{livestem} \mathord{\left/ {\vphantom {CS_{leaf} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
- \right) * biofuel\_harvfrac
-
.. math::
:label: 25.11
- CF_{livestem,litter} = \left({CS_{livestem} \mathord{\left/ {\vphantom {CS_{livestem} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
- \right) * \left( 1-biofuel\_harvfrac \right) +CF_{alloc,livestem}
+ CF_{p,litter} = \left({CS_{p} \mathord{\left/ {\vphantom {CS_{p} \Delta t}} \right.} \Delta t}
+ \right) * \left( 1-biofuel\_harvfrac \right) * \left( 1-crop\_residue\_removal\_frac \right) +CF_{p,alloc}
with corresponding nitrogen fluxes:
.. math::
:label: 25.12
- NF_{leaf,biofuel} = \left({NS_{leaf} \mathord{\left/ {\vphantom {NS_{leaf} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ NF_{p,biofuel} = \left({NS_{p} \mathord{\left/ {\vphantom {NS_{p} \Delta t}} \right.} \Delta t}
\right) * biofuel\_harvfrac
-
+
.. math::
- :label: 25.13
+ :label: harv_n_to_removed_residue
+
+ NF_{p,removed\_residue} = \left({NS_{p} \mathord{\left/ {\vphantom {NS_{p} \Delta t}} \right.} \Delta t}
+ \right) * \left( 1 - biofuel\_harvfrac \right) * crop\_residue\_removal\_frac
- NF_{livestem,biofuel} = \left({NS_{livestem} \mathord{\left/ {\vphantom {NS_{livestem} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
- \right) * biofuel\_harvfrac
-
.. math::
:label: 25.14
- NF_{livestem,litter} = \left({NS_{livestem} \mathord{\left/ {\vphantom {NS_{livestem} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
- \right) * \left( 1-biofuel\_harvfrac \right)
+ NF_{p,litter} = \left({NS_{p} \mathord{\left/ {\vphantom {NS_{p} \Delta t}} \right.} \Delta t}
+ \right) * \left( 1-biofuel\_harvfrac \right) * \left( 1-crop\_residue\_removal\_frac \right)
-where CF is the carbon flux, CS is stored carbon, NF is the nitrogen flux,
-NS is stored nitrogen, and :math:`biofuel\_harvfrac` is the harvested fraction of leaf/livestem for biofuel feedstocks.
+where CF is the carbon flux, CS is stored carbon, NF is the nitrogen flux, NS is stored nitrogen, and :math:`biofuel\_harvfrac` is the harvested fraction of leaf/livestem for biofuel feedstocks.
.. _Table Plant functional type (PFT) parameters for harvested fraction of leaf/livestem for bioenergy production:
@@ -660,54 +609,42 @@ NS is stored nitrogen, and :math:`biofuel\_harvfrac` is the harvested fraction o
| Switchgrass | 0.70 |
+----------------------------------+----------------------------+
-Whereas food C and N was formerly transferred to the litter pool, CLM5 routes food C and N
-to a grain product pool where the C and N decay to the atmosphere over one year,
-similar in structure to the wood product pools.
-The biofuel C and N is also routed to the grain product pool and decays to the atmosphere over one year.
-Additionally, CLM5 accounts for the C and N required for crop seeding by removing the seed C and N from the grain
-product pool during harvest. The crop seed pool is then used to seed crops in the subsequent year.
-Calcuating the crop yields (Equation :eq:`25.15`) requires that you sum the GRAINC_TO_FOOD variable
-for each year, and must account for the proportion of C in the dry crop weight.
-Here, we assume that grain C is 45% of the total dry weight. Additionally, harvest is not typically 100% efficient, so
-analysis needs to assume that harvest efficiency is less. We assume a harvest
-efficiency of 85%.
+Whereas food C and N was formerly transferred to the litter pool, CLM5 routes food C and N to a grain product pool where the C and N decay to the atmosphere over one year, similar in structure to the wood product pools. Biofuel and removed-residue C and N is also routed to the grain product pool and decays to the atmosphere over one year. Additionally, CLM5 accounts for the C and N required for crop seeding by removing the seed C and N from the grain product pool during harvest. The crop seed pool is then used to seed crops in the subsequent year.
+
+Annual food crop yields (g dry matter m\ :sup:`-2`) can be calculated by saving the GRAINC_TO_FOOD_ANN variable once per year, then postprocessing with Equation :eq:`25.15`. This calculation assumes that grain C is 45% of the total dry weight. Additionally, harvest is not typically 100% efficient, so analysis needs to assume that harvest efficiency is less---we use 85%.
.. math::
:label: 25.15
- Grain\ yield(g.m^{-2})=\frac{\sum(GRAINC\_ TO\_ FOOD)*0.85}{0.45}
-
+ \text{Grain yield} = \frac{GRAINC\_TO\_FOOD\_ANN)*0.85}{0.45}
.. _Table Crop allocation parameters:
-.. table:: Crop allocation parameters for the active crop plant functional types (pfts) in CLM5BGCCROP. Numbers in the first row correspond to the list of pfts in :numref:`Table Crop plant functional types`.
+.. table:: Crop allocation parameters for the active crop plant functional types (PFTs) in CLM5BGCCROP. Numbers in the first row correspond to the list of PFTs in :numref:`Table Crop plant functional types`.
=========================================== ============== ============ ================== ====== ====== ========= ============= ================ ================ ================
- \ temperate corn spring wheat temperate soybean cotton rice sugarcane tropical corn tropical soybean miscanthus switchgrass
+ \ temperate corn spring wheat temperate soybean cotton rice sugarcane tropical corn tropical soybean miscanthus switchgrass
=========================================== ============== ============ ================== ====== ====== ========= ============= ================ ================ ================
- IVT 17, 18 19, 20 23, 24 41, 42 61, 62 67, 68 75, 76 77, 78 71, 72 73, 74
- :math:`a_{leaf}^{i}` 0.6 0.9 0.85 0.85 0.75 0.6 0.6 0.85 0.9 0.7
- :math:`{L}_{max}` (m :sup:`2` m :sup:`-2`) 5 7 6 6 7 5 5 6 10 6.5
- :math:`a_{froot}^{i}` 0.1 0.05 0.2 0.2 0.1 0.1 0.1 0.2 0.11 0.14
- :math:`a_{froot}^{f}` 0.05 0 0.2 0.2 0 0.05 0.05 0.2 0.09 0.09
- :math:`a_{leaf}^{f}` 0 0 0 0 0 0 0 0 0 0
- :math:`a_{livestem}^{f}` 0 0.05 0.3 0.3 0.05 0 0 0.3 0 0
- :math:`d_{L}` 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05
- :math:`d_{alloc}^{stem}` 2 1 5 5 1 2 2 5 2 2
- :math:`d_{alloc}^{leaf}` 5 3 2 2 3 5 5 2 5 5
- :math:`{CN}_{leaf}` 25 20 20 20 20 25 25 20 25 25
- :math:`{CN}_{stem}` 50 50 50 50 50 50 50 50 50 50
- :math:`{CN}_{froot}` 42 42 42 42 42 42 42 42 42 42
- :math:`CN^f_{leaf}` 65 65 65 65 65 65 65 65 65 65
- :math:`CN^f_{stem}` 120 100 130 130 100 120 120 130 120 120
- :math:`CN^f_{froot}` 0 40 0 0 40 0 0 0 0 0
- :math:`{CN}_{grain}` 50 50 50 50 50 50 50 50 50 50
+ IVT 17, 18 19, 20 23, 24 41, 42 61, 62 67, 68 75, 76 77, 78 71, 72 73, 74
+ :math:`a_{leaf}^{i}` 0.6 0.9 0.85 0.85 0.75 0.6 0.6 0.85 0.9 0.7
+ :math:`{L}_{max}` (m :sup:`2` m :sup:`-2`) 5 7 6 6 7 5 5 6 10 6.5
+ :math:`a_{froot}^{i}` 0.1 0.05 0.2 0.2 0.1 0.1 0.1 0.2 0.11 0.14
+ :math:`a_{froot}^{f}` 0.05 0 0.2 0.2 0 0.05 0.05 0.2 0.09 0.09
+ :math:`a_{leaf}^{f}` 0 0 0 0 0 0 0 0 0 0
+ :math:`a_{livestem}^{f}` 0 0.05 0.3 0.3 0.05 0 0 0.3 0 0
+ :math:`d_{L}` 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05
+ :math:`d_{alloc}^{stem}` 2 1 5 5 1 2 2 5 2 2
+ :math:`d_{alloc}^{leaf}` 5 3 2 2 3 5 5 2 5 5
+ :math:`{CN}_{leaf}` 25 20 20 20 20 25 25 20 25 25
+ :math:`{CN}_{stem}` 50 50 50 50 50 50 50 50 50 50
+ :math:`{CN}_{froot}` 42 42 42 42 42 42 42 42 42 42
+ :math:`CN^f_{leaf}` 65 65 65 65 65 65 65 65 65 65
+ :math:`CN^f_{stem}` 120 100 130 130 100 120 120 130 120 120
+ :math:`CN^f_{froot}` 0 40 0 0 40 0 0 0 0 0
+ :math:`{CN}_{grain}` 50 50 50 50 50 50 50 50 50 50
=========================================== ============== ============ ================== ====== ====== ========= ============= ================ ================ ================
-Notes: Crop growth phases and corresponding variables are described throughout
-the text. :math:`{CN}_{leaf}`, :math:`{CN}_{stem}`, and :math:`{CN}_{froot}` are
-the target C:N ratios used during the leaf emergence phase (phase 2).
-
+Notes: Crop growth phases and corresponding variables are described throughout the text. :math:`{CN}_{leaf}`, :math:`{CN}_{stem}`, and :math:`{CN}_{froot}` are the target C:N ratios used during the leaf emergence phase (phase 2).
.. _Other Features:
@@ -718,211 +655,123 @@ Other Features
Physical Crop Characteristics
'''''''''''''''''''''''''''''
-Leaf area index (*L*) is calculated as a function of specific leaf area
-(SLA, :numref:`Table Crop phenology parameters`) and leaf C.
-Stem area index (*S*) is equal to 0.1\ *L* for temperate and tropical corn, sugarcane, switchgrass, and miscanthus and 0.2\ *L* for
-other crops, as in AgroIBIS. All live
-C and N pools go to 0 after crop harvest, but the *S* is kept at 0.25 to
-simulate a post-harvest “stubble” on the ground.
-
-Crop heights at the top and bottom of the canopy, :math:`{z}_{top}`
-and :math:`{z}_{bot}` (m), come from the AgroIBIS formulation:
+Leaf area index (*L*) is calculated as a function of specific leaf area (SLA, :numref:`Table Crop phenology parameters`) and leaf C. Stem area index (*S*) is equal to 0.1\ *L* for temperate and tropical corn, sugarcane, switchgrass, and miscanthus and 0.2\ *L* for other crops, as in AgroIBIS. All live C and N pools go to 0 after crop harvest, but the *S* is kept at 0.25 to simulate a post-harvest "stubble" on the ground.
+Crop heights at the top and bottom of the canopy, :math:`{z}_{top}` and :math:`{z}_{bot}` (m), come from the AgroIBIS formulation:
.. math::
:label: 25.16
- \begin{array}{l}
- {z_{top} =z_{top}^{\max } \left(\frac{L}{L_{\max } -1} \right)^{2} \ge 0.05{\rm \; where\; }\frac{L}{L_{\max } -1} \le 1} \\
- {z_{bot} =0.02{\rm m}}
+ \begin{array}{l}
+ {z_{top} =z_{top}^{\max } \left(\frac{L}{L_{\max } -1} \right)^{2} \ge 0.05{\rm \; where\; }\frac{L}{L_{\max } -1} \le 1} \\
+ {z_{bot} =0.02{\rm m}}
\end{array}
-where :math:`z_{top}^{\max }` is the maximum top-of-canopy height of the crop (:numref:`Table Crop phenology parameters`)
-and :math:`L_{\max }` is the maximum leaf area index (:numref:`Table Crop allocation parameters`).
+where :math:`z_{top}^{\max }` is the maximum top-of-canopy height of the crop (:numref:`Table Crop phenology parameters`) and :math:`L_{\max }` is the maximum leaf area index (:numref:`Table Crop allocation parameters`).
.. _Interactive fertilization:
Interactive Fertilization
'''''''''''''''''''''''''
-CLM simulates fertilization by adding nitrogen directly to the soil mineral nitrogen pool to meet
-crop nitrogen demands using both industrial fertilizer and manure application. CLM’s separate crop land unit ensures that
-natural vegetation will not access the fertilizer applied to crops.
-Fertilizer in CLM5BGCCROP is prescribed by crop functional types and varies spatially
-for each year based on the LUMIP land use and land cover change
-time series (LUH2 for historical and SSPs for future) (:ref:`Lawrence et al. 2016 `).
-One of two fields is used to prescribe industrial fertilizer based on the type of simulation.
-For non-transient simulations, annual fertilizer application in g N/m\ :sup:`2`/yr
-is specified on the land surface data set by the field CONST_FERTNITRO_CFT.
-In transient simulations, annual fertilizer application is specified on the land use time series
-file by the field FERTNITRO_CFT, which is also in g N/m\ :sup:`2`/yr.
-The values for both of these fields come from the LUMIP time series for each year.
-In addition to the industrial fertilizer, background manure fertilizer is specified
-on the parameter file by the field 'manunitro'. For perennial bioenergy crops,
-little fertilizer (56kg/ha/yr) is applied to switchgrass, no fertilizer is applied to Miscanthus.
-Note these rates are only based on local land management practices at the University of Illinois Energy Farm
-located in Central Midwestern United States :ref:`(Cheng et al., 2019)` rather than the LUMIP timeseries. For the current CLM5BGCCROP,
-manure N is applied at a rate of 0.002 kg N/m\ :sup:`2`/yr. Because previous versions
-of CLM (e.g., CLM4) had rapid denitrification rates, fertilizer is applied slowly
-to minimize N loss (primarily through denitrification) and maximize plant uptake.
-The current implementation of CLM5 inherits this legacy, although denitrification rates
-are slower in the current version of the model (:ref:`Koven et al. 2013 `). As such,
-fertilizer application begins during the leaf emergence phase of crop
-development (phase 2) and continues for 20 days, which helps reduce large losses
-of nitrogen from leaching and denitrification during the early stage of
-crop development. The 20-day period is chosen as an optimization to
-limit fertilizer application to the emergence stage. A fertilizer
-counter in seconds, *f*, is set as soon as the leaf emergence phase for crops
-initiates:
+CLM simulates fertilization by adding nitrogen directly to the soil mineral nitrogen pool to meet crop nitrogen demands using both industrial fertilizer and manure application. CLM's separate crop land unit ensures that natural vegetation will not access the fertilizer applied to crops. Fertilizer in CLM5BGCCROP is prescribed by crop functional types and varies spatially for each year based on the LUMIP land use and land cover change time series (LUH2 for historical and SSPs for future) (:ref:`Lawrence et al. 2016 `). One of two fields is used to prescribe industrial fertilizer based on the type of simulation. For non-transient simulations, annual fertilizer application in g N/m\ :sup:`2`/yr is specified on the land surface data set by the field CONST_FERTNITRO_CFT. In transient simulations, annual fertilizer application is specified on the land use time series file by the field FERTNITRO_CFT, which is also in g N/m\ :sup:`2`/yr. The values for both of these fields come from the LUMIP time series for each year. In addition to the industrial fertilizer, background manure fertilizer is specified on the parameter file by the field ``manunitro``. For perennial bioenergy crops, little fertilizer (56kg/ha/yr) is applied to switchgrass and no fertilizer is applied to Miscanthus. Note these rates are only based on local land management practices at the University of Illinois Energy Farm located in Central Midwestern United States :ref:`(Cheng et al., 2019)` rather than the LUMIP timeseries. For the current CLM5BGCCROP, manure N is applied at a rate of 0.002 kg N/m\ :sup:`2`/yr. Because previous versions of CLM (e.g., CLM4) had rapid denitrification rates, fertilizer is applied slowly to minimize N loss (primarily through denitrification) and maximize plant uptake. The current implementation of CLM5 inherits this legacy, although denitrification rates are slower in the current version of the model (:ref:`Koven et al. 2013 `). As such, fertilizer application begins during the leaf emergence phase of crop development (phase 2) and continues for 20 days, which helps reduce large losses of nitrogen from leaching and denitrification during the early stage of crop development. The 20-day period is chosen as an optimization to limit fertilizer application to the emergence stage. A fertilizer counter in seconds, *f*, is set as soon as the leaf emergence phase for crops initiates:
.. math::
:label: 25.17
- f = n \times 86400
-
-where *n* is set to 20 fertilizer application days and 86400 is the number of seconds per day. When the crop enters
-phase 2 (leaf emergence) of its growth
-cycle, fertilizer application begins by initializing fertilizer amount
-to the total fertilizer at each column within the grid cell divided by the initialized *f*.
-Fertilizer is applied and *f* is decremented each time step until a zero balance on
-the counter is reached.
+ f = n \times 86400
+where *n* is set to 20 fertilizer application days and 86400 is the number of seconds per day. When the crop enters phase 2 (leaf emergence) of its growth cycle, fertilizer application begins by initializing fertilizer amount to the total fertilizer at each column within the grid cell divided by the initialized *f*. Fertilizer is applied and *f* is decremented each time step until a zero balance on the counter is reached.
.. _Biological nitrogen fixation for soybeans:
Biological nitrogen fixation for soybeans
'''''''''''''''''''''''''''''''''''''''''
-Biological N fixation for soybeans is calculated by the fixation and uptake of
-nitrogen module (Chapter :numref:`rst_FUN`) and is the same as N fixation in natural vegetation. Unlike natural
-vegetation, where a fraction of each pft are N fixers, all soybeans
-are treated as N fixers.
+Biological N fixation for soybeans is calculated by the fixation and uptake of nitrogen module (Chapter :numref:`rst_FUN`) and is the same as N fixation in natural vegetation. Unlike natural vegetation, where a fraction of each PFT are N fixers, all soybeans are treated as N fixers.
.. _Latitude vary base tempereature for growing degree days:
Latitudinal variation in base growth tempereature
'''''''''''''''''''''''''''''''''''''''''''''''''
-For most crops, :math:`GDD_{T_{{\rm 2m}} }` (growing degree days since planting)
-is the same in all locations. However,
-the for both rainfed and irrigated spring wheat and sugarcane, the calculation of
-:math:`GDD_{T_{{\rm 2m}} }` allows for latitudinal variation:
+For most crops, :math:`GDD_{T_{{\rm 2m}} }` (growing degree days since planting) is the same in all locations. However, for both rainfed and irrigated spring wheat and sugarcane, the calculation of :math:`GDD_{T_{{\rm 2m}} }` allows for latitudinal variation:
.. math::
:label: 25.18
latitudinal\ variation\ in\ base\ T = \left\{
- \begin{array}{lr}
+ \begin{array}{lr}
baset +12 - 0.4 \times latitude &\qquad 0 \le latitude \le 30 \\
- baset +12 + 0.4 \times latitude &\qquad -30 \le latitude \le 0
+ baset +12 + 0.4 \times latitude &\qquad -30 \le latitude \le 0
\end{array} \right\}
-where :math:`baset` is the *base temperature for GDD* (7\ :sup:`th` row) in :numref:`Table Crop phenology parameters`.
-Such latitudinal variation in base growth temperature could increase the base temperature, slow down :math:`GDD_{T_{{\rm 2m}} }`
-accumulation, and extend the growing season for regions within 30ºS to 30ºN for spring wheat
-and sugarcane.
+where :math:`baset` is the *base temperature for GDD* (7\ :sup:`th` row) in :numref:`Table Crop phenology parameters`. Such latitudinal variation in base temperature could slow :math:`GDD_{T_{{\rm 2m}} }` accumulation extend the growing season for regions within 30°S to 30°N for spring wheat and sugarcane.
.. _Separate reproductive pool:
Separate reproductive pool
''''''''''''''''''''''''''
-One notable difference between natural vegetation and crops is the
-presence of reproductive carbon and nitrogen pools. Accounting
-for the reproductive pools helps determine whether crops are performing
-reasonably through yield calculations.
-The reproductive pool is maintained similarly to the leaf, stem,
-and fine root pools, but allocation of carbon and nitrogen does not
-begin until the grain fill stage of crop development. Equation :eq:`25.5` describes the
-carbon and nitrogen allocation coefficients to the reproductive pool.
-In CLM5BGCCROP, as allocation declines in stem, leaf, and root pools (see section :numref:`Grain fill to harvest`)
-during the grain fill stage of growth, increasing amounts of carbon and
-nitrogen are available for grain development.
+One notable difference between natural vegetation and crops is the presence of reproductive carbon and nitrogen pools. Accounting for the reproductive pools helps determine whether crops are performing reasonably through yield calculations. The reproductive pool is maintained similarly to the leaf, stem, and fine root pools, but allocation of carbon and nitrogen does not begin until the grain fill stage of crop development. Equation :eq:`25.5` describes the carbon and nitrogen allocation coefficients to the reproductive pool. In CLM5BGCCROP, as allocation declines in stem, leaf, and root pools (see section :numref:`Grain fill to harvest`) during the grain fill stage of growth, increasing amounts of carbon and nitrogen are available for grain development.
+
+.. _Tillage:
+Tillage
+'''''''
+Tillage is represented as an enhancement of the decomposition rate coefficient; see section :numref:`decomp_mgmt_modifiers`.
.. _The irrigation model:
The irrigation model
--------------------
-The CLM includes the option to irrigate cropland areas that are equipped
-for irrigation. The application of irrigation responds dynamically to
-the soil moisture conditions simulated by the CLM. This irrigation
-algorithm is based loosely on the implementation of
-:ref:`Ozdogan et al. (2010) `.
+The CLM includes the option to irrigate cropland areas that are equipped for irrigation. The application of irrigation responds dynamically to the soil moisture conditions simulated by the CLM. This irrigation algorithm is based loosely on the implementation of :ref:`Ozdogan et al. (2010) `.
-When irrigation is enabled, the crop areas of each grid cell are divided
-into irrigated and rainfed fractions according to a dataset of areas
-equipped for irrigation (:ref:`Portmann et al. 2010 `).
-Irrigated and rainfed crops are placed on separate soil columns, so that
-irrigation is only applied to the soil beneath irrigated crops.
+When irrigation is enabled, the crop areas of each grid cell are divided into irrigated and rainfed fractions according to a dataset of areas equipped for irrigation (:ref:`Portmann et al. 2010 `). Irrigated and rainfed crops are placed on separate soil columns, so that irrigation is only applied to the soil beneath irrigated crops.
-In irrigated croplands, a check is made once per day to determine
-whether irrigation is required on that day. This check is made in the
-first time step after 6 AM local time. Irrigation is required if crop
-leaf area :math:`>` 0, and the available soil water is below a specified
-threshold.
+In irrigated croplands, a check is made once per day to determine whether irrigation is required on that day. This check is made in the first time step after 6 AM local time. Irrigation is required if crop leaf area :math:`>` 0, and the available soil water is below a specified threshold.
-The soil moisture deficit :math:`D_{irrig}` is
+The soil moisture deficit :math:`D_{irrig}` is
.. math::
:label: 25.61
D_{irrig} = \left\{
- \begin{array}{lr}
- w_{thresh} - w_{avail} &\qquad w_{thresh} > w_{avail} \\
- 0 &\qquad w_{thresh} \le w_{avail}
+ \begin{array}{lr}
+ w_{target} - w_{avail} &\qquad w_{thresh} > w_{avail} \\
+ 0 &\qquad w_{thresh} \le w_{avail}
\end{array} \right\}
-where :math:`w_{thresh}` is the irrigation moisture threshold (mm) and
-:math:`w_{avail}` is the available moisture (mm). The moisture threshold
-is
+where :math:`w_{target}` is the irrigation target soil moisture (mm)
.. math::
:label: 25.62
- w_{thresh} = f_{thresh} \left(w_{target} - w_{wilt}\right) + w_{wilt}
+ w_{target} = \sum_{j=1}^{N_{irr}} \theta_{target} \Delta z_{j} \ .
-where :math:`w_{target}` is the irrigation target soil moisture (mm)
+The irrigation moisture threshold (mm) is
.. math::
:label: 25.63
- w_{target} = \sum_{j=1}^{N_{irr}} \theta_{target} \Delta z_{j} \ ,
+ w_{thresh} = f_{thresh} \left(w_{target} - w_{wilt}\right) + w_{wilt}
-:math:`w_{wilt}` is the wilting point soil moisture (mm)
+where :math:`w_{wilt}` is the wilting point soil moisture (mm)
.. math::
:label: 25.64
w_{wilt} = \sum_{j=1}^{N_{irr}} \theta_{wilt} \Delta z_{j} \ ,
-and :math:`f_{thresh}` is a tuning parameter. The available moisture in
-the soil is
+and :math:`f_{thresh}` is a tuning parameter. The available moisture in the soil (mm) is
.. math::
:label: 25.65
w_{avail} = \sum_{j=1}^{N_{irr}} \theta_{j} \Delta z_{j} \ ,
-:math:`N_{irr}` is the index of the soil layer corresponding to a specified
-depth :math:`z_{irrig}` (:numref:`Table Irrigation parameters`) and
-:math:`\Delta z_{j}` is the thickness of the soil layer in layer :math:`j` (section
-:numref:`Vertical Discretization`). :math:`\theta_{j}` is the
-volumetric soil moisture in layer :math:`j` (section :numref:`Soil Water`).
-:math:`\theta_{target}` and
-:math:`\theta_{wilt}` are the target and wilting point volumetric
-soil moisture values, respectively, and are determined by inverting
-:eq:`7.94` using soil matric
-potential parameters :math:`\Psi_{target}` and :math:`\Psi_{wilt}`
-(:numref:`Table Irrigation parameters`). After the soil moisture deficit
-:math:`D_{irrig}` is calculated, irrigation in an amount equal to
-:math:`\frac{D_{irrig}}{T_{irrig}}` (mm/s) is applied uniformly over
-the irrigation period :math:`T_{irrig}` (s). Irrigation water is applied
-directly to the ground surface, bypassing canopy interception (i.e.,
-added to :math:`{q}_{grnd,liq}`: section :numref:`Canopy Water`).
-
-To conserve mass, irrigation is removed from river water storage (Chapter :numref:`rst_River Transport Model (RTM)`).
-When river water storage is inadequate to meet irrigation demand,
-there are two options: 1) the additional water can be removed from the
-ocean model, or 2) the irrigation demand can be reduced such that
-river water storage is maintained above a specified threshold.
+Note that :math:`w_{target}` is truly supposed to give the target soil moisture value that we're shooting for whenever irrigation happens; then the soil moisture deficit :math:`D_{irrig}` gives the difference between this target value and the current soil moisture. The irrigation moisture threshold :math:`w_{thresh}`, on the other hand, gives a threshold at which we decide to do any irrigation at all. The way this is written allows for the possibility that one may not want to irrigate every time there becomes even a tiny soil moisture deficit. Instead, one may want to wait until the deficit is larger before initiating irrigation; at that point, one doesn't want to just irrigate up to the "threshold" but instead up to the higher "target". The target should always be greater than or equal to the threshold.
+
+:math:`N_{irr}` is the index of the soil layer corresponding to a specified depth :math:`z_{irrig}` (:numref:`Table Irrigation parameters`) and :math:`\Delta z_{j}` is the thickness of the soil layer in layer :math:`j` (section :numref:`Vertical Discretization`). :math:`\theta_{j}` is the volumetric soil moisture in layer :math:`j` (section :numref:`Soil Water`). :math:`\theta_{target}` and :math:`\theta_{wilt}` are the target and wilting point volumetric soil moisture values, respectively, and are determined by inverting :eq:`7.94` using soil matric potential parameters :math:`\Psi_{target}` and :math:`\Psi_{wilt}` (:numref:`Table Irrigation parameters`). After the soil moisture deficit :math:`D_{irrig}` is calculated, irrigation in an amount equal to :math:`\frac{D_{irrig}}{T_{irrig}}` (mm/s) is applied uniformly over the irrigation period :math:`T_{irrig}` (s). Irrigation water is applied directly to the ground surface, bypassing canopy interception (i.e., added to :math:`{q}_{grnd,liq}`: section :numref:`Canopy Water`).
+
+To conserve mass, irrigation is removed from river water storage (Chapter :numref:`rst_River Transport Model (RTM)`). When river water storage is inadequate to meet irrigation demand, there are two options: 1) the additional water can be removed from the ocean model, or 2) the irrigation demand can be reduced such that river water storage is maintained above a specified threshold.
.. _Table Irrigation parameters:
@@ -941,8 +790,4 @@ river water storage is maintained above a specified threshold.
+--------------------------------------+-------------+
.. add a reference to surface data in chapter2
- To accomplish this we downloaded
- data of percent irrigated and percent rainfed corn, soybean, and
- temperate cereals (wheat, barley, and rye) (:ref:`Portmann et al. 2010 `),
- available online from
- *ftp://ftp.rz.uni-frankfurt.de/pub/uni-frankfurt/physische\_geographie/hydrologie/public/data/MIRCA2000/harvested\_area\_grids.*
+ To accomplish this we downloaded data of percent irrigated and percent rainfed corn, soybean, and temperate cereals (wheat, barley, and rye) (:ref:`Portmann et al. 2010 `), available online from *ftp://ftp.rz.uni-frankfurt.de/pub/uni-frankfurt/physische\_geographie/hydrologie/public/data/MIRCA2000/harvested\_area\_grids.*
diff --git a/doc/source/tech_note/DGVM/CLM50_Tech_Note_DGVM.rst b/doc/source/tech_note/DGVM/CLM50_Tech_Note_DGVM.rst
index c62591b70c..4874ca9943 100644
--- a/doc/source/tech_note/DGVM/CLM50_Tech_Note_DGVM.rst
+++ b/doc/source/tech_note/DGVM/CLM50_Tech_Note_DGVM.rst
@@ -10,7 +10,6 @@ What has changed
- Introduction of FATES: The Functionally Assembled Terrestrial Ecosystem Simulator (FATES) is the actively developed DGVM for the CLM5.
-
FATES
^^^^^^^^^^^^^^^^^^^^
@@ -22,19 +21,7 @@ Fisher, R. A., Muszala, S., Verteinstein, M., Lawrence, P., Xu, C., McDowell, N.
The Ecosystem Demography ('ED'), concept within FATES is derived from the work of :ref:`Moorcroft et al. (2001)` and is a cohort model of vegetation competition and co-existence, allowing a representation of the biosphere which accounts for the division of the land surface into successional stages, and for competition for light between height structured cohorts of representative trees of various plant functional types.
-The implementation of the Ecosystem Demography concept within FATES links the surface flux and canopy physiology concepts in CLM
-with numerous additional developments necessary to accommodate the new model. These include a version of the SPITFIRE
-(Spread and InTensity of Fire) model of :ref:`Thonicke et al. (2010)`, and an adoption of the concept of
-`Perfect Plasticity Approximation` approach of
-:ref:`Purves et al. 2008`, :ref:`Lichstein et al. 2011` and :ref:`Weng et al. 2014`, in accounting
-for the spatial arrangement of crowns. Novel algorithms accounting for
-the fragmentation of coarse woody debris into chemical litter streams,
-for the physiological optimization of canopy thickness, for the
-accumulation of seeds in the seed bank, for multi-layer multi-PFT
-radiation transfer, for drought-deciduous and cold-deciduous phenology,
-for carbon storage allocation, and for tree mortality under carbon
-stress, are also included.
-
+The implementation of the Ecosystem Demography concept within FATES links the surface flux and canopy physiology concepts in CLM with numerous additional developments necessary to accommodate the new model. These include a version of the SPITFIRE (Spread and InTensity of Fire) model of :ref:`Thonicke et al. (2010)`, and an adoption of the concept of `Perfect Plasticity Approximation` approach of :ref:`Purves et al. 2008`, :ref:`Lichstein et al. 2011` and :ref:`Weng et al. 2014`, in accounting for the spatial arrangement of crowns. Novel algorithms accounting for the fragmentation of coarse woody debris into chemical litter streams, for the physiological optimization of canopy thickness, for the accumulation of seeds in the seed bank, for multi-layer multi-PFT radiation transfer, for drought-deciduous and cold-deciduous phenology, for carbon storage allocation, and for tree mortality under carbon stress, are also included.
Further reading
^^^^^^^^^^^^^^^^^^^^
diff --git a/doc/source/tech_note/Decomposition/CLM50_Tech_Note_Decomposition.rst b/doc/source/tech_note/Decomposition/CLM50_Tech_Note_Decomposition.rst
index 0d2ad98687..bf6d52ee45 100644
--- a/doc/source/tech_note/Decomposition/CLM50_Tech_Note_Decomposition.rst
+++ b/doc/source/tech_note/Decomposition/CLM50_Tech_Note_Decomposition.rst
@@ -3,20 +3,7 @@
Decomposition
=================
-Decomposition of fresh litter material into progressively more
-recalcitrant forms of soil organic matter is represented in CLM is
-defined as a cascade of :math:`{k}_{tras}` transformations between
-:math:`{m}_{pool}` decomposing coarse woody debris (CWD), litter,
-and soil organic matter (SOM) pools, each defined at
-:math:`{n}_{lev}` vertical levels. CLM allows the user to define, at
-compile time, between 2 contrasting hypotheses of decomposition as
-embodied by two separate decomposition submodels: the CLM-CN pool
-structure used in CLM4.0, or a second pool structure, characterized by
-slower decomposition rates, based on the fCentury model (Parton et al.
-1988). In addition, the user can choose, at compile time, whether to
-allow :math:`{n}_{lev}` to equal 1, as in CLM4.0, or to equal the
-number of soil levels used for the soil hydrological and thermal
-calculations (see Section :numref:`Soil Layers` for soil layering).
+Decomposition of fresh litter material into progressively more recalcitrant forms of soil organic matter is represented in CLM is defined as a cascade of :math:`{k}_{tras}` transformations between :math:`{m}_{pool}` decomposing coarse woody debris (CWD), litter, and soil organic matter (SOM) pools, each defined at :math:`{n}_{lev}` vertical levels. CLM allows the user to define, at compile time, between 2 contrasting hypotheses of decomposition as embodied by two separate decomposition submodels: the CLM-CN pool structure used in CLM4.0, or a second pool structure, characterized by slower decomposition rates, based on the fCentury model (Parton et al 1988). In addition, the user can choose, at compile time, whether to allow :math:`{n}_{lev}` to equal 1, as in CLM4.0, or to equal the number of soil levels used for the soil hydrological and thermal calculations (see Section :numref:`Soil Layers` for soil layering).
.. _Figure Schematic of decomposition model in CLM:
@@ -24,80 +11,40 @@ calculations (see Section :numref:`Soil Layers` for soil layering).
Schematic of decomposition model in CLM.
-Model is structured to allow different representations of the soil C and
-N decomposition cascade, as well as a vertically-explicit treatment of
-soil biogeochemistry.
+Model is structured to allow different representations of the soil C and N decomposition cascade, as well as a vertically-explicit treatment of soil biogeochemistry.
-For the single-level model structure, the fundamental equation for
-carbon balance of the decomposing pools is:
+For the single-level model structure, the fundamental equation for carbon balance of the decomposing pools is:
.. math::
- :label: 21.1)
+ :label: 21.1)
\frac{\partial C_{i} }{\partial t} =R_{i} +\sum _{j\ne i}\left(i-r_{j} \right)T_{ji} k_{j} C_{j} -k_{i} C_{i}
-where :math:`{C}_{i}` is the carbon content of pool *i*,
-:math:`{R}_{i}` are the carbon inputs from plant tissues directly to
-pool *i* (only non-zero for CWD and litter pools), :math:`{k}_{i}`
-is the decay constant of pool *i*; :math:`{T}_{ji}` is the fraction
-of carbon directed from pool *j* to pool *i* with fraction
-:math:`{r}_{j}` lost as a respiration flux along the way.
+where :math:`{C}_{i}` is the carbon content of pool *i*, :math:`{R}_{i}` are the carbon inputs from plant tissues directly to pool *i* (only non-zero for CWD and litter pools), :math:`{k}_{i}` is the decay constant of pool *i*; :math:`{T}_{ji}` is the fraction of carbon directed from pool *j* to pool *i* with fraction :math:`{r}_{j}` lost as a respiration flux along the way.
-Adding the vertical dimension to the decomposing pools changes the
-balance equation to the following:
+Adding the vertical dimension to the decomposing pools changes the balance equation to the following:
.. math::
- :label: 21.2)
+ :label: 21.2)
\begin{array}{l} {\frac{\partial C_{i} (z)}{\partial t} =R_{i} (z)+\sum _{i\ne j}\left(1-r_{j} \right)T_{ji} k_{j} (z)C_{j} (z) -k_{i} (z)C_{i} (z)} \\ {+\frac{\partial }{\partial z} \left(D(z)\frac{\partial C_{i} }{\partial z} \right)+\frac{\partial }{\partial z} \left(A(z)C_{i} \right)} \end{array}
-where :math:`{C}_{i}`\ (z) is now defined at each model level, and
-in volumetric (gC m\ :sup:`-3`) rather than areal (gC m\ :sup:`-2`) units, along with :math:`{R}_{i}`\ (z) and
-:math:`{k}_{j}`\ (z). In addition, vertical transport is handled by
-the last two terms, for diffusive and advective transport. In the base
-model, advective transport is set to zero, leaving only a diffusive flux
-with diffusivity *D(z)* defined for all decomposing carbon and nitrogen
-pools. Further discussion of the vertical distribution of carbon inputs
-:math:`{R}_{i}`\ (z), vertical turnover times
-:math:`{k}_{j}`\ (z), and vertical transport *D(z)* is below.
-Discussion of the vertical model and analysis of both decomposition
-structures is in :ref:`Koven et al. (2013) `.
+where :math:`{C}_{i}`\ (z) is now defined at each model level, and in volumetric (gC m\ :sup:`-3`) rather than areal (gC m\ :sup:`-2`) units, along with :math:`{R}_{i}`\ (z) and :math:`{k}_{j}`\ (z). In addition, vertical transport is handled by the last two terms, for diffusive and advective transport. In the base model, advective transport is set to zero, leaving only a diffusive flux with diffusivity *D(z)* defined for all decomposing carbon and nitrogen pools. Further discussion of the vertical distribution of carbon inputs :math:`{R}_{i}`\ (z), vertical turnover times :math:`{k}_{j}`\ (z), and vertical transport *D(z)* is below Discussion of the vertical model and analysis of both decomposition structures is in :ref:`Koven et al. (2013) `.
.. _Figure Pool structure:
.. figure:: soil_C_pools_CN_century.png
- Pool structure, transitions, respired fractions (numbers at
+ Pool structure, transitions, respired fractions (numbers at
end of arrows), and turnover times (numbers in boxes) for the 2
alternate soil decomposition models included in CLM.
CLM-CN Pool Structure, Rate Constants and Parameters
---------------------------------------------------------
-The CLM-CN structure in CLM45 uses three state variables for fresh
-litter and four state variables for soil organic matter (SOM). The
-masses of carbon and nitrogen in the live microbial community are not
-modeled explicitly, but the activity of these organisms is represented
-by decomposition fluxes transferring mass between the litter and SOM
-pools, and heterotrophic respiration losses associated with these
-transformations. The litter and SOM pools in CLM-CN are arranged as a
-converging cascade (Figure 15.2), derived directly from the
-implementation in Biome-BGC v4.1.2 (Thornton et al. 2002; Thornton and
-Rosenbloom, 2005).
-
-Model parameters are estimated based on a synthesis of microcosm
-decomposition studies using radio-labeled substrates (Degens and
-Sparling, 1996; Ladd et al. 1992; Martin et al. 1980; Mary et al. 1993;
-Saggar et al. 1994; Sørensen, 1981; van Veen et al. 1984). Multiple
-exponential models are fitted to data from the microcosm studies to
-estimate exponential decay rates and respiration fractions (Thornton,
-1998). The microcosm experiments used for parameterization were all
-conducted at constant temperature and under moist conditions with
-relatively high mineral nitrogen concentrations, and so the resulting
-rate constants are assumed not limited by the availability of water or
-mineral nitrogen. :numref:`Table Decomposition rate constants` lists the base decomposition rates for each
-litter and SOM pool, as well as a base rate for physical fragmentation
-for the coarse woody debris pool (CWD).
+The CLM-CN structure in CLM45 uses three state variables for fresh litter and four state variables for soil organic matter (SOM). The masses of carbon and nitrogen in the live microbial community are not modeled explicitly, but the activity of these organisms is represented by decomposition fluxes transferring mass between the litter and SOM pools, and heterotrophic respiration losses associated with these transformations. The litter and SOM pools in CLM-CN are arranged as a converging cascade (Figure 15.2), derived directly from the implementation in Biome-BGC v4.1.2 (Thornton et al. 2002; Thornton and Rosenbloom, 2005).
+
+Model parameters are estimated based on a synthesis of microcosm decomposition studies using radio-labeled substrates (Degens and Sparling, 1996; Ladd et al. 1992; Martin et al. 1980; Mary et al. 1993 Saggar et al. 1994; Sørensen, 1981; van Veen et al. 1984). Multiple exponential models are fitted to data from the microcosm studies to estimate exponential decay rates and respiration fractions (Thornton, 1998). The microcosm experiments used for parameterization were all conducted at constant temperature and under moist conditions with relatively high mineral nitrogen concentrations, and so the resulting rate constants are assumed not limited by the availability of water or mineral nitrogen. :numref:`Table Decomposition rate constants` lists the base decomposition rates for each litter and SOM pool, as well as a base rate for physical fragmentation for the coarse woody debris pool (CWD).
.. _Table Decomposition rate constants:
@@ -125,37 +72,21 @@ for the coarse woody debris pool (CWD).
| :math:`{k}_{CWD}` | 0.001 | 0.00004 | - | 1 |
+--------------------------+------------------------------------------------+-----------------------------------------------+---------------+-----------------------------------------+
-The first column of :numref:`Table Decomposition rate constants` gives the rates as used for the Biome-BGC
-model, which uses a discrete-time model with a daily timestep. The
-second column of :numref:`Table Decomposition rate constants` shows the rates transformed for a one-hour
-discrete timestep typical of CLM-CN. The transformation is based on the
-conversion of the initial discrete-time value (:math:`{k}_{disc1}`)
-first to a continuous time value (:math:`{k}_{cont}`), then to the
-new discrete-time value with a different timestep
-(:math:`{k}_{disc2}`) , following Olson (1963):
+The first column of :numref:`Table Decomposition rate constants` gives the rates as used for the Biome-BGC model, which uses a discrete-time model with a daily timestep. The second column of :numref:`Table Decomposition rate constants` shows the rates transformed for a one-hour discrete timestep typical of CLM-CN. The transformation is based on the conversion of the initial discrete-time value (:math:`{k}_{disc1}` first to a continuous time value (:math:`{k}_{cont}`), then to the new discrete-time value with a different timestep (:math:`{k}_{disc2}`), following Olson (1963):
.. math::
- :label: ZEqnNum608251
+ :label: ZEqnNum608251
k_{cont} =-\log \left(1-k_{disc1} \right)
.. math::
- :label: ZEqnNum772630
+ :label: ZEqnNum772630
k_{disc2} =1-\exp \left(-k_{cont} \frac{\Delta t_{2} }{\Delta t_{1} } \right)
-where :math:`\Delta`\ :math:`{t}_{1}` (s) and
-:math:`\Delta`\ t\ :sub:`2` (s) are the time steps of the
-initial and new discrete-time models, respectively.
+where :math:`\Delta`\ :math:`{t}_{1}` (s) and :math:`\Delta`\ t\ :sub:`2` (s) are the time steps of the initial and new discrete-time models, respectively.
-Respiration fractions are parameterized for decomposition fluxes out of
-each litter and SOM pool. The respiration fraction (*rf*, unitless) is
-the fraction of the decomposition carbon flux leaving one of the litter
-or SOM pools that is released as CO\ :sub:`2` due to heterotrophic
-respiration. Respiration fractions and exponential decay rates are
-estimated simultaneously from the results of microcosm decomposition
-experiments (Thornton, 1998). The same values are used in CLM-CN and
-Biome-BGC (:numref:`Table Respiration fractions for litter and SOM pools`).
+Respiration fractions are parameterized for decomposition fluxes out of each litter and SOM pool. The respiration fraction (*rf*, unitless) is the fraction of the decomposition carbon flux leaving one of the litter or SOM pools that is released as CO\ :sub:`2` due to heterotrophic respiration. Respiration fractions and exponential decay rates are estimated simultaneously from the results of microcosm decomposition experiments (Thornton, 1998). The same values are used in CLM-CN and Biome-BGC (:numref:`Table Respiration fractions for litter and SOM pools`).
.. _Table Respiration fractions for litter and SOM pools:
@@ -175,23 +106,16 @@ Biome-BGC (:numref:`Table Respiration fractions for litter and SOM pools`).
| :math:`{rf}_{SOM2}` | 0.46 |
+---------------------------+-----------------------+
| :math:`{rf}_{SOM3}` | 0.55 |
- +---------------------------+-----------------------+
+ +---------------------------+-----------------------+
| :math:`{rf}_{SOM4}` | :math:`{1.0}^{a}` |
+---------------------------+-----------------------+
-:sup:`a`:math:`{}^{a}` The respiration fraction for pool SOM4 is 1.0 by
-definition: since there is no pool downstream of SOM4, the entire carbon
-flux leaving this pool is assumed to be respired as CO\ :sub:`2`.
+:sup:`a`:math:`{}^{a}` The respiration fraction for pool SOM4 is 1.0 by definition: since there is no pool downstream of SOM4, the entire carbon flux leaving this pool is assumed to be respired as CO\ :sub:`2`.
Century-based Pool Structure, Rate Constants and Parameters
----------------------------------------------------------------
-The Century-based decomposition cascade is, like CLM-CN, a first-order
-decay model; the two structures differ in the number of pools, the
-connections between those pools, the turnover times of the pools, and
-the respired fraction during each transition (Figure 15.2). The turnover
-times are different for the Century-based pool structure, following
-those described in Parton et al. (1988) (:numref:`Table Turnover times`).
+The Century-based decomposition cascade is, like CLM-CN, a first-order decay model; the two structures differ in the number of pools, the connections between those pools, the turnover times of the pools, and the respired fraction during each transition (Figure 15.2). The turnover times are different for the Century-based pool structure, following those described in Parton et al. (1988) (:numref:`Table Turnover times`).
.. _Table Turnover times:
@@ -240,591 +164,421 @@ Likewise, values for the respiration fraction of Century-based structure are in
Environmental modifiers on decomposition rate
--------------------------------------------------
-These base rates are modified on each timestep by functions of the
-current soil environment. For the single-level model, there are two rate
-modifiers, temperature (:math:`{r}_{tsoil}`, unitless) and moisture
-(:math:`{r}_{water}`, unitless), both of which are calculated using
-the average environmental conditions of the top five model levels (top
-29 cm of soil column). For the vertically-resolved model, two additional
-environmental modifiers are calculated beyond the temperature and
-moisture limitations: an oxygen scalar (:math:`{r}_{oxygen}`,
-unitless), and a depth scalar (:math:`{r}_{depth}`, unitless).
+These base rates are modified on each timestep by functions of the current soil environment. For the single-level model, there are two rate modifiers, temperature (:math:`{r}_{tsoil}`, unitless) and moisture (:math:`{r}_{water}`, unitless), both of which are calculated using the average environmental conditions of the top five model levels (top 29 cm of soil column). For the vertically-resolved model, two additional environmental modifiers are calculated beyond the temperature and moisture limitations: an oxygen scalar (:math:`{r}_{oxygen}`, unitless), and a depth scalar (:math:`{r}_{depth}`, unitless).
-The Temperature scalar :math:`{r}_{tsoil}` is calculated in CLM
-using a :math:`{Q}_{10}` approach, with :math:`{Q}_{10} = 1.5`.
+The Temperature scalar :math:`{r}_{tsoil}` is calculated in CLM using a :math:`{Q}_{10}` approach, with :math:`{Q}_{10} = 1.5`.
.. math::
- :label: 21.5)
+ :label: 21.5)
r_{tsoil} =Q_{10} ^{\left(\frac{T_{soil,\, j} -T_{ref} }{10} \right)}
-where *j* is the soil layer index, :math:`{T}_{soil,j}` (K) is the
-temperature of soil level *j*. The reference temperature :math:`{T}_{ref}` = 25C.
+where *j* is the soil layer index, :math:`{T}_{soil,j}` (K) is the temperature of soil level *j*. The reference temperature :math:`{T}_{ref}` = 25C.
-The rate scalar for soil water potential (:math:`{r}_{water}`,
-unitless) is calculated using a relationship from Andrén and Paustian
-(1987) and supported by additional data in Orchard and Cook (1983):
+The rate scalar for soil water potential (:math:`{r}_{water}`, unitless) is calculated using a relationship from Andrén and Paustian (1987) and supported by additional data in Orchard and Cook (1983):
.. math::
- :label: 21.6)
+ :label: 21.6)
- r_{water} =\sum _{j=1}^{5}\left\{\begin{array}{l} {0\qquad {\rm for\; }\Psi _{j} <\Psi _{\min } } \\ {\frac{\log \left({\Psi _{\min } \mathord{\left/ {\vphantom {\Psi _{\min } \Psi _{j} }} \right. \kern-\nulldelimiterspace} \Psi _{j} } \right)}{\log \left({\Psi _{\min } \mathord{\left/ {\vphantom {\Psi _{\min } \Psi _{\max } }} \right. \kern-\nulldelimiterspace} \Psi _{\max } } \right)} w_{soil,\, j} \qquad {\rm for\; }\Psi _{\min } \le \Psi _{j} \le \Psi _{\max } } \\ {1\qquad {\rm for\; }\Psi _{j} >\Psi _{\max } \qquad \qquad } \end{array}\right\}
+ r_{water} =\sum _{j=1}^{5}\left\{\begin{array}{l} {0\qquad {\rm for\; }\Psi _{j} <\Psi _{\min } } \\ {\frac{\log \left({\Psi _{\min } \mathord{\left/ {\vphantom {\Psi _{\min } \Psi _{j} }} \right.} \Psi _{j} } \right)}{\log \left({\Psi _{\min } \mathord{\left/ {\vphantom {\Psi _{\min } \Psi _{\max } }} \right.} \Psi _{\max } } \right)} w_{soil,\, j} \qquad {\rm for\; }\Psi _{\min } \le \Psi _{j} \le \Psi _{\max } } \\ {1\qquad {\rm for\; }\Psi _{j} >\Psi _{\max } \qquad \qquad } \end{array}\right\}
-where :math:`{\Psi}_{j}` is the soil water potential in
-layer *j*, :math:`{\Psi}_{min}` is a lower limit for soil
-water potential control on decomposition rate (in CLM5, this was
-changed from a default value of -10 MPa used in CLM4.5 and earlier to a
-default value of -2.5 MPa). :math:`{\Psi}_{max,j}` (MPa) is the soil
-moisture at which decomposition proceeds at a moisture-unlimited
-rate. The default value of :math:`{\Psi}_{max,j}` for CLM5 is updated
-from a saturated value used in CLM4.5 and earlier, to a value
-nominally at field capacity, with a value of -0.002 MPa
-
-For frozen soils, the bulk of the rapid dropoff in decomposition with
-decreasing temperature is due to the moisture limitation, since matric
-potential is limited by temperature in the supercooled water formulation
-of Niu and Yang (2006),
+where :math:`{\Psi}_{j}` is the soil water potential in layer *j*, :math:`{\Psi}_{min}` is a lower limit for soil water potential control on decomposition rate (in CLM5, this was changed from a default value of -10 MPa used in CLM4.5 and earlier to a default value of -2.5 MPa). :math:`{\Psi}_{max,j}` (MPa) is the soil moisture at which decomposition proceeds at a moisture-unlimited rate. The default value of :math:`{\Psi}_{max,j}` for CLM5 is updated from a saturated value used in CLM4.5 and earlier, to a value nominally at field capacity, with a value of -0.002 MPa For frozen soils, the bulk of the rapid dropoff in decomposition with decreasing temperature is due to the moisture limitation, since matric potential is limited by temperature in the supercooled water formulation of Niu and Yang (2006),
.. math::
- :label: 21.8)
+ :label: 21.8)
\psi \left(T\right)=-\frac{L_{f} \left(T-T_{f} \right)}{10^{3} T}
-An additional frozen decomposition limitation can be specified using a
-‘frozen Q\ :sub:`10`' following :ref:`Koven et al. (2011) `, however the
-default value of this is the same as the unfrozen Q\ :sub:`10`
-value, and therefore the basic hypothesis is that frozen respiration is
-limited by liquid water availability, and can be modeled following the
-same approach as thawed but dry soils.
-
-An additional rate scalar, :math:`{r}_{oxygen}` is enabled when the
-CH\ :sub:`4` submodel is used (set equal to 1 for the single layer
-model or when the CH\ :sub:`4` submodel is disabled). This limits
-decomposition when there is insufficient molecular oxygen to satisfy
-stoichiometric demand (1 mol O\ :sub:`2` consumed per mol
-CO\ :sub:`2` produced) from heterotrophic decomposers, and supply
-from diffusion through soil layers (unsaturated and saturated) or
-aerenchyma (Chapter 19). A minimum value of :math:`{r}_{oxygen}` is
-set at 0.2, with the assumption that oxygen within organic tissues can
-supply the necessary stoichiometric demand at this rate. This value lies
-between estimates of 0.025–0.1 (Frolking et al. 2001), and 0.35 (Wania
-et al. 2009); the large range of these estimates poses a large
-unresolved uncertainty.
-
-Lastly, a possible explicit depth dependence, :math:`{r}_{depth}`,
-(set equal to 1 for the single layer model) can be applied to soil C
-decomposition rates to account for processes other than temperature,
-moisture, and anoxia that can limit decomposition. This depth dependence
-of decomposition was shown by Jenkinson and Coleman (2008) to be an
-important term in fitting total C and 14C profiles, and implies that
-unresolved processes, such as priming effects, microscale anoxia, soil
-mineral surface and/or aggregate stabilization may be important in
-controlling the fate of carbon at depth :ref:`Koven et al. (2013) `. CLM
-includes these unresolved depth controls via an exponential decrease in
-the soil turnover time with depth:
-
-.. math::
- :label: 21.9)
+An additional frozen decomposition limitation can be specified using a ‘frozen Q\ :sub:`10`' following :ref:`Koven et al. (2011) `, however the default value of this is the same as the unfrozen Q\ :sub:`10` value, and therefore the basic hypothesis is that frozen respiration is limited by liquid water availability, and can be modeled following the same approach as thawed but dry soils.
+
+An additional rate scalar, :math:`{r}_{oxygen}` is enabled when the CH\ :sub:`4` submodel is used (set equal to 1 for the single layer model or when the CH\ :sub:`4` submodel is disabled). This limits decomposition when there is insufficient molecular oxygen to satisfy stoichiometric demand (1 mol O\ :sub:`2` consumed per mol CO\ :sub:`2` produced) from heterotrophic decomposers, and supply from diffusion through soil layers (unsaturated and saturated) or aerenchyma (Chapter 19). A minimum value of :math:`{r}_{oxygen}` is set at 0.2, with the assumption that oxygen within organic tissues can supply the necessary stoichiometric demand at this rate. This value lies between estimates of 0.025–0.1 (Frolking et al. 2001), and 0.35 (Wania et al. 2009); the large range of these estimates poses a large unresolved uncertainty.
+
+Lastly, a possible explicit depth dependence, :math:`{r}_{depth}`, (set equal to 1 for the single layer model) can be applied to soil C decomposition rates to account for processes other than temperature, moisture, and anoxia that can limit decomposition. This depth dependence of decomposition was shown by Jenkinson and Coleman (2008) to be an important term in fitting total C and 14C profiles, and implies that unresolved processes, such as priming effects, microscale anoxia, soil mineral surface and/or aggregate stabilization may be important in controlling the fate of carbon at depth :ref:`Koven et al. (2013) `. CLM includes these unresolved depth controls via an exponential decrease in the soil turnover time with depth:
+
+.. math::
+ :label: 21.9)
r_{depth} =\exp \left(-\frac{z}{z_{\tau } } \right)
-where :math:`{z}_{\tau}` is the e-folding depth for decomposition. For
-CLM4.5, the default value of this was 0.5m. For CLM5, this has been
-changed to a default value of 10m, which effectively means that
-intrinsic decomposition rates may proceed as quickly at depth as at the surface.
+where :math:`{z}_{\tau}` is the e-folding depth for decomposition. For CLM4.5, the default value of this was 0.5m. For CLM5, this has been changed to a default value of 10m, which effectively means that intrinsic decomposition rates may proceed as quickly at depth as at the surface.
The combined decomposition rate scalar (:math:`{r}_{total}`,unitless) is:
.. math::
- :label: 21.10)
+ :label: 21.10)
r_{total} =r_{tsoil} r_{water} r_{oxygen} r_{depth} .
+.. _decomp_mgmt_modifiers:
+
+Management modifiers on decomposition rate
+--------------------------------------------------
+
+Tillage of cropland soil is represented as an additional rate scalar that depends on tillage intensity (default off), soil pool, and time since planting :ref:`(Graham et al., 2021) `. The tillage enhancement is strongest in the first 14 days after planting (idpp < 15), weaker in the next 30 days (15 ≤ idpp < 45), weaker still in the next 30 days (45 ≤ idpp < 75), and nonexistent after that (idpp ≥ 75).
+
+.. list-table:: Tillage decomposition rate scalars. Values in each cell represent enhancement in different periods of days past planting: [0, 14], [15, 44], [45, 74].
+ :header-rows: 1
+
+ * - \
+ - low
+ - high
+ * - Litter 2 (cel_lit)
+ - 1.5, 1.5, 1.1
+ - 1.8, 1.5, 1.1
+ * - Litter 3 (lig_lit)
+ - 1.5, 1.5, 1.1
+ - 1.8, 1.5, 1.1
+ * - SOM 1 (act_som)
+ - 1.0, 1.0, 1.0
+ - 1.2, 1.0, 1.0
+ * - SOM 2 (slo_som)
+ - 3.0, 1.6, 1.3
+ - 4.8, 3.5, 2.5
+ * - SOM 3 (pas_som)
+ - 3.0, 1.6, 1.3
+ - 4.8, 3.5, 2.5
+
N-limitation of Decomposition Fluxes
-----------------------------------------
-Decomposition rates can also be limited by the availability of mineral
-nitrogen, but calculation of this limitation depends on first estimating
-the potential rates of decomposition, assuming an unlimited mineral
-nitrogen supply. The general case is described here first, referring to
-a generic decomposition flux from an “upstream” pool (*u*) to a
-“downstream” pool (*d*), with an intervening loss due to respiration.
-The potential carbon flux out of the upstream pool
-(:math:`{CF}_{pot,u}`, gC m\ :sup:`-2` s\ :sup:`-1`) is:
+Decomposition rates can also be limited by the availability of mineral nitrogen, but calculation of this limitation depends on first estimating the potential rates of decomposition, assuming an unlimited mineral nitrogen supply. The general case is described here first, referring to a generic decomposition flux from an "upstream" pool (*u*) to a "downstream" pool (*d*), with an intervening loss due to respiration The potential carbon flux out of the upstream pool (:math:`{CF}_{pot,u}`, gC m\ :sup:`-2` s\ :sup:`-1`) is:
.. math::
- :label: 21.11)
+ :label: 21.11)
CF_{pot,\, u} =CS_{u} k_{u}
-where :math:`{CS}_{u}` (gC m\ :sup:`-2`) is the initial mass
-in the upstream pool and :math:`{k}_{u}` is the decay rate constant
-(s:sup:`-1`) for the upstream pool, adjusted for temperature and
-moisture conditions. Depending on the C:N ratios of the upstream and
-downstream pools and the amount of carbon lost in the transformation due
-to respiration (the respiration fraction), the execution of this
-potential carbon flux can generate either a source or a sink of new
-mineral nitrogen
-(:math:`{NF}_{pot\_min,u}`\ :math:`{}_{\rightarrow}`\ :math:`{}_{d}`, gN m\ :sup:`-2` s\ :sup:`-1`). The governing equation
-(Thornton and Rosenbloom, 2005) is:
+where :math:`{CS}_{u}` (gC m\ :sup:`-2`) is the initial mass in the upstream pool and :math:`{k}_{u}` is the decay rate constant (s\ :sup:`-1`) for the upstream pool, adjusted for temperature and moisture conditions. Depending on the C:N ratios of the upstream and downstream pools and the amount of carbon lost in the transformation due to respiration (the respiration fraction), the execution of this potential carbon flux can generate either a source or a sink of new mineral nitrogen (:math:`{NF}_{pot\_min,u}`\ :math:`{}_{\rightarrow}`\ :math:`{}_{d}`, gN m\ :sup:`-2` s\ :sup:`-1`). The governing equation (Thornton and Rosenbloom, 2005) is:
.. math::
- :label: 21.12)
+ :label: 21.12)
NF_{pot\_ min,\, u\to d} =\frac{CF_{pot,\, u} \left(1-rf_{u} -\frac{CN_{d} }{CN_{u} } \right)}{CN_{d} }
-where :math:`{rf}_{u}` is the respiration fraction for fluxes
-leaving the upstream pool, :math:`{CN}_{u}` and :math:`{CN}_{d}`
-are the C:N ratios for upstream and downstream pools, respectively.
-Negative values of
-:math:`{NF}_{pot\_min,u}`\ :math:`{}_{\rightarrow}`\ :math:`{}_{d}`
-indicate that the decomposition flux results in a source of new mineral
-nitrogen, while positive values indicate that the potential
-decomposition flux results in a sink (demand) for mineral nitrogen.
+where :math:`{rf}_{u}` is the respiration fraction for fluxes leaving the upstream pool, :math:`{CN}_{u}` and :math:`{CN}_{d}` are the C:N ratios for upstream and downstream pools, respectively Negative values of :math:`{NF}_{pot\_min,u}`\ :math:`{}_{\rightarrow}`\ :math:`{}_{d}` indicate that the decomposition flux results in a source of new mineral nitrogen, while positive values indicate that the potential decomposition flux results in a sink (demand) for mineral nitrogen.
-Following from the general case, potential carbon fluxes leaving
-individual pools in the decomposition cascade, for the example of the
-CLM-CN pool structure, are given as:
+Following from the general case, potential carbon fluxes leaving individual pools in the decomposition cascade, for the example of the CLM-CN pool structure, are given as:
.. math::
- :label: 21.13)
+ :label: 21.13)
- CF_{pot,\, Lit1} ={CS_{Lit1} k_{Lit1} r_{total} \mathord{\left/ {\vphantom {CS_{Lit1} k_{Lit1} r_{total} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{pot,\, Lit1} ={CS_{Lit1} k_{Lit1} r_{total} \mathord{\left/ {\vphantom {CS_{Lit1} k_{Lit1} r_{total} \Delta t}} \right.} \Delta t}
.. math::
- :label: 21.14)
+ :label: 21.14)
- CF_{pot,\, Lit2} ={CS_{Lit2} k_{Lit2} r_{total} \mathord{\left/ {\vphantom {CS_{Lit2} k_{Lit2} r_{total} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{pot,\, Lit2} ={CS_{Lit2} k_{Lit2} r_{total} \mathord{\left/ {\vphantom {CS_{Lit2} k_{Lit2} r_{total} \Delta t}} \right.} \Delta t}
.. math::
- :label: 21.15)
+ :label: 21.15)
- CF_{pot,\, Lit3} ={CS_{Lit3} k_{Lit3} r_{total} \mathord{\left/ {\vphantom {CS_{Lit3} k_{Lit3} r_{total} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{pot,\, Lit3} ={CS_{Lit3} k_{Lit3} r_{total} \mathord{\left/ {\vphantom {CS_{Lit3} k_{Lit3} r_{total} \Delta t}} \right.} \Delta t}
.. math::
- :label: 21.16)
+ :label: 21.16)
- CF_{pot,\, SOM1} ={CS_{SOM1} k_{SOM1} r_{total} \mathord{\left/ {\vphantom {CS_{SOM1} k_{SOM1} r_{total} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{pot,\, SOM1} ={CS_{SOM1} k_{SOM1} r_{total} \mathord{\left/ {\vphantom {CS_{SOM1} k_{SOM1} r_{total} \Delta t}} \right.} \Delta t}
.. math::
- :label: 21.17)
+ :label: 21.17)
- CF_{pot,\, SOM2} ={CS_{SOM2} k_{SOM2} r_{total} \mathord{\left/ {\vphantom {CS_{SOM2} k_{SOM2} r_{total} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{pot,\, SOM2} ={CS_{SOM2} k_{SOM2} r_{total} \mathord{\left/ {\vphantom {CS_{SOM2} k_{SOM2} r_{total} \Delta t}} \right.} \Delta t}
.. math::
- :label: 21.18)
+ :label: 21.18)
- CF_{pot,\, SOM3} ={CS_{SOM3} k_{SOM3} r_{total} \mathord{\left/ {\vphantom {CS_{SOM3} k_{SOM3} r_{total} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{pot,\, SOM3} ={CS_{SOM3} k_{SOM3} r_{total} \mathord{\left/ {\vphantom {CS_{SOM3} k_{SOM3} r_{total} \Delta t}} \right.} \Delta t}
.. math::
- :label: 21.19)
+ :label: 21.19)
- CF_{pot,\, SOM4} ={CS_{SOM4} k_{SOM4} r_{total} \mathord{\left/ {\vphantom {CS_{SOM4} k_{SOM4} r_{total} \Delta t}} \right. \kern-\nulldelimiterspace} \Delta t}
+ CF_{pot,\, SOM4} ={CS_{SOM4} k_{SOM4} r_{total} \mathord{\left/ {\vphantom {CS_{SOM4} k_{SOM4} r_{total} \Delta t}} \right.} \Delta t}
-where the factor (1/:math:`\Delta`\ *t*) is included because the rate
-constant is calculated for the entire timestep (Eqs. and ), but the
-convention is to express all fluxes on a per-second basis. Potential
-mineral nitrogen fluxes associated with these decomposition steps are,
-again for the example of the CLM-CN pool structure (the CENTURY
-structure will be similar but without the different terminal step):
+where the factor (1/:math:`\Delta`\ *t*) is included because the rate constant is calculated for the entire timestep (Eqs. and ), but the convention is to express all fluxes on a per-second basis. Potential mineral nitrogen fluxes associated with these decomposition steps are, again for the example of the CLM-CN pool structure (the CENTURY structure will be similar but without the different terminal step):
.. math::
- :label: ZEqnNum934998
+ :label: ZEqnNum934998
- NF_{pot\_ min,\, Lit1\to SOM1} ={CF_{pot,\, Lit1} \left(1-rf_{Lit1} -\frac{CN_{SOM1} }{CN_{Lit1} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, Lit1} \left(1-rf_{Lit1} -\frac{CN_{SOM1} }{CN_{Lit1} } \right) CN_{SOM1} }} \right. \kern-\nulldelimiterspace} CN_{SOM1} }
+ NF_{pot\_ min,\, Lit1\to SOM1} ={CF_{pot,\, Lit1} \left(1-rf_{Lit1} -\frac{CN_{SOM1} }{CN_{Lit1} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, Lit1} \left(1-rf_{Lit1} -\frac{CN_{SOM1} }{CN_{Lit1} } \right) CN_{SOM1} }} \right.} CN_{SOM1} }
.. math::
- :label: 21.21)
+ :label: 21.21)
- NF_{pot\_ min,\, Lit2\to SOM2} ={CF_{pot,\, Lit2} \left(1-rf_{Lit2} -\frac{CN_{SOM2} }{CN_{Lit2} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, Lit2} \left(1-rf_{Lit2} -\frac{CN_{SOM2} }{CN_{Lit2} } \right) CN_{SOM2} }} \right. \kern-\nulldelimiterspace} CN_{SOM2} }
+ NF_{pot\_ min,\, Lit2\to SOM2} ={CF_{pot,\, Lit2} \left(1-rf_{Lit2} -\frac{CN_{SOM2} }{CN_{Lit2} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, Lit2} \left(1-rf_{Lit2} -\frac{CN_{SOM2} }{CN_{Lit2} } \right) CN_{SOM2} }} \right.} CN_{SOM2} }
.. math::
- :label: 21.22)
+ :label: 21.22)
- NF_{pot\_ min,\, Lit3\to SOM3} ={CF_{pot,\, Lit3} \left(1-rf_{Lit3} -\frac{CN_{SOM3} }{CN_{Lit3} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, Lit3} \left(1-rf_{Lit3} -\frac{CN_{SOM3} }{CN_{Lit3} } \right) CN_{SOM3} }} \right. \kern-\nulldelimiterspace} CN_{SOM3} }
+ NF_{pot\_ min,\, Lit3\to SOM3} ={CF_{pot,\, Lit3} \left(1-rf_{Lit3} -\frac{CN_{SOM3} }{CN_{Lit3} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, Lit3} \left(1-rf_{Lit3} -\frac{CN_{SOM3} }{CN_{Lit3} } \right) CN_{SOM3} }} \right.} CN_{SOM3} }
.. math::
- :label: 21.23)
+ :label: 21.23)
- NF_{pot\_ min,\, SOM1\to SOM2} ={CF_{pot,\, SOM1} \left(1-rf_{SOM1} -\frac{CN_{SOM2} }{CN_{SOM1} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, SOM1} \left(1-rf_{SOM1} -\frac{CN_{SOM2} }{CN_{SOM1} } \right) CN_{SOM2} }} \right. \kern-\nulldelimiterspace} CN_{SOM2} }
+ NF_{pot\_ min,\, SOM1\to SOM2} ={CF_{pot,\, SOM1} \left(1-rf_{SOM1} -\frac{CN_{SOM2} }{CN_{SOM1} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, SOM1} \left(1-rf_{SOM1} -\frac{CN_{SOM2} }{CN_{SOM1} } \right) CN_{SOM2} }} \right.} CN_{SOM2} }
.. math::
- :label: 21.24)
+ :label: 21.24)
- NF_{pot\_ min,\, SOM2\to SOM3} ={CF_{pot,\, SOM2} \left(1-rf_{SOM2} -\frac{CN_{SOM3} }{CN_{SOM2} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, SOM2} \left(1-rf_{SOM2} -\frac{CN_{SOM3} }{CN_{SOM2} } \right) CN_{SOM3} }} \right. \kern-\nulldelimiterspace} CN_{SOM3} }
+ NF_{pot\_ min,\, SOM2\to SOM3} ={CF_{pot,\, SOM2} \left(1-rf_{SOM2} -\frac{CN_{SOM3} }{CN_{SOM2} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, SOM2} \left(1-rf_{SOM2} -\frac{CN_{SOM3} }{CN_{SOM2} } \right) CN_{SOM3} }} \right.} CN_{SOM3} }
.. math::
- :label: 21.25)
+ :label: 21.25)
- NF_{pot\_ min,\, SOM3\to SOM4} ={CF_{pot,\, SOM3} \left(1-rf_{SOM3} -\frac{CN_{SOM4} }{CN_{SOM3} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, SOM3} \left(1-rf_{SOM3} -\frac{CN_{SOM4} }{CN_{SOM3} } \right) CN_{SOM4} }} \right. \kern-\nulldelimiterspace} CN_{SOM4} }
+ NF_{pot\_ min,\, SOM3\to SOM4} ={CF_{pot,\, SOM3} \left(1-rf_{SOM3} -\frac{CN_{SOM4} }{CN_{SOM3} } \right)\mathord{\left/ {\vphantom {CF_{pot,\, SOM3} \left(1-rf_{SOM3} -\frac{CN_{SOM4} }{CN_{SOM3} } \right) CN_{SOM4} }} \right.} CN_{SOM4} }
.. math::
- :label: ZEqnNum473594
+ :label: ZEqnNum473594
- NF_{pot\_ min,\, SOM4} =-{CF_{pot,\, SOM4} \mathord{\left/ {\vphantom {CF_{pot,\, SOM4} CN_{SOM4} }} \right. \kern-\nulldelimiterspace} CN_{SOM4} }
+ NF_{pot\_ min,\, SOM4} =-{CF_{pot,\, SOM4} \mathord{\left/ {\vphantom {CF_{pot,\, SOM4} CN_{SOM4} }} \right.} CN_{SOM4} }
-where the special form of Eq. arises because there is no SOM pool
-downstream of SOM4 in the converging cascade: all carbon fluxes leaving
-that pool are assumed to be in the form of respired CO\ :sub:`2`,
-and all nitrogen fluxes leaving that pool are assumed to be sources of
-new mineral nitrogen.
+where the special form of Eq. arises because there is no SOM pool downstream of SOM4 in the converging cascade: all carbon fluxes leaving that pool are assumed to be in the form of respired CO\ :sub:`2`, and all nitrogen fluxes leaving that pool are assumed to be sources of new mineral nitrogen.
-Steps in the decomposition cascade that result in release of new mineral
-nitrogen (mineralization fluxes) are allowed to proceed at their
-potential rates, without modification for nitrogen availability. Steps
-that result in an uptake of mineral nitrogen (immobilization fluxes) are
-subject to rate limitation, depending on the availability of mineral
-nitrogen, the total immobilization demand, and the total demand for soil
-mineral nitrogen to support new plant growth. The potential mineral
-nitrogen fluxes from Eqs. - are evaluated, summing all the positive
-fluxes to generate the total potential nitrogen immobilization flux
-(:math:`{NF}_{immob\_demand}`, gN m\ :sup:`-2` s\ :sup:`-1`), and summing absolute values of all the negative
-fluxes to generate the total nitrogen mineralization flux
-(:math:`{NF}_{gross\_nmin}`, gN m\ :sup:`-2` s\ :sup:`-1`). Since :math:`{NF}_{griss\_nmin}` is a source of
-new mineral nitrogen to the soil mineral nitrogen pool it is not limited
-by the availability of soil mineral nitrogen, and is therefore an actual
-as opposed to a potential flux.
+Steps in the decomposition cascade that result in release of new mineral nitrogen (mineralization fluxes) are allowed to proceed at their potential rates, without modification for nitrogen availability. Steps that result in an uptake of mineral nitrogen (immobilization fluxes) are subject to rate limitation, depending on the availability of mineral nitrogen, the total immobilization demand, and the total demand for soil mineral nitrogen to support new plant growth. The potential mineral nitrogen fluxes from Eqs. - are evaluated, summing all the positive fluxes to generate the total potential nitrogen immobilization flux (:math:`{NF}_{immob\_demand}`, gN m\ :sup:`-2` s\ :sup:`-1`), and summing absolute values of all the negative fluxes to generate the total nitrogen mineralization flux (:math:`{NF}_{gross\_nmin}`, gN m\ :sup:`-2` s\ :sup:`-1`). Since :math:`{NF}_{griss\_nmin}` is a source of new mineral nitrogen to the soil mineral nitrogen pool it is not limited by the availability of soil mineral nitrogen, and is therefore an actual as opposed to a potential flux.
N Competition between plant uptake and soil immobilization fluxes
----------------------------------------------------------------------
-Once :math:`{NF}_{immob\_demand }` and :math:`{NF}_{nit\_demand }` for each layer *j* are known, the competition between plant and microbial nitrogen demand can be resolved. Mineral nitrogen in
-the soil pool (:math:`{NS}_{sminn}`, gN m\ :sup:`-2`) at the
-beginning of the timestep is considered the available supply.
+Once :math:`{NF}_{immob\_demand }` and :math:`{NF}_{nit\_demand }` for each layer *j* are known, the competition between plant and microbial nitrogen demand can be resolved. Mineral nitrogen in the soil pool (:math:`{NS}_{sminn}`, gN m\ :sup:`-2`) at the beginning of the timestep is considered the available supply.
-Here, the :math:`{NF}_{plant\_demand}` is the theoretical maximum demand for nitrogen by plants to meet the entire carbon uptake given an N cost of zero (and therefore represents the upper bound on N requirements). N uptake costs that are
-:math:`>` 0 imply that the plant will take up less N that it demands, ultimately. However, given the heuristic nature of the N competition algorithm, this discrepancy is not explicitly resolved here.
+Here, the :math:`{NF}_{plant\_demand}` is the theoretical maximum demand for nitrogen by plants to meet the entire carbon uptake given an N cost of zero (and therefore represents the upper bound on N requirements). N uptake costs that are :math:`>` 0 imply that the plant will take up less N that it demands, ultimately. However, given the heuristic nature of the N competition algorithm, this discrepancy is not explicitly resolved here.
The hypothetical plant nitrogen demand from the soil mineral pool is distributed between layers in proportion to the profile of available mineral N:
.. math::
:label: 21.291
-
- NF_{plant\_ demand,j} = NF_{plant\_ demand} NS_{sminn\_ j} / \sum _{j=1}^{nj}NS_{sminn,j}
-Plants first compete for ammonia (NH4). For each soil layer (*j*), we calculate the total NH4 demand as:
+ NF_{plant\_ demand,j} = NF_{plant\_ demand} NS_{sminn\_ j} / \sum _{j=1}^{nj}NS_{sminn,j}
+
+Plants first compete for ammonia (NH4). For each soil layer (*j*), we calculate the total NH4 demand as:
.. math::
:label: 21.292
- NF_{total\_ demand_nh4,j} = NF_{immob\_ demand,j} + NF_{immob\_ demand,j} + NF_{nit\_ demand,j}
+ NF_{total\_ demand_nh4,j} = NF_{immob\_ demand,j} + NF_{immob\_ demand,j} + NF_{nit\_ demand,j}
-where
-If :math:`{NF}_{total\_demand,j}`\ :math:`\Delta`\ *t* :math:`<`
-:math:`{NS}_{sminn,j}`, then the available pool is large enough to
-meet both the maximum plant and microbial demand, then immobilization proceeds at the maximum rate.
+where If :math:`{NF}_{total\_demand,j}`\ :math:`\Delta`\ *t* :math:`<` :math:`{NS}_{sminn,j}`, then the available pool is large enough to meet both the maximum plant and microbial demand, then immobilization proceeds at the maximum rate.
.. math::
- :label: 21.29)
+ :label: 21.29)
f_{immob\_demand,j} = 1.0
-where :math:`{f}_{immob\_demand,j}` is the fraction of potential immobilization demand that can be met given current supply of mineral nitrogen in this layer. We also set the actual nitrification flux to be the same as the potential flux (:math:`NF_{nit}` = :math:`NF_{nit\_ demand}`).
+where :math:`{f}_{immob\_demand,j}` is the fraction of potential immobilization demand that can be met given current supply of mineral nitrogen in this layer. We also set the actual nitrification flux to be the same as the potential flux (:math:`NF_{nit}` = :math:`NF_{nit\_ demand}`).
-If :math:`{NF}_{total\_demand,j}`\ :math:`\Delta`\ *t*
-:math:`\mathrm{\ge}` :math:`{NS}_{sminn,j}`, then there is not enough
-mineral nitrogen to meet the combined demands for plant growth and
-heterotrophic immobilization, immobilization is reduced proportional to the discrepancy, by :math:`f_{immob\_ demand,j}`, where
+If :math:`{NF}_{total\_demand,j} \Delta t \mathrm{\ge} {NS}_{sminn,j}`, then there is not enough mineral nitrogen to meet the combined demands for plant growth and heterotrophic immobilization, immobilization is reduced proportional to the discrepancy, by :math:`f_{immob\_ demand,j}`, where
.. math::
- :label: 21.30)
+ :label: 21.30)
f_{immob\_ demand,j} = \frac{NS_{sminn,j} }{\Delta t\, NF_{total\_ demand,j} }
-The N available to the FUN model for plant uptake (:math:`{NF}_ {plant\_ avail\_ sminn}` (gN m\ :sup:`-2`), which determines both the cost of N uptake, and the absolute limit on the N which is available for acquisition, is calculated as the total mineralized pool minus the actual immobilized flux:
+The N available to the FUN model for plant uptake (:math:`{NF}_ {plant\_ avail\_ sminn}` (gN m\ :sup:`-2`), which determines both the cost of N uptake, and the absolute limit on the N which is available for acquisition, is calculated as the total mineralized pool minus the actual immobilized flux:
.. math::
- :label: 21.311)
+ :label: 21.311)
NF_{plant\_ avail\_ sminn,j} = NS_{sminn,j} - f_{immob\_demand} NF_{immob\_ demand,j}
-
-This treatment of competition for nitrogen as a limiting resource is
-referred to a demand-based competition, where the fraction of the
-available resource that eventually flows to a particular process depends
-on the demand from that process in comparison to the total demand from
-all processes. Processes expressing a greater demand acquire a larger
-vfraction of the available resource.
-
+This treatment of competition for nitrogen as a limiting resource is referred to a demand-based competition, where the fraction of the available resource that eventually flows to a particular process depends on the demand from that process in comparison to the total demand from all processes. Processes expressing a greater demand acquire a larger vfraction of the available resource.
Final Decomposition Fluxes
-------------------------------
-With :math:`{f}_{immob\_demand}` known, final decomposition fluxes
-can be calculated. Actual carbon fluxes leaving the individual litter
-and SOM pools, again for the example of the CLM-CN pool structure (the
-CENTURY structure will be similar but, again without the different
-terminal step), are calculated as:
+With :math:`{f}_{immob\_demand}` known, final decomposition fluxes can be calculated. Actual carbon fluxes leaving the individual litter and SOM pools, again for the example of the CLM-CN pool structure (the CENTURY structure will be similar but, again without the different terminal step), are calculated as:
.. math::
- :label: 21.32)
+ :label: 21.32)
CF_{Lit1} =\left\{\begin{array}{l} {CF_{pot,\, Lit1} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, Lit1\to SOM1} >0} \\ {CF_{pot,\, Lit1} \qquad {\rm for\; }NF_{pot\_ min,\, Lit1\to SOM1} \le 0} \end{array}\right\}
.. math::
- :label: 21.33)
+ :label: 21.33)
CF_{Lit2} =\left\{\begin{array}{l} {CF_{pot,\, Lit2} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, Lit2\to SOM2} >0} \\ {CF_{pot,\, Lit2} \qquad {\rm for\; }NF_{pot\_ min,\, Lit2\to SOM2} \le 0} \end{array}\right\}
.. math::
- :label: 21.34)
+ :label: 21.34)
CF_{Lit3} =\left\{\begin{array}{l} {CF_{pot,\, Lit3} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, Lit3\to SOM3} >0} \\ {CF_{pot,\, Lit3} \qquad {\rm for\; }NF_{pot\_ min,\, Lit3\to SOM3} \le 0} \end{array}\right\}
.. math::
- :label: 21.35)
+ :label: 21.35)
CF_{SOM1} =\left\{\begin{array}{l} {CF_{pot,\, SOM1} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, SOM1\to SOM2} >0} \\ {CF_{pot,\, SOM1} \qquad {\rm for\; }NF_{pot\_ min,\, SOM1\to SOM2} \le 0} \end{array}\right\}
.. math::
- :label: 21.36)
+ :label: 21.36)
CF_{SOM2} =\left\{\begin{array}{l} {CF_{pot,\, SOM2} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, SOM2\to SOM3} >0} \\ {CF_{pot,\, SOM2} \qquad {\rm for\; }NF_{pot\_ min,\, SOM2\to SOM3} \le 0} \end{array}\right\}
.. math::
- :label: 21.37)
+ :label: 21.37)
CF_{SOM3} =\left\{\begin{array}{l} {CF_{pot,\, SOM3} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, SOM3\to SOM4} >0} \\ {CF_{pot,\, SOM3} \qquad {\rm for\; }NF_{pot\_ min,\, SOM3\to SOM4} \le 0} \end{array}\right\}
.. math::
- :label: 21.38)
+ :label: 21.38)
CF_{SOM4} =CF_{pot,\, SOM4}
-Heterotrophic respiration fluxes (losses of carbon as
-CO\ :sub:`2` to the atmosphere) are:
+Heterotrophic respiration fluxes (losses of carbon as CO\ :sub:`2` to the atmosphere) are:
.. math::
- :label: 21.39)
+ :label: 21.39)
CF_{Lit1,\, HR} =CF_{Lit1} rf_{Lit1}
.. math::
- :label: 21.40)
+ :label: 21.40)
CF_{Lit2,\, HR} =CF_{Lit2} rf_{Lit2}
.. math::
- :label: 21.41)
+ :label: 21.41)
CF_{Lit3,\, HR} =CF_{Lit3} rf_{Lit3}
.. math::
- :label: 21.42)
+ :label: 21.42)
CF_{SOM1,\, HR} =CF_{SOM1} rf_{SOM1}
.. math::
- :label: 21.43)
+ :label: 21.43)
CF_{SOM2,\, HR} =CF_{SOM2} rf_{SOM2}
.. math::
- :label: 21.44)
+ :label: 21.44)
CF_{SOM3,\, HR} =CF_{SOM3} rf_{SOM3}
.. math::
- :label: 21.45)
+ :label: 21.45)
CF_{SOM4,\, HR} =CF_{SOM4} rf_{SOM4}
-Transfers of carbon from upstream to downstream pools in the
-decomposition cascade are given as:
+Transfers of carbon from upstream to downstream pools in the decomposition cascade are given as:
.. math::
- :label: 21.46)
+ :label: 21.46)
CF_{Lit1,\, SOM1} =CF_{Lit1} \left(1-rf_{Lit1} \right)
.. math::
- :label: 21.47)
+ :label: 21.47)
CF_{Lit2,\, SOM2} =CF_{Lit2} \left(1-rf_{Lit2} \right)
.. math::
- :label: 21.48)
+ :label: 21.48)
CF_{Lit3,\, SOM3} =CF_{Lit3} \left(1-rf_{Lit3} \right)
.. math::
- :label: 21.49)
+ :label: 21.49)
CF_{SOM1,\, SOM2} =CF_{SOM1} \left(1-rf_{SOM1} \right)
.. math::
- :label: 21.50)
+ :label: 21.50)
CF_{SOM2,\, SOM3} =CF_{SOM2} \left(1-rf_{SOM2} \right)
.. math::
- :label: 21.51)
+ :label: 21.51)
CF_{SOM3,\, SOM4} =CF_{SOM3} \left(1-rf_{SOM3} \right)
-In accounting for the fluxes of nitrogen between pools in the
-decomposition cascade and associated fluxes to or from the soil mineral
-nitrogen pool, the model first calculates a flux of nitrogen from an
-upstream pool to a downstream pool, then calculates a flux either from
-the soil mineral nitrogen pool to the downstream pool (immobilization)
-or from the downstream pool to the soil mineral nitrogen pool
-(mineralization). Transfers of nitrogen from upstream to downstream
-pools in the decomposition cascade are given as:
+In accounting for the fluxes of nitrogen between pools in the decomposition cascade and associated fluxes to or from the soil mineral nitrogen pool, the model first calculates a flux of nitrogen from an upstream pool to a downstream pool, then calculates a flux either from the soil mineral nitrogen pool to the downstream pool (immobilization or from the downstream pool to the soil mineral nitrogen pool (mineralization). Transfers of nitrogen from upstream to downstream pools in the decomposition cascade are given as:
.. math::
- :label: 21.52)
+ :label: 21.52)
- NF_{Lit1,\, SOM1} ={CF_{Lit1} \mathord{\left/ {\vphantom {CF_{Lit1} CN_{Lit1} }} \right. \kern-\nulldelimiterspace} CN_{Lit1} }
+ NF_{Lit1,\, SOM1} ={CF_{Lit1} \mathord{\left/ {\vphantom {CF_{Lit1} CN_{Lit1} }} \right.} CN_{Lit1} }
.. math::
- :label: 21.53)
+ :label: 21.53)
- NF_{Lit2,\, SOM2} ={CF_{Lit2} \mathord{\left/ {\vphantom {CF_{Lit2} CN_{Lit2} }} \right. \kern-\nulldelimiterspace} CN_{Lit2} }
+ NF_{Lit2,\, SOM2} ={CF_{Lit2} \mathord{\left/ {\vphantom {CF_{Lit2} CN_{Lit2} }} \right.} CN_{Lit2} }
.. math::
- :label: 21.54)
+ :label: 21.54)
- NF_{Lit3,\, SOM3} ={CF_{Lit3} \mathord{\left/ {\vphantom {CF_{Lit3} CN_{Lit3} }} \right. \kern-\nulldelimiterspace} CN_{Lit3} }
+ NF_{Lit3,\, SOM3} ={CF_{Lit3} \mathord{\left/ {\vphantom {CF_{Lit3} CN_{Lit3} }} \right.} CN_{Lit3} }
.. math::
- :label: 21.55)
+ :label: 21.55)
- NF_{SOM1,\, SOM2} ={CF_{SOM1} \mathord{\left/ {\vphantom {CF_{SOM1} CN_{SOM1} }} \right. \kern-\nulldelimiterspace} CN_{SOM1} }
+ NF_{SOM1,\, SOM2} ={CF_{SOM1} \mathord{\left/ {\vphantom {CF_{SOM1} CN_{SOM1} }} \right.} CN_{SOM1} }
.. math::
- :label: 21.56)
+ :label: 21.56)
- NF_{SOM2,\, SOM3} ={CF_{SOM2} \mathord{\left/ {\vphantom {CF_{SOM2} CN_{SOM2} }} \right. \kern-\nulldelimiterspace} CN_{SOM2} }
+ NF_{SOM2,\, SOM3} ={CF_{SOM2} \mathord{\left/ {\vphantom {CF_{SOM2} CN_{SOM2} }} \right.} CN_{SOM2} }
.. math::
- :label: 21.57)
+ :label: 21.57)
- NF_{SOM3,\, SOM4} ={CF_{SOM3} \mathord{\left/ {\vphantom {CF_{SOM3} CN_{SOM3} }} \right. \kern-\nulldelimiterspace} CN_{SOM3} }
+ NF_{SOM3,\, SOM4} ={CF_{SOM3} \mathord{\left/ {\vphantom {CF_{SOM3} CN_{SOM3} }} \right.} CN_{SOM3} }
-Corresponding fluxes to or from the soil mineral nitrogen pool depend on
-whether the decomposition step is an immobilization flux or a
-mineralization flux:
+Corresponding fluxes to or from the soil mineral nitrogen pool depend on whether the decomposition step is an immobilization flux or a mineralization flux:
.. math::
- :label: 21.58)
+ :label: 21.58)
NF_{sminn,\, Lit1\to SOM1} =\left\{\begin{array}{l} {NF_{pot\_ min,\, Lit1\to SOM1} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, Lit1\to SOM1} >0} \\ {NF_{pot\_ min,\, Lit1\to SOM1} \qquad {\rm for\; }NF_{pot\_ min,\, Lit1\to SOM1} \le 0} \end{array}\right\}
.. math::
- :label: 21.59)
+ :label: 21.59)
NF_{sminn,\, Lit2\to SOM2} =\left\{\begin{array}{l} {NF_{pot\_ min,\, Lit2\to SOM2} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, Lit2\to SOM2} >0} \\ {NF_{pot\_ min,\, Lit2\to SOM2} \qquad {\rm for\; }NF_{pot\_ min,\, Lit2\to SOM2} \le 0} \end{array}\right\}
.. math::
- :label: 21.60)
+ :label: 21.60)
NF_{sminn,\, Lit3\to SOM3} =\left\{\begin{array}{l} {NF_{pot\_ min,\, Lit3\to SOM3} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, Lit3\to SOM3} >0} \\ {NF_{pot\_ min,\, Lit3\to SOM3} \qquad {\rm for\; }NF_{pot\_ min,\, Lit3\to SOM3} \le 0} \end{array}\right\}
.. math::
- :label: 21.61)
+ :label: 21.61)
NF_{sminn,SOM1\to SOM2} =\left\{\begin{array}{l} {NF_{pot\_ min,\, SOM1\to SOM2} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, SOM1\to SOM2} >0} \\ {NF_{pot\_ min,\, SOM1\to SOM2} \qquad {\rm for\; }NF_{pot\_ min,\, SOM1\to SOM2} \le 0} \end{array}\right\}
.. math::
- :label: 21.62)
+ :label: 21.62)
NF_{sminn,SOM2\to SOM3} =\left\{\begin{array}{l} {NF_{pot\_ min,\, SOM2\to SOM3} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, SOM2\to SOM3} >0} \\ {NF_{pot\_ min,\, SOM2\to SOM3} \qquad {\rm for\; }NF_{pot\_ min,\, SOM2\to SOM3} \le 0} \end{array}\right\}
.. math::
- :label: 21.63)
+ :label: 21.63)
NF_{sminn,SOM3\to SOM4} =\left\{\begin{array}{l} {NF_{pot\_ min,\, SOM3\to SOM4} f_{immob\_ demand} \qquad {\rm for\; }NF_{pot\_ min,\, SOM3\to SOM4} >0} \\ {NF_{pot\_ min,\, SOM3\to SOM4} \qquad {\rm for\; }NF_{pot\_ min,\, SOM3\to SOM4} \le 0} \end{array}\right\}
.. math::
- :label: 21.64)
+ :label: 21.64)
NF_{sminn,\, SOM4} =NF_{pot\_ min,\, SOM4}
Vertical Distribution and Transport of Decomposing C and N pools
---------------------------------------------------------------------
-Additional terms are needed to calculate the vertically-resolved soil C
-and N budget: the initial vertical distribution of C and N from PFTs
-delivered to the litter and CWD pools, and the vertical transport of C
-and N pools.
-
-For initial vertical inputs, CLM uses separate profiles for aboveground
-(leaf, stem) and belowground (root) inputs. Aboveground inputs are given
-a single exponential with default e-folding depth = 0.1m. Belowground
-inputs are distributed according to rooting profiles with default values
-based on the Jackson et al. (1996) exponential parameterization.
-
-Vertical mixing is accomplished by an advection-diffusion equation. The
-goal of this is to consider slow, soild- and adsorbed-phase transport
-due to bioturbation, cryoturbation, and erosion. Faster aqueous-phase
-transport is not included in CLM, but has been developed as part of the
-CLM-BeTR suite of parameterizations (Tang and Riley 2013). The default
-value of the advection term is 0 cm/yr, such that transport is purely
-diffusive. Diffusive transport differs in rate between permafrost soils
-(where cryoturbation is the dominant transport term) and non-permafrost
-soils (where bioturbation dominates). For permafrost soils, a
-parameterization based on that of :ref:`Koven et al. (2009) ` is used: the
-diffusivity parameter is constant through the active layer, and
-decreases linearly from the base of the active layer to zero at a set
-depth (default 3m); the default permafrost diffusivity is 5
-cm\ :sup:`2`/yr. For non-permafrost soils, the default diffusivity
-is 1 cm\ :sup:`2`/yr.
+Additional terms are needed to calculate the vertically-resolved soil C and N budget: the initial vertical distribution of C and N from PFTs delivered to the litter and CWD pools, and the vertical transport of C and N pools.
+
+For initial vertical inputs, CLM uses separate profiles for aboveground (leaf, stem) and belowground (root) inputs. Aboveground inputs are given a single exponential with default e-folding depth = 0.1m. Belowground inputs are distributed according to rooting profiles with default values based on the Jackson et al. (1996) exponential parameterization.
+
+Vertical mixing is accomplished by an advection-diffusion equation. The goal of this is to consider slow, soild- and adsorbed-phase transport due to bioturbation, cryoturbation, and erosion. Faster aqueous-phase transport is not included in CLM, but has been developed as part of the CLM-BeTR suite of parameterizations (Tang and Riley 2013). The default value of the advection term is 0 cm/yr, such that transport is purely diffusive. Diffusive transport differs in rate between permafrost soils (where cryoturbation is the dominant transport term) and non-permafrost soils (where bioturbation dominates). For permafrost soils, a parameterization based on that of :ref:`Koven et al. (2009) ` is used: the diffusivity parameter is constant through the active layer, and decreases linearly from the base of the active layer to zero at a set depth (default 3m); the default permafrost diffusivity is 5 cm\ :sup:`2`/yr. For non-permafrost soils, the default diffusivity is 1 cm\ :sup:`2`/yr.
Model Equilibration and its Acceleration
-----------------------------------------
-For transient experiments, it is usually assumed that the carbon cycle
-is starting from a point of relatively close equilibrium, i.e. that
-productivity is balanced by ecosystem carbon losses through
-respiratory and disturbance pathways. In order to satisfy this
-assumption, the model is generally run until the productivity and loss
-terms find a stable long-term equilibrium; at this point the model is
-considered 'spun up'.
-
-Because of the coupling between the slowest SOM pools and productivity
-through N downregulation of photosynthesis, equilibration of the model
-for initialization purposes will take an extremely long time in the
-standard mode. This is particularly true for the CENTURY-based
-decomposition cascade, which includes a passive pool. In order to
-rapidly equilibrate the model, a modified version of the “accelerated
-decomposition” :ref:`(Thornton and Rosenbloon, 2005) ` is used. The fundamental
-idea of this approach is to allow fluxes between the various pools (both
-turnover-defined and vertically-defined fluxes) adjust rapidly, while
-keeping the pool sizes themselves small so that they can fill quickly.
-To do this, the base decomposition rate :math:`{k}_{i}` for each
-pool *i* is accelerated by a term :math:`{a}_{i}` such that the slow
-pools are collapsed onto an approximately annual timescale :ref:`Koven et al. (2013) `. Accelerating the pools beyond this timescale distorts the
-seasonal and/or diurnal cycles of decomposition and N mineralization,
-thus leading to a substantially different ecosystem productivity than
-the full model. For the vertical model, the vertical transport terms are
-also accelerated by the same term :math:`{a}_{i}`, as is the
-radioactive decay when :math:`{}^{14}`\ C is enabled, following the same
-principle of keeping fluxes between pools (or fluxes lost to decay)
-close to the full model while keeping the pools sizes small. When
-leaving the accelerated decomposition mode, the concentration of C and N
-in pools that had been accelerated are multiplied by the same term
-:math:`{a}_{i}`, to bring the model into approximate equilibrium.
-Note that in CLM, the model can also transition into accelerated
-decomposition mode from the standard mode (by dividing the pools by
-:math:`{a}_{i}`), and that the transitions into and out of
-accelerated decomposition mode are handled automatically by CLM upon
-loading from restart files (which preserve information about the mode of
-the model when restart files were written).
-
-The base acceleration terms for the two decomposition cascades are shown in
-Tables 15.1 and 15.3. In addition to the base terms, CLM5 also
-includes a geographic term to the acceleration in order to apply
-larger values to high-latitude systems, where decomposition rates are
-particularly slow and thus equilibration can take significantly longer
-than in temperate or tropical climates. This geographic term takes
-the form of a logistic equation, where :math:`{a}_{i}` is equal to the
-product of the base acceleration term and :math:`{a}_{l}` below:
-
-.. math::
- :label: 21.65)
+For transient experiments, it is usually assumed that the carbon cycle is starting from a point of relatively close equilibrium, i.e. that productivity is balanced by ecosystem carbon losses through respiratory and disturbance pathways. In order to satisfy this assumption, the model is generally run until the productivity and loss terms find a stable long-term equilibrium; at this point the model is considered 'spun up'.
- a_l = 1 + 50 / \left ( 1 + exp \left (-0.1 * (abs(latitude) -
- 60 ) \right ) \right )
+Because of the coupling between the slowest SOM pools and productivity through N downregulation of photosynthesis, equilibration of the model for initialization purposes will take an extremely long time in the standard mode. This is particularly true for the CENTURY-based decomposition cascade, which includes a passive pool. In order to rapidly equilibrate the model, a modified version of the "accelerated decomposition" :ref:`(Thornton and Rosenbloon, 2005) ` is used. The fundamental idea of this approach is to allow fluxes between the various pools (both turnover-defined and vertically-defined fluxes) adjust rapidly, while keeping the pool sizes themselves small so that they can fill quickly To do this, the base decomposition rate :math:`{k}_{i}` for each pool *i* is accelerated by a term :math:`{a}_{i}` such that the slow pools are collapsed onto an approximately annual timescale :ref:`Koven et al. (2013) `. Accelerating the pools beyond this timescale distorts the seasonal and/or diurnal cycles of decomposition and N mineralization, thus leading to a substantially different ecosystem productivity than the full model. For the vertical model, the vertical transport terms are also accelerated by the same term :math:`{a}_{i}`, as is the radioactive decay when :math:`{}^{14}`\ C is enabled, following the same principle of keeping fluxes between pools (or fluxes lost to decay close to the full model while keeping the pools sizes small. When leaving the accelerated decomposition mode, the concentration of C and N in pools that had been accelerated are multiplied by the same term :math:`{a}_{i}`, to bring the model into approximate equilibrium Note that in CLM, the model can also transition into accelerated decomposition mode from the standard mode (by dividing the pools by :math:`{a}_{i}`), and that the transitions into and out of accelerated decomposition mode are handled automatically by CLM upon loading from restart files (which preserve information about the mode of the model when restart files were written).
+
+The base acceleration terms for the two decomposition cascades are shown in Tables 15.1 and 15.3. In addition to the base terms, CLM5 also includes a geographic term to the acceleration in order to apply larger values to high-latitude systems, where decomposition rates are particularly slow and thus equilibration can take significantly longer than in temperate or tropical climates. This geographic term takes the form of a logistic equation, where :math:`{a}_{i}` is equal to the product of the base acceleration term and :math:`{a}_{l}` below:
-
+.. math::
+ :label: 21.65)
+ a_l = 1 + 50 / \left ( 1 + exp \left (-0.1 * (abs(latitude) -
+ 60 ) \right ) \right )
diff --git a/doc/source/tech_note/Dust/CLM50_Tech_Note_Dust.rst b/doc/source/tech_note/Dust/CLM50_Tech_Note_Dust.rst
index 2b3064c921..ad593b6060 100644
--- a/doc/source/tech_note/Dust/CLM50_Tech_Note_Dust.rst
+++ b/doc/source/tech_note/Dust/CLM50_Tech_Note_Dust.rst
@@ -3,190 +3,121 @@
Dust Model
==============
-Atmospheric dust is mobilized from the land by wind in the CLM. The most
-important factors determining soil erodibility and dust emission include
-the wind friction speed, the vegetation cover, and the soil moisture.
-The CLM dust mobilization scheme (:ref:`Mahowald et al. 2006`)
-accounts for these factors based on the DEAD (Dust Entrainment and Deposition)
-model of :ref:`Zender et al. (2003)`. Please refer to the
-:ref:`Zender et al. (2003)` article for additional
-information regarding the equations presented in this section.
-
-The total vertical mass flux of dust, :math:`F_{j}`
-(kg m\ :sup:`-2` s\ :sup:`-1`), from the ground into transport bin
-:math:`j` is given by
+Atmospheric dust is mobilized from the land by wind in the CLM. The most important factors determining soil erodibility and dust emission include the wind friction speed, the vegetation cover, and the soil moisture The CLM dust mobilization scheme (:ref:`Mahowald et al. 2006` accounts for these factors based on the DEAD (Dust Entrainment and Deposition model of :ref:`Zender et al. (2003)`. Please refer to the :ref:`Zender et al. (2003)` article for additional information regarding the equations presented in this section.
+
+The total vertical mass flux of dust, :math:`F_{j}` (kg m\ :sup:`-2` s\ :sup:`-1`), from the ground into transport bin :math:`j` is given by
.. math::
:label: 29.1
F_{j} =TSf_{m} \alpha Q_{s} \sum _{i=1}^{I}M_{i,j}
-where :math:`T` is a global factor that compensates for the DEAD model’s
-sensitivity to horizontal and temporal resolution and equals 5 x
-10\ :sup:`-4` in the CLM instead of 7 x 10\ :sup:`-4` in
-:ref:`Zender et al. (2003)`. :math:`S` is the source
-erodibility factor set to 1 in the CLM and serves as a place holder
-at this time.
+where :math:`T` is a global factor that compensates for the DEAD model's sensitivity to horizontal and temporal resolution and equals 5 x 10\ :sup:`-4` in the CLM instead of 7 x 10\ :sup:`-4` in :ref:`Zender et al. (2003)`. :math:`S` is the source erodibility factor set to 1 in the CLM and serves as a place holder at this time.
-The grid cell fraction of exposed bare soil suitable for dust
-mobilization :math:`f_{m}` is given by
+The grid cell fraction of exposed bare soil suitable for dust mobilization :math:`f_{m}` is given by
.. math::
- :label: 29.2
+ :label: 29.2
f_{m} =\left(1-f_{lake} \right)\left(1-f_{sno} \right)\left(1-f_{v} \right)\frac{w_{liq,1} }{w_{liq,1} +w_{ice,1} }
-where :math:`f_{lake}` and :math:`f_{sno}`
-are the CLM grid cell fractions of lake (section
-:numref:`Surface Data`) and snow cover (section
-:numref:`Snow Covered Area Fraction`), all ranging from zero to one. Not mentioned
-by :ref:`Zender et al. (2003)`, :math:`w_{liq,\, 1}` and
-:math:`{}_{w_{ice,\, 1} }` are the CLM top soil layer liquid water and
-ice contents (mm) entered as a ratio expressing the decreasing ability
-of dust to mobilize from increasingly frozen soil. The grid cell
-fraction of vegetation cover,\ :math:`{}_{f_{v} }`, is defined as
+where :math:`f_{lake}` and :math:`f_{sno}` are the CLM grid cell fractions of lake (section :numref:`Surface Data`) and snow cover (section :numref:`Snow Covered Area Fraction`), all ranging from zero to one. Not mentioned by :ref:`Zender et al. (2003)`, :math:`w_{liq,\, 1}` and :math:`{}_{w_{ice,\, 1} }` are the CLM top soil layer liquid water and ice contents (mm) entered as a ratio expressing the decreasing ability of dust to mobilize from increasingly frozen soil. The grid cell fraction of vegetation cover,\ :math:`{}_{f_{v} }`, is defined as
.. math::
:label: 29.3
0\le f_{v} =\frac{L+S}{\left(L+S\right)_{t} } \le 1{\rm \; \; \; \; where\; }\left(L+S\right)_{t} =0.3{\rm \; m}^{2} {\rm m}^{-2}
-where equation applies only for dust mobilization and is not related to
-the plant functional type fractions prescribed from the CLM input data
-or simulated by the CLM dynamic vegetation model (Chapter 22). :math:`L`
-and :math:`S` are the CLM leaf and stem area index values
-(m :sup:`2` m\ :sup:`-2`) averaged at the land unit level so
-as to include all the pfts and the bare ground present in a vegetated
-land unit. :math:`L` and :math:`S` may be prescribed from the CLM
-input data (section :numref:`Phenology and vegetation burial by snow`)
-or simulated by the CLM biogeochemistry model (Chapter
-:numref:`rst_Vegetation Phenology and Turnover`).
+where equation :eq:`29.3` applies only for dust mobilization and is not related to the plant functional type fractions prescribed from the CLM input data or simulated by the CLM dynamic vegetation model (Chapter 22). :math:`L` and :math:`S` are the CLM leaf and stem area index values (m :sup:`2` m\ :sup:`-2`) averaged at the land unit level so as to include all the pfts and the bare ground present in a vegetated land unit. :math:`L` and :math:`S` may be prescribed from the CLM input data (section :numref:`Phenology and vegetation burial by snow`) or simulated by the CLM biogeochemistry model (Chapter :numref:`rst_Vegetation Phenology and Turnover`).
-The sandblasting mass efficiency :math:`\alpha` (m :sup:`-1`) is
-calculated as
+The sandblasting mass efficiency :math:`\alpha` (m :sup:`-1`) is calculated as
.. math::
- :label: 29.4
+ :label: 29.4
\alpha =100e^{\left(13.4M_{clay} -6.0\right)\ln 10} {\rm \; \; }\left\{\begin{array}{l} {M_{clay} =\% clay\times 0.01{\rm \; \; \; 0}\le \% clay\le 20} \\ {M_{clay} =20\times 0.01{\rm \; \; \; \; \; \; \; \; 20<\% }clay\le 100} \end{array}\right.
-where :math:`M_{clay}` is the mass fraction of clay
-particles in the soil and %clay is determined from the surface dataset
-(section :numref:`Surface Data`). :math:`M_{clay} =0` corresponds to sand and
-:math:`M_{clay} =0.2` to sandy loam.
+where :math:`M_{clay}` is the mass fraction of clay particles in the soil and %clay is determined from the surface dataset (section :numref:`Surface Data`). :math:`M_{clay} =0` corresponds to sand and :math:`M_{clay} =0.2` to sandy loam.
-:math:`Q_{s}` is the total horizontally saltating mass flux (kg
-m\ :sup:`-1` s\ :sup:`-1`) of “large” particles (:numref:`Table Dust Mass fraction`),
-also referred to as the vertically integrated streamwise mass flux
+:math:`Q_{s}` is the total horizontally saltating mass flux (kg m\ :sup:`-1` s\ :sup:`-1`) of "large" particles (:numref:`Table Dust Mass fraction`), also referred to as the vertically integrated streamwise mass flux
.. math::
:label: 29.5
Q_{s} = \left\{
- \begin{array}{lr}
- \frac{c_{s} \rho _{atm} u_{*s}^{3} }{g} \left(1-\frac{u_{*t} }{u_{*s} } \right)\left(1+\frac{u_{*t} }{u_{*s} } \right)^{2} {\rm \; } & \qquad {\rm for\; }u_{*t} w_{t} } \end{array}\right.
where
.. math::
- :label: 29.8
+ :label: 29.8
w_{t} =a\left(0.17M_{clay} +0.14M_{clay}^{2} \right){\rm \; \; \; \; \; \; 0}\le M_{clay} =\% clay\times 0.01\le 1
and
.. math::
- :label: 29.9
+ :label: 29.9
w=\frac{\theta _{1} \rho _{liq} }{\rho _{d,1} }
-where :math:`a=M_{clay}^{-1}` for tuning purposes,
-:math:`\theta _{1}` is the volumetric soil moisture in the top soil
-layer (m :math:`{}^{3 }`\ m\ :sup:`-3`) (section :numref:`Soil Water`),
-:math:`\rho _{liq}` is the density of liquid water (kg
-m\ :sup:`-3`) (:numref:`Table Physical constants`), and :math:`\rho _{d,\, 1}`
-is the bulk density of soil in the top soil layer (kg m\ :sup:`-3`)
-defined as in section :numref:`Soil and Snow Thermal Properties`
-rather than as in :ref:`Zender et al. (2003)`.
-:math:`Re_{*t}^{f}` from equation is the threshold friction Reynolds
-factor
+where :math:`a=M_{clay}^{-1}` for tuning purposes, :math:`\theta _{1}` is the volumetric soil moisture in the top soil layer (m :math:`{}^{3 }`\ m\ :sup:`-3`) (section :numref:`Soil Water`), :math:`\rho _{liq}` is the density of liquid water (kg m\ :sup:`-3`) (:numref:`Table Physical constants`), and :math:`\rho _{d,\, 1}` is the bulk density of soil in the top soil layer (kg m\ :sup:`-3`) defined as in section :numref:`Soil and Snow Thermal Properties` rather than as in :ref:`Zender et al. (2003)`. :math:`Re_{*t}^{f}` from equation :eq:`29.6` is the threshold friction Reynolds factor
.. math::
- :label: 29.10
+ :label: 29.10
Re_{*t}^{f} =\left\{\begin{array}{l} {\frac{0.1291^{2} }{-1+1.928Re_{*t} } {\rm \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; for\; 0.03}\le Re_{*t} \le 10} \\ {0.12^{2} \left(1-0.0858e^{-0.0617(Re_{*t} -10)} \right)^{2} {\rm \; for\; }Re_{*t} >10} \end{array}\right.
-and :math:`Re_{*t}` is the threshold friction Reynolds number
-approximation for optimally sized particles
+and :math:`Re_{*t}` is the threshold friction Reynolds number approximation for optimally sized particles
.. math::
- :label: 29.11
+ :label: 29.11
Re_{*t} =0.38+1331\left(100D_{osp} \right)^{1.56}
-In :eq:`29.5` , :math:`u_{*s}` is defined as the wind friction speed
-(m s\ :sup:`-1`) accounting for the Owen effect (:ref:`Owen 1964`)
+In :eq:`29.5`, :math:`u_{*s}` is defined as the wind friction speed (m s\ :sup:`-1`) accounting for the Owen effect (:ref:`Owen 1964`)
.. math::
- :label: 29.12
+ :label: 29.12
- u_{\*s} = \left\{
- \begin{array}{lr}
- u_{\*} & \quad {\rm \; for \;} U_{10} ` but here for 10 m above the ground, and
-:math:`U_{10,\, t}` is the threshold wind speed at 10 m (m
-s\ :sup:`-1`)
+where :math:`u_{*}` is the CLM wind friction speed (m s\ :sup:`-1`), also known as friction velocity (section :numref:`Monin-Obukhov Similarity Theory`), :math:`U_{10}` \ is the 10-m wind speed (m s\ :sup:`-1`) calculated as the wind speed at the top of the canopy in section 4.3 of :ref:`Bonan (1996)` but here for 10 m above the ground, and :math:`U_{10,\, t}` is the threshold wind speed at 10 m (m s\ :sup:`-1`)
.. math::
:label: 29.13
U_{10,t} =u_{*t} \frac{U_{10} }{u_{*} }
-In equation we sum :math:`M_{i,\, j}` over :math:`I=3` source modes
-:math:`i` where :math:`M_{i,\, j}` is the mass fraction of each source
-mode :math:`i` carried in each of *:math:`J=4`* transport bins :math:`j`
+In equation :eq:`29.1` we sum :math:`M_{i,\, j}` over :math:`I=3` source modes :math:`i` where :math:`M_{i,\, j}` is the mass fraction of each source mode :math:`i` carried in each of *:math:`J=4`* transport bins :math:`j`
.. math::
:label: 29.14
M_{i,j} =\frac{m_{i} }{2} \left[{\rm erf}\left(\frac{\ln {\textstyle\frac{D_{j,\max } }{\tilde{D}_{v,i} }} }{\sqrt{2} \ln \sigma _{g,i} } \right)-{\rm erf}\left(\frac{\ln {\textstyle\frac{D_{j,\min } }{\tilde{D}_{v,i} }} }{\sqrt{2} \ln \sigma _{g,i} } \right)\right]
-where :math:`m_{i}` , :math:`\tilde{D}_{v,\, i}` , and
-:math:`\sigma _{g,\, i}` are the mass fraction, mass median diameter,
-and geometric standard deviation assigned to each particle source mode
-:math:`i` (:numref:`Table Dust Mass fraction`), while :math:`D_{j,\, \min }` and
-:math:`D_{j,\, \max }` are the minimum and maximum diameters (m) in
-each transport bin :math:`j` (:numref:`Table Dust Minimum and maximum particle diameters`).
+where :math:`m_{i}`, :math:`\tilde{D}_{v,\, i}`, and :math:`\sigma _{g,\, i}` are the mass fraction, mass median diameter, and geometric standard deviation assigned to each particle source mode :math:`i` (:numref:`Table Dust Mass fraction`), while :math:`D_{j,\, \min }` and :math:`D_{j,\, \max }` are the minimum and maximum diameters (m) in each transport bin :math:`j` (:numref:`Table Dust Minimum and maximum particle diameters`).
.. _Table Dust Mass fraction:
diff --git a/doc/source/tech_note/Ecosystem/CLM50_Tech_Note_Ecosystem.rst b/doc/source/tech_note/Ecosystem/CLM50_Tech_Note_Ecosystem.rst
index 50b918e6a2..33c035f282 100644
--- a/doc/source/tech_note/Ecosystem/CLM50_Tech_Note_Ecosystem.rst
+++ b/doc/source/tech_note/Ecosystem/CLM50_Tech_Note_Ecosystem.rst
@@ -5,7 +5,7 @@ Surface Characterization, Vertical Discretization, and Model Input Requirements
.. _Surface Characterization:
-Surface Characterization
+Surface Characterization
-----------------------------
.. _Surface Heterogeneity and Data Structure:
@@ -13,118 +13,35 @@ Surface Characterization
Surface Heterogeneity and Data Structure
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Spatial land surface heterogeneity in CLM is represented as a nested
-subgrid hierarchy in which grid cells are composed of multiple land
-units, snow/soil columns, and PFTs (:numref:`Figure CLM subgrid hierarchy`).
-Each grid cell can have
-a different number of land units, each land unit can have a different
-number of columns, and each column can have multiple PFTs. The first
-subgrid level, the land unit, is intended to capture the broadest
-spatial patterns of subgrid heterogeneity. The current land units are
-glacier, lake, urban, vegetated, and crop (when the crop model option is
-turned on). The land unit level can be used to further delineate these
-patterns. For example, the urban land unit is divided into density
-classes representing the tall building district, high density, and
-medium density urban areas.
-
-The second subgrid level, the column, is intended to capture potential
-variability in the soil and snow state variables within a single land
-unit. For example, the vegetated land unit could contain several columns
-with independently evolving vertical profiles of soil water and
-temperature. Similarly, the managed vegetation land unit can be divided
-into two columns, irrigated and non-irrigated. The default snow/soil
-column is represented by 25 layers for ground (with up to 20 of these
-layers classified as soil layers and the remaining layers classified as
-bedrock layers) and up to 10 layers for snow, depending on snow
-depth. The central characteristic of the column subgrid level is that
-this is where the state variables for water and energy in the soil and
-snow are defined, as well as the fluxes of these components within the
-soil and snow. Regardless of the number and type of PFTs occupying space
-on the column, the column physics operates with a single set of upper
-boundary fluxes, as well as a single set of transpiration fluxes from
-multiple soil levels. These boundary fluxes are weighted averages over
-all PFTs. Currently, for lake and vegetated land units, a single column
-is assigned to each land unit. The crop land unit is split into
-irrigated and unirrigated columns with a single crop occupying each
-column. The urban land units have five columns (roof, sunlit walls and
-shaded walls, and pervious and impervious canyon floor) (Oleson et
-al. 2010b). The glacier land unit is separated into up to 10 elevation
-classes.
+Spatial land surface heterogeneity in CLM is represented as a nested subgrid hierarchy in which grid cells are composed of multiple land units, snow/soil columns, and PFTs (:numref:`Figure CLM subgrid hierarchy`). Each grid cell can have a different number of land units, each land unit can have a different number of columns, and each column can have multiple PFTs. The first subgrid level, the land unit, is intended to capture the broadest spatial patterns of subgrid heterogeneity. The current land units are glacier, lake, urban, vegetated, and crop (when the crop model option is turned on). The land unit level can be used to further delineate these patterns. For example, the urban land unit is divided into density classes representing the tall building district, high density, and medium density urban areas.
+
+The second subgrid level, the column, is intended to capture potential variability in the soil and snow state variables within a single land unit. For example, the vegetated land unit could contain several columns with independently evolving vertical profiles of soil water and temperature. Similarly, the managed vegetation land unit can be divided into two columns, irrigated and non-irrigated. The default snow/soil column is represented by 25 layers for ground (with up to 20 of these layers classified as soil layers and the remaining layers classified as bedrock layers) and up to 10 layers for snow, depending on snow depth. The central characteristic of the column subgrid level is that this is where the state variables for water and energy in the soil and snow are defined, as well as the fluxes of these components within the soil and snow. Regardless of the number and type of PFTs occupying space on the column, the column physics operates with a single set of upper boundary fluxes, as well as a single set of transpiration fluxes from multiple soil levels. These boundary fluxes are weighted averages over all PFTs. Currently, for lake and vegetated land units, a single column is assigned to each land unit. The crop land unit is split into irrigated and unirrigated columns with a single crop occupying each column. The urban land units have five columns (roof, sunlit walls and shaded walls, and pervious and impervious canyon floor) (Oleson et al. 2010b). The glacier land unit is separated into up to 10 elevation classes.
.. _Figure CLM subgrid hierarchy:
.. Figure:: image1.png
- Configuration of the CLM subgrid hierarchy. Box in upper right shows hypothetical subgrid distribution for a single grid cell. Note that the Crop land unit is only used when the model is run with the crop model active. Abbreviations: TBD – Tall Building District; HD – High Density; MD – Medium Density, G – Glacier, L – Lake, U – Urban, C – Crop, V – Vegetated, PFT – Plant Functional Type, Irr – Irrigated, UIrr – Unirrigated. Red arrows indicate allowed land unit transitions. Purple arrows indicate allowed patch-level transitions.
-
-The third subgrid level is referred to as the patch level. Patches can be PFTs or bare ground on the vegetated land unit
-and crop functional types (CFTs) on the crop land unit.
-The patch level is intended to capture the
-biogeophysical and biogeochemical differences between broad categories
-of plants in terms of their functional characteristics. On the vegetated
-land unit, up to 16 possible PFTs that differ in physiology and
-structure may coexist on a single column. All fluxes to and from the
-surface are defined at the PFT level, as are the vegetation state
-variables (e.g. vegetation temperature and canopy water storage). On the
-crop land unit, typically, different crop types can be represented on each
-crop land unit column (see Chapter :numref:`rst_Crops and Irrigation` for details).
-
-In addition to state and flux variable data structures for conserved
-components at each subgrid level (e.g., energy, water, carbon), each
-subgrid level also has a physical state data structure for handling
-quantities that are not involved in conservation checks (diagnostic
-variables). For example, the urban canopy air temperature and humidity
-are defined through physical state variables at the land unit level, the
-number of snow layers and the soil roughness lengths are defined as
-physical state variables at the column level, and the leaf area index
-and the fraction of canopy that is wet are defined as physical state
-variables at the PFT level.
-
-The standard configuration of the model subgrid hierarchy is illustrated
-in :numref:`Figure CLM subgrid hierarchy`. Here, only four PFTs are shown
-associated with the single
-column beneath the vegetated land unit but up to sixteen are possible.
-The crop land unit is present only when the crop model is active.
-
-Note that the biogeophysical processes related to soil and snow require
-PFT level properties to be aggregated to the column level. For example,
-the net heat flux into the ground is required as a boundary condition
-for the solution of snow/soil temperatures (Chapter :numref:`rst_Soil and Snow Temperatures`). This column
-level property must be determined by aggregating the net heat flux from
-all PFTs sharing the column. This is generally accomplished in the model
-by computing a weighted sum of the desired quantity over all PFTs whose
-weighting depends on the PFT area relative to all PFTs, unless otherwise
-noted in the text.
+ Configuration of the CLM subgrid hierarchy. Box in upper right shows hypothetical subgrid distribution for a single grid cell. Note that the Crop land unit is only used when the model is run with the crop model active. Abbreviations: TBD – Tall Building District; HD – High Density; MD – Medium Density, G – Glacier, L – Lake, U – Urban, C – Crop, V – Vegetated, PFT – Plant Functional Type, Irr – Irrigated, UIrr – Unirrigated. Red arrows indicate allowed land unit transitions. Purple arrows indicate allowed patch-level transitions.
+
+The third subgrid level is referred to as the patch level. Patches can be PFTs or bare ground on the vegetated land unit and crop functional types (CFTs) on the crop land unit. The patch level is intended to capture the biogeophysical and biogeochemical differences between broad categories of plants in terms of their functional characteristics. On the vegetated land unit, up to 16 possible PFTs that differ in physiology and structure may coexist on a single column. All fluxes to and from the surface are defined at the PFT level, as are the vegetation state variables (e.g. vegetation temperature and canopy water storage). On the crop land unit, typically, different crop types can be represented on each crop land unit column (see Chapter :numref:`rst_Crops and Irrigation` for details).
+
+In addition to state and flux variable data structures for conserved components at each subgrid level (e.g., energy, water, carbon), each subgrid level also has a physical state data structure for handling quantities that are not involved in conservation checks (diagnostic variables). For example, the urban canopy air temperature and humidity are defined through physical state variables at the land unit level, the number of snow layers and the soil roughness lengths are defined as physical state variables at the column level, and the leaf area index and the fraction of canopy that is wet are defined as physical state variables at the PFT level.
+
+The standard configuration of the model subgrid hierarchy is illustrated in :numref:`Figure CLM subgrid hierarchy`. Here, only four PFTs are shown associated with the single column beneath the vegetated land unit but up to sixteen are possible. The crop land unit is present only when the crop model is active.
+
+Note that the biogeophysical processes related to soil and snow require PFT level properties to be aggregated to the column level. For example, the net heat flux into the ground is required as a boundary condition for the solution of snow/soil temperatures (Chapter :numref:`rst_Soil and Snow Temperatures`). This column level property must be determined by aggregating the net heat flux from all PFTs sharing the column. This is generally accomplished in the model by computing a weighted sum of the desired quantity over all PFTs whose weighting depends on the PFT area relative to all PFTs, unless otherwise noted in the text.
.. _Vegetation Composition:
Vegetation Composition
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Vegetated surfaces are comprised of up to 15 possible plant functional
-types (PFTs) plus bare ground (:numref:`Table Plant functional types`). An
-additional PFT is added if
-the irrigation model is active and six additional PFTs are added if the
-crop model is active (Chapter :numref:`rst_Crops and Irrigation`).
-In :numref:`Table Plant functional types`, IVT = 0,14 refers to the index of PCT_NAT_VEG
-on the surface dataset while IVT = 15,18 refers to the index of PCT_CFT on the surface dataset. These
-plant types differ in leaf and stem optical properties that determine reflection,
-transmittance, and absorption of solar radiation (:numref:`Table Plant functional type optical properties`), root
-distribution parameters that control the uptake of water from the soil
-(:numref:`Table Plant functional type root distribution parameters`), aerodynamic parameters that determine resistance to heat,
-moisture, and momentum transfer (:numref:`Table Plant functional type aerodynamic parameters`), and photosynthetic
-parameters that determine stomatal resistance, photosynthesis, and
-transpiration (:numref:`Table Plant functional type (PFT) stomatal conductance parameters`,
-:numref:`Table Temperature dependence parameters for C3 photosynthesis`). The composition and abundance of PFTs
-within a grid cell can either be prescribed as time-invariant fields
-(e.g., using the present day dataset described in section 21.3.3) or can
-evolve with time if the model is run in transient landcover mode
-(Chapter :numref:`rst_Transient Landcover Change`).
+Vegetated surfaces are comprised of up to 15 possible plant functional types (PFTs) plus bare ground (:numref:`Table Plant functional types`). An additional PFT is added if the irrigation model is active and six additional PFTs are added if the crop model is active (Chapter :numref:`rst_Crops and Irrigation`). In :numref:`Table Plant functional types`, IVT = 0,14 refers to the index of PCT_NAT_VEG on the surface dataset while IVT = 15,18 refers to the index of PCT_CFT on the surface dataset. These plant types differ in leaf and stem optical properties that determine reflection, transmittance, and absorption of solar radiation (:numref:`Table Plant functional type optical properties`), root distribution parameters that control the uptake of water from the soil (:numref:`Table Plant functional type root distribution parameters`), aerodynamic parameters that determine resistance to heat, moisture, and momentum transfer (:numref:`Table Plant functional type aerodynamic parameters`), and photosynthetic parameters that determine stomatal resistance, photosynthesis, and transpiration (:numref:`Table Plant functional type (PFT) stomatal conductance parameters`, :numref:`Table Temperature dependence parameters for C3 photosynthesis`). The composition and abundance of PFTs within a grid cell can either be prescribed as time-invariant fields (e.g., using the present day dataset described in section 21.3.3) or can evolve with time if the model is run in transient landcover mode (Chapter :numref:`rst_Transient Landcover Change`).
.. _Table Plant functional types:
.. table:: Plant functional types
-
+
+-----+--------------------------------------------------------------+-------------------+
| IVT | Plant functional type | Acronym |
+=====+==============================================================+===================+
@@ -175,22 +92,12 @@ evolve with time if the model is run in transient landcover mode
Vegetation Structure
^^^^^^^^^^^^^^^^^^^^^^^^^^
-Vegetation structure is defined by leaf and stem area indices
-(:math:`L,\, S`) and canopy top and bottom heights (:math:`z_{top}`,\ :math:`z_{bot}` ).
-Separate leaf and
-stem area indices and canopy heights are prescribed or calculated for each PFT. Daily leaf
-and stem area indices are obtained from griddeddatasets of monthly values (section
-:numref:`Surface Data`). Canopy top and bottom heights for trees are from ICESat (:ref:`Simard et al. (2011) `).
-Canopy top and bottom heights for short vegetation are obtained from gridded datasets but are invariant in space
-and time and were obtained from PFT-specific values (:ref:`Bonan et al. (2002a) `) (:numref:`Table Plant functional type canopy top and bottom heights`).
-When the biogeochemistry model is active,
-vegetation state (LAI, SAI, canopy top and bottom heights) are calculated prognostically
-(see Chapter :numref:`rst_Vegetation Phenology and Turnover`).
+Vegetation structure is defined by leaf and stem area indices (:math:`L,\, S`) and canopy top and bottom heights (:math:`z_{top}`,\ :math:`z_{bot}` ). Separate leaf and stem area indices and canopy heights are prescribed or calculated for each PFT. Daily leaf and stem area indices are obtained from griddeddatasets of monthly values (section :numref:`Surface Data`). Canopy top and bottom heights for trees are from ICESat (:ref:`Simard et al. (2011) `). Canopy top and bottom heights for short vegetation are obtained from gridded datasets but are invariant in space and time and were obtained from PFT-specific values (:ref:`Bonan et al. (2002a) `) (:numref:`Table Plant functional type canopy top and bottom heights`). When the biogeochemistry model is active, vegetation state (LAI, SAI, canopy top and bottom heights) are calculated prognostically (see Chapter :numref:`rst_Vegetation Phenology and Turnover`).
.. _Table Plant functional type canopy top and bottom heights:
.. table:: Plant functional type canopy top and bottom heights
-
+
+--------------------------------------------------------------+-------------------+-------------------+
| Plant functional type | :math:`z_{top}` | :math:`z_{bot}` |
+==============================================================+===================+===================+
@@ -220,36 +127,22 @@ vegetation state (LAI, SAI, canopy top and bottom heights) are calculated progno
Phenology and vegetation burial by snow
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-When the biogeochemistry model is inactive, leaf and stem area indices
-(m\ :sup:`2` leaf area m\ :sup:`-2` ground area) are updated
-daily by linearly interpolating between monthly values. Monthly PFT leaf
-area index values are developed from the 1-km MODIS-derived monthly grid
-cell average leaf area index of :ref:`Myneni et al. (2002) `,
-as described in :ref:`Lawrence and Chase (2007) `. Stem area
-ndex is calculated from the monthly PFT leaf area index using the methods of
-:ref:`Zeng et al. (2002) `. The leaf and stem area indices are
-adjusted for vertical burying by snow (:ref:`Wang and Zeng 2009 `)
-as
+When the biogeochemistry model is inactive, leaf and stem area indices (m\ :sup:`2` leaf area m\ :sup:`-2` ground area) are updated daily by linearly interpolating between monthly values. Monthly PFT leaf area index values are developed from the 1-km MODIS-derived monthly grid cell average leaf area index of :ref:`Myneni et al. (2002) `, as described in :ref:`Lawrence and Chase (2007) `. Stem area ndex is calculated from the monthly PFT leaf area index using the methods of :ref:`Zeng et al. (2002) `. The leaf and stem area indices are adjusted for vertical burying by snow (:ref:`Wang and Zeng 2009 `) as
.. math::
- :label: 2.1
+ :label: 2.1
A=A^{*} ( 1-f_{veg}^{sno} )
-where :math:`A^{\*}` is the leaf or stem area before adjustment for
-snow, :math:`A` is the remaining exposed leaf or stem area,
-:math:`f_{veg}^{sno}` is the vertical fraction of vegetation covered by snow
+where :math:`A^{*}` is the leaf or stem area before adjustment for snow, :math:`A` is the remaining exposed leaf or stem area, :math:`f_{veg}^{sno}` is the vertical fraction of vegetation covered by snow
.. math::
:label: 2.2
- {f_{veg}^{sno} = \frac{z_{sno} -z_{bot} }{z_{top} -z_{bot} } \qquad {\rm for\; tree\; and\; shrub}} \\
- {f_{veg}^{sno} = \frac{\min \left(z_{sno} ,\, z_{c} \right)}{z_{c} } \qquad {\rm for\; grass\; and\; crop}}
+ {f_{veg}^{sno} = \frac{z_{sno} -z_{bot} }{z_{top} -z_{bot} } \qquad {\rm for\; tree\; and\; shrub}} \\
+ {f_{veg}^{sno} = \frac{\min \left(z_{sno} ,\, z_{c} \right)}{z_{c} } \qquad {\rm for\; grass\; and\; crop}}
-where :math:`z_{sno} -z_{bot} \ge 0,{\rm \; }0\le f_{veg}^{sno} \le 1`, :math:`z_{sno}` is the depth of snow (m)
-(Chapter :numref:`rst_Snow Hydrology`), and :math:`z_{c} = 0.2` is the snow depth when short vegetation is assumed to
-be completely buried by snow (m). For numerical reasons, exposed leaf and stem area are set to zero if less than
-0.05. If the sum of exposed leaf and stem area is zero, then the surface is treated as snow-covered ground.
+where :math:`z_{sno} -z_{bot} \ge 0,{\rm \; }0\le f_{veg}^{sno} \le 1`, :math:`z_{sno}` is the depth of snow (m) (Chapter :numref:`rst_Snow Hydrology`), and :math:`z_{c} = 0.2` is the snow depth when short vegetation is assumed to be completely buried by snow (m). For numerical reasons, exposed leaf and stem area are set to zero if less than 0.05. If the sum of exposed leaf and stem area is zero, then the surface is treated as snow-covered ground.
.. _Vertical Discretization:
@@ -257,27 +150,16 @@ Vertical Discretization
----------------------------
..
(this was taken from Initialization; is it still needed?
- Vegetated and glacier land units have fifteen vertical layers, while
- lakes have ten. For soil points, temperature calculations are done over
- all layers, :math:`N_{levgrnd} =15`, while hydrology calculations are
- done over the top ten layers, :math:`N_{levsoi} =10`, the bottom five
- layers being specified as bedrock.
+ Vegetated and glacier land units have fifteen vertical layers, while lakes have ten. For soil points, temperature calculations are done over all layers, :math:`N_{levgrnd} =15`, while hydrology calculations are done over the top ten layers, :math:`N_{levsoi} =10`, the bottom five layers being specified as bedrock.
.. _Soil Layers:
Soil Layers
^^^^^^^^^^^^^^^^^^^^^^^^^^
-The soil column can be discretized into an arbitrary number of layers. The default
-vertical discretization (:numref:`Table Soil layer structure`) uses
-:math:`N_{levgrnd} = 25` layers, of which :math:`N_{levsoi} = 20` are hydrologically and
-biogeochemically active. The deepest 5 layers are only included in the thermodynamical
-calculations (:ref:`Lawrence et al. 2008 `) described in Chapter
-:numref:`rst_Soil and Snow Temperatures`.
+The soil column can be discretized into an arbitrary number of layers. The default vertical discretization (:numref:`Table Soil layer structure`) uses :math:`N_{levgrnd} = 25` layers, of which :math:`N_{levsoi} = 20` are hydrologically and biogeochemically active. The deepest 5 layers are only included in the thermodynamical calculations (:ref:`Lawrence et al. 2008 `) described in Chapter :numref:`rst_Soil and Snow Temperatures`.
-The layer structure of the soil is described by the node depth, :math:`z_{i}`
-(m), the thickness of each layer, :math:`\Delta z_{i}` (m), and the depths
-at the layer interfaces :math:`z_{h,\, i}` (m).
+The layer structure of the soil is described by the node depth, :math:`z_{i}` (m), the thickness of each layer, :math:`\Delta z_{i}` (m), and the depths at the layer interfaces :math:`z_{h,\, i}` (m).
.. _Table Soil layer structure:
@@ -337,21 +219,14 @@ at the layer interfaces :math:`z_{h,\, i}` (m).
| 25 | 41.998 | 15.115 | 49.556 |
+---------------+------------------+------------------------+------------------------+
-Layer node depth (:math:`z_{i}` ), thickness (:math:`\Delta z_{i}` ), and depth at
-layer interface (:math:`z_{h,\, i}` ) for default soil column. All in meters.
+Layer node depth (:math:`z_{i}` ), thickness (:math:`\Delta z_{i}` ), and depth at layer interface (:math:`z_{h,\, i}` ) for default soil column. All in meters.
.. _Depth to Bedrock:
Depth to Bedrock
^^^^^^^^^^^^^^^^^^^^^^^^^^
-The hydrologically and biogeochemically active portion of the soil column can be
-restricted to a thickness less than that of the maximum soil depth. By providing
-a depth-to-bedrock dataset, which may vary spatially, the number of layers used
-in the hydrologic and biogeochemical calculations, :math:`N_{bedrock}`, may be
-specified, subject to the constraint :math:`N_{bedrock} \le N_{levsoi}`.
-The default depth-to-bedrock values are from
-:ref:`Pelletier et al. [2016]`.
+The hydrologically and biogeochemically active portion of the soil column can be restricted to a thickness less than that of the maximum soil depth. By providing a depth-to-bedrock dataset, which may vary spatially, the number of layers used in the hydrologic and biogeochemical calculations, :math:`N_{bedrock}`, may be specified, subject to the constraint :math:`N_{bedrock} \le N_{levsoi}`. The default depth-to-bedrock values are from :ref:`Pelletier et al. [2016]`.
.. _Model Input Requirements:
@@ -363,20 +238,7 @@ Model Input Requirements
Atmospheric Coupling
^^^^^^^^^^^^^^^^^^^^^^^^^^
-The current state of the atmosphere (:numref:`Table Atmospheric input to land model`)
-at a given time step is
-used to force the land model. This atmospheric state is provided by an
-atmospheric model in coupled mode or from an observed dataset in land-only
-mode (Chapter :numref:`rst_Land-Only Mode`). The land model then initiates a full set of
-calculations for surface energy, constituent, momentum, and radiative
-fluxes. The land model calculations are implemented in two steps. The
-land model proceeds with the calculation of surface energy, constituent,
-momentum, and radiative fluxes using the snow and soil hydrologic states
-from the previous time step. The land model then updates the soil and
-snow hydrology calculations based on these fluxes. These fields are
-passed to the atmosphere (:numref:`Table Land model output to atmospheric model`). The albedos sent to the atmosphere
-are for the solar zenith angle at the next time step but with surface
-conditions from the current time step.
+The current state of the atmosphere (:numref:`Table Atmospheric input to land model`) at a given time step is used to force the land model. This atmospheric state is provided by an atmospheric model in coupled mode or from an observed dataset in land-only mode (Chapter :numref:`rst_Land-Only Mode`). The land model then initiates a full set of calculations for surface energy, constituent, momentum, and radiative fluxes. The land model calculations are implemented in two steps. The land model proceeds with the calculation of surface energy, constituent, momentum, and radiative fluxes using the snow and soil hydrologic states from the previous time step. The land model then updates the soil and snow hydrology calculations based on these fluxes. These fields are passed to the atmosphere (:numref:`Table Land model output to atmospheric model`). The albedos sent to the atmosphere are for the solar zenith angle at the next time step but with surface conditions from the current time step.
.. _Table Atmospheric input to land model:
@@ -424,85 +286,19 @@ conditions from the current time step.
| :sup:`5`\ Lightning frequency | :math:`I_{l}` | flash km\ :sup:`-2` hr\ :sup:`-1` |
+------------------------------------------------------+------------------------------------------------+-------------------------------------------------+
-:sup:`1`\ The atmospheric reference height received from the
-atmospheric model :math:`z'_{atm}` is assumed to be the height above
-the surface as defined by the roughness length :math:`z_{0}` plus
-displacement height :math:`d`. Thus, the reference height used for flux
-computations (Chapter :numref:`rst_Momentum, Sensible Heat, and Latent Heat Fluxes`)
-is :math:`z_{atm} =z'_{atm} +z_{0} +d`. The
-reference heights for temperature, wind, and specific humidity
-(:math:`z_{atm,\, h}` , :math:`z_{atm,\, {\it m}}` ,
-:math:`z_{atm,\, w}` ) are required. These are set equal
-to\ :math:`z_{atm}` .
-
-:sup:`2`\ CAM provides convective and large-scale liquid
-and solid precipitation, which are added to yield total liquid
-precipitation :math:`q_{rain}` and solid precipitation
-:math:`q_{sno}` .
-However, in CLM5, the atmosphere's partitioning into liquid and solid
-precipitation is ignored. Instead, CLM repartitions total precipitation
-using a linear ramp. For most landunits, this ramp generates all snow
-below :math:`0 ^{\circ} C`, all rain above :math:`2 ^{\circ} C`,
-and a mix of rain and snow for intermediate temperatures. For glaciers,
-the end points of the ramp are :math:`-2 ^{\circ} C` and :math:`0
-^{\circ} C`, respectively. Changes to the phase of precipitation are
-accompanied by a sensible heat flux (positive or negative) to conserve
-energy.
-
-:sup:`3`\ There are 14 aerosol deposition rates required depending
-on species and affinity for bonding with water; 8 of these are dust
-deposition rates (dry and wet rates for 4 dust size bins,
-:math:`D_{dst,\, dry1} ,\, D_{dst,\, dry2} ,\, D_{dst,\, dry3} ,\, D_{dst,\, dry4}` ,
-:math:`D_{dst,\, \, wet1} ,D_{dst,\, wet2} ,\, D_{dst,wet3} ,\, D_{dst,\, wet4}` ),
-3 are black carbon deposition rates (dry and wet hydrophilic and dry
-hydrophobic rates,
-:math:`D_{bc,\, dryhphil} ,\, D_{bc,\, wethphil} ,\, D_{bc,\, dryhphob}` ),
-and 3 are organic carbon deposition rates (dry and wet hydrophilic and
-dry hydrophobic rates,
-:math:`D_{oc,\, dryhphil} ,\, D_{oc,\, wethphil} ,\, D_{oc,\, dryhphob}` ).
-These fluxes are computed interactively by the atmospheric model (when
-prognostic aerosol representation is active) or are prescribed from a
-time-varying (annual cycle or transient), globally-gridded deposition
-file defined in the namelist (see the CLM4.5 User’s Guide). Aerosol
-deposition rates were calculated in a transient 1850-2009 CAM simulation
-(at a resolution of 1.9x2.5x26L) with interactive chemistry (troposphere
-and stratosphere) driven by CCSM3 20\ :sup:`th` century
-sea-surface temperatures and emissions (:ref:`Lamarque et al. 2010`) for
-short-lived gases and aerosols; observed concentrations were specified
-for methane, N\ :sub:`2`\ O, the ozone-depleting substances (CFCs)
-,and CO\ :sub:`2`. The fluxes are used by the snow-related
-parameterizations (Chapters :numref:`rst_Surface Albedos` and :numref:`rst_Snow Hydrology`).
-
-:sup:`4`\ The nitrogen deposition rate is required by the
-biogeochemistry model when active and represents the total deposition of
-mineral nitrogen onto the land surface, combining deposition of
-NO\ :sub:`y` and NH\ :sub:`x`. The rate is supplied either
-as a time-invariant spatially-varying annual mean rate or time-varying
-for a transient simulation. Nitrogen deposition rates were calculated
-from the same CAM chemistry simulation that generated the aerosol
-deposition rates.
-
-:sup:`5`\ Climatological 3-hourly lightning frequency at
-:math:`\sim`\ 1.8\ :sup:`o` resolution is provided, which was
-calculated via bilinear interpolation from 1995-2011 NASA LIS/OTD grid
-product v2.2 (http://ghrc.msfc.nasa.gov) 2-hourly, 2.5\ :sup:`o`
-lightning frequency data. In future versions of the model, lightning
-data may be obtained directly from the atmosphere model.
-
-Density of air (:math:`\rho _{atm}` ) (kg m\ :sup:`-3`) is also
-required but is calculated directly from
-:math:`\rho _{atm} =\frac{P_{atm} -0.378e_{atm} }{R_{da} T_{atm} }`
-where :math:`P_{atm}` is atmospheric pressure (Pa), :math:`e_{atm}` is
-atmospheric vapor pressure (Pa), :math:`R_{da}` is the gas constant for
-dry air (J kg\ :sup:`-1` K\ :sup:`-1`) (:numref:`Table Physical constants`), and
-:math:`T_{atm}` is the atmospheric temperature (K). The atmospheric
-vapor pressure :math:`e_{atm}` is derived from atmospheric specific
-humidity :math:`q_{atm}` (kg kg\ :sup:`-1`) as
-:math:`e_{atm} =\frac{q_{atm} P_{atm} }{0.622+0.378q_{atm} }` .
-
-The O\ :sub:`2` partial pressure (Pa) is required but is
-calculated from molar ratio and the atmospheric pressure
-:math:`P_{atm}` as :math:`o_{i} =0.209P_{atm}` .
+:sup:`1`\ The atmospheric reference height received from the atmospheric model :math:`z'_{atm}` is assumed to be the height above the surface as defined by the roughness length :math:`z_{0}` plus displacement height :math:`d`. Thus, the reference height used for flux computations (Chapter :numref:`rst_Momentum, Sensible Heat, and Latent Heat Fluxes`) is :math:`z_{atm} =z'_{atm} +z_{0} +d`. The reference heights for temperature, wind, and specific humidity (:math:`z_{atm,\, h}`, :math:`z_{atm,\, {\it m}}`, :math:`z_{atm,\, w}` ) are required. These are set equal to\ :math:`z_{atm}`.
+
+:sup:`2`\ CAM provides convective and large-scale liquid and solid precipitation, which are added to yield total liquid precipitation :math:`q_{rain}` and solid precipitation :math:`q_{sno}`. However, in CLM5, the atmosphere's partitioning into liquid and solid precipitation is ignored. Instead, CLM repartitions total precipitation using a linear ramp. For most landunits, this ramp generates all snow below :math:`0 ^{\circ} C`, all rain above :math:`2 ^{\circ} C`, and a mix of rain and snow for intermediate temperatures. For glaciers, the end points of the ramp are :math:`-2 ^{\circ} C` and :math:`0 ^{\circ} C`, respectively. Changes to the phase of precipitation are accompanied by a sensible heat flux (positive or negative) to conserve energy.
+
+:sup:`3`\ There are 14 aerosol deposition rates required depending on species and affinity for bonding with water; 8 of these are dust deposition rates (dry and wet rates for 4 dust size bins, :math:`D_{dst,\, dry1},\, D_{dst,\, dry2},\, D_{dst,\, dry3},\, D_{dst,\, dry4}`, :math:`D_{dst,\, \, wet1},D_{dst,\, wet2},\, D_{dst,wet3},\, D_{dst,\, wet4}` ), 3 are black carbon deposition rates (dry and wet hydrophilic and dry hydrophobic rates, :math:`D_{bc,\, dryhphil},\, D_{bc,\, wethphil},\, D_{bc,\, dryhphob}` ), and 3 are organic carbon deposition rates (dry and wet hydrophilic and dry hydrophobic rates, :math:`D_{oc,\, dryhphil},\, D_{oc,\, wethphil},\, D_{oc,\, dryhphob}` ). These fluxes are computed interactively by the atmospheric model (when prognostic aerosol representation is active) or are prescribed from a time-varying (annual cycle or transient), globally-gridded deposition file defined in the namelist (see the CLM4.5 User's Guide). Aerosol deposition rates were calculated in a transient 1850-2009 CAM simulation (at a resolution of 1.9x2.5x26L) with interactive chemistry (troposphere and stratosphere) driven by CCSM3 20\ :sup:`th` century sea-surface temperatures and emissions (:ref:`Lamarque et al. 2010`) for short-lived gases and aerosols; observed concentrations were specified for methane, N\ :sub:`2`\ O, the ozone-depleting substances (CFCs),and CO\ :sub:`2`. The fluxes are used by the snow-related parameterizations (Chapters :numref:`rst_Surface Albedos` and :numref:`rst_Snow Hydrology`).
+
+:sup:`4`\ The nitrogen deposition rate is required by the biogeochemistry model when active and represents the total deposition of mineral nitrogen onto the land surface, combining deposition of NO\ :sub:`y` and NH\ :sub:`x`. The rate is supplied either as a time-invariant spatially-varying annual mean rate or time-varying for a transient simulation. Nitrogen deposition rates were calculated from the same CAM chemistry simulation that generated the aerosol deposition rates.
+
+:sup:`5`\ Climatological 3-hourly lightning frequency at :math:`\sim`\ 1.8° resolution is provided, which was calculated via bilinear interpolation from 1995-2011 NASA LIS/OTD grid product v2.2 (http://ghrc.msfc.nasa.gov) 2-hourly, 2.5° lightning frequency data. In future versions of the model, lightning data may be obtained directly from the atmosphere model.
+
+Density of air (:math:`\rho _{atm}` ) (kg m\ :sup:`-3`) is also required but is calculated directly from :math:`\rho _{atm} =\frac{P_{atm} -0.378e_{atm} }{R_{da} T_{atm} }` where :math:`P_{atm}` is atmospheric pressure (Pa), :math:`e_{atm}` is atmospheric vapor pressure (Pa), :math:`R_{da}` is the gas constant for dry air (J kg\ :sup:`-1` K\ :sup:`-1`) (:numref:`Table Physical constants`), and :math:`T_{atm}` is the atmospheric temperature (K). The atmospheric vapor pressure :math:`e_{atm}` is derived from atmospheric specific humidity :math:`q_{atm}` (kg kg\ :sup:`-1`) as :math:`e_{atm} =\frac{q_{atm} P_{atm} }{0.622+0.378q_{atm} }`.
+
+The O\ :sub:`2` partial pressure (Pa) is required but is calculated from molar ratio and the atmospheric pressure :math:`P_{atm}` as :math:`o_{i} =0.209P_{atm}`.
.. _Table Land model output to atmospheric model:
@@ -552,91 +348,27 @@ calculated from molar ratio and the atmospheric pressure
| Net ecosystem exchange | NEE | kgCO\ :sub:`2` m\ :sup:`-2` s\ :sup:`-1` |
+---------------------------------------+------------------------------------------------+--------------------------------------------------------------+
-:sup:`1`\ :math:`\lambda _{vap}` is the latent heat of
-vaporization (J kg\ :sup:`-1`) (:numref:`Table Physical constants`) and :math:`\lambda` is
-either the latent heat of vaporization :math:`\lambda _{vap}` or latent
-heat of sublimation :math:`\lambda _{sub}` (J kg\ :sup:`-1`)
-(:numref:`Table Physical constants`) depending on the liquid water and ice content of the top
-snow/soil layer (section 5.4).
+:sup:`1`\ :math:`\lambda _{vap}` is the latent heat of vaporization (J kg\ :sup:`-1`) (:numref:`Table Physical constants`) and :math:`\lambda` is either the latent heat of vaporization :math:`\lambda _{vap}` or latent heat of sublimation :math:`\lambda _{sub}` (J kg\ :sup:`-1`) (:numref:`Table Physical constants`) depending on the liquid water and ice content of the top snow/soil layer (section 5.4).
-:sup:`2`\ There are :math:`j=1,\ldots ,4` dust transport bins.
+:sup:`2`\ There are :math:`j=1,\ldots,4` dust transport bins.
.. _Initialization:
Initialization
^^^^^^^^^^^^^^^^^^^^
-Initialization of the land model (i.e., providing the model with initial
-temperature and moisture states) depends on the type of run (startup or
-restart) (see the CLM4.5 User’s Guide). A startup run starts the model
-from either initial conditions that are set internally in the Fortran
-code (referred to as arbitrary initial conditions) or from an initial
-conditions dataset that enables the model to start from a spun up state
-(i.e., where the land is in equilibrium with the simulated climate). In
-restart runs, the model is continued from a previous simulation and
-initialized from a restart file that ensures that the output is
-bit-for-bit the same as if the previous simulation had not stopped. The
-fields that are required from the restart or initial conditions files
-can be obtained by examining the code. Arbitrary initial conditions are
-specified as follows.
-
-Soil points are initialized with
-surface ground temperature :math:`T_{g}` and soil layer temperature
-:math:`T_{i}` , for :math:`i=1,\ldots ,N_{levgrnd}` , of 274 K,
-vegetation temperature :math:`T_{v}` of 283 K, no snow or canopy water
-(:math:`W_{sno} =0`, :math:`W_{can} =0`), and volumetric soil water
-content :math:`\theta _{i} =0.15` mm\ :sup:`3` mm\ :sup:`-3`
-for layers :math:`i=1,\ldots ,N_{levsoi}` and :math:`\theta _{i} =0.0`
-mm\ :sup:`3` mm\ :sup:`-3` for layers
-:math:`i=N_{levsoi} +1,\ldots ,N_{levgrnd}` . placeLake temperatures
-(:math:`T_{g}` and :math:`T_{i}` ) are initialized at 277 K and
-:math:`W_{sno} =0`.
-
-Glacier temperatures (:math:`T_{g} =T_{snl+1}` and :math:`T_{i}` for
-:math:`i=snl+1,\ldots ,N_{levgrnd}` where :math:`snl` is the negative
-of the number of snow layers, i.e., :math:`snl` ranges from –5 to 0) are
-initialized to 250 K with a snow water equivalent :math:`W_{sno} =1000`
-mm, snow depth :math:`z_{sno} =\frac{W_{sno} }{\rho _{sno} }` (m) where
-:math:`\rho _{sno} =250` kg m\ :sup:`-3` is an initial estimate
-for the bulk density of snow, and :math:`\theta _{i}` \ =1.0 for
-:math:`i=1,\ldots ,N_{levgrnd}` . The snow layer structure (e.g., number
-of snow layers :math:`snl` and layer thickness) is initialized based on
-the snow depth (section 6.1). The snow liquid water and ice contents (kg
-m\ :sup:`-2`) are initialized as :math:`w_{liq,\, i} =0` and
-:math:`w_{ice,\, i} =\Delta z_{i} \rho _{sno}` , respectively, where
-:math:`i=snl+1,\ldots ,0` are the snow layers, and :math:`\Delta z_{i}`
-is the thickness of snow layer :math:`i` (m). The soil liquid water and
-ice contents are initialized as :math:`w_{liq,\, i} =0` and
-:math:`w_{ice,\, i} =\Delta z_{i} \rho _{ice} \theta _{i}` for
-:math:`T_{i} \le T_{f}` , and
-:math:`w_{liq,\, i} =\Delta z_{i} \rho _{liq} \theta _{i}` and
-:math:`w_{ice,\, i} =0` for :math:`T_{i} >T_{f}` , where
-:math:`\rho _{ice}` and :math:`\rho _{liq}` are the densities of ice
-and liquid water (kg m\ :sup:`-3`) (:numref:`Table Physical constants`), and :math:`T_{f}`
-is the freezing temperature of water (K) (:numref:`Table Physical constants`). All vegetated and
-glacier land units are initialized with water stored in the unconfined
-aquifer and unsaturated soil :math:`W_{a} =4000` mm and water table
-depth :math:`z_{\nabla }` at five meters below the soil column.
+Initialization of the land model (i.e., providing the model with initial temperature and moisture states) depends on the type of run (startup or restart) (see the CLM4.5 User's Guide). A startup run starts the model from either initial conditions that are set internally in the Fortran code (referred to as arbitrary initial conditions) or from an initial conditions dataset that enables the model to start from a spun up state (i.e., where the land is in equilibrium with the simulated climate). In restart runs, the model is continued from a previous simulation and initialized from a restart file that ensures that the output is bit-for-bit the same as if the previous simulation had not stopped. The fields that are required from the restart or initial conditions files can be obtained by examining the code. Arbitrary initial conditions are specified as follows.
+
+Soil points are initialized with surface ground temperature :math:`T_{g}` and soil layer temperature :math:`T_{i}`, for :math:`i=1,\ldots,N_{levgrnd}`, of 274 K, vegetation temperature :math:`T_{v}` of 283 K, no snow or canopy water (:math:`W_{sno} =0`, :math:`W_{can} =0`), and volumetric soil water content :math:`\theta _{i} =0.15` mm\ :sup:`3` mm\ :sup:`-3` for layers :math:`i=1,\ldots,N_{levsoi}` and :math:`\theta _{i} =0.0` mm\ :sup:`3` mm\ :sup:`-3` for layers :math:`i=N_{levsoi} +1,\ldots,N_{levgrnd}`. placeLake temperatures (:math:`T_{g}` and :math:`T_{i}` ) are initialized at 277 K and :math:`W_{sno} =0`.
+
+Glacier temperatures (:math:`T_{g} =T_{snl+1}` and :math:`T_{i}` for :math:`i=snl+1,\ldots,N_{levgrnd}` where :math:`snl` is the negative of the number of snow layers, i.e., :math:`snl` ranges from –5 to 0) are initialized to 250 K with a snow water equivalent :math:`W_{sno} =1000` mm, snow depth :math:`z_{sno} =\frac{W_{sno} }{\rho _{sno} }` (m) where :math:`\rho _{sno} =250` kg m\ :sup:`-3` is an initial estimate for the bulk density of snow, and :math:`\theta _{i}` \ =1.0 for :math:`i=1,\ldots,N_{levgrnd}`. The snow layer structure (e.g., number of snow layers :math:`snl` and layer thickness) is initialized based on the snow depth (section 6.1). The snow liquid water and ice contents (kg m\ :sup:`-2`) are initialized as :math:`w_{liq,\, i} =0` and :math:`w_{ice,\, i} =\Delta z_{i} \rho _{sno}`, respectively, where :math:`i=snl+1,\ldots,0` are the snow layers, and :math:`\Delta z_{i}` is the thickness of snow layer :math:`i` (m). The soil liquid water and ice contents are initialized as :math:`w_{liq,\, i} =0` and :math:`w_{ice,\, i} =\Delta z_{i} \rho _{ice} \theta _{i}` for :math:`T_{i} \le T_{f}`, and :math:`w_{liq,\, i} =\Delta z_{i} \rho _{liq} \theta _{i}` and :math:`w_{ice,\, i} =0` for :math:`T_{i} >T_{f}`, where :math:`\rho _{ice}` and :math:`\rho _{liq}` are the densities of ice and liquid water (kg m\ :sup:`-3`) (:numref:`Table Physical constants`), and :math:`T_{f}` is the freezing temperature of water (K) (:numref:`Table Physical constants`). All vegetated and glacier land units are initialized with water stored in the unconfined aquifer and unsaturated soil :math:`W_{a} =4000` mm and water table depth :math:`z_{\nabla }` at five meters below the soil column.
.. _Surface Data:
Surface Data
^^^^^^^^^^^^^^^^^^
-Required surface data for each land grid cell are listed in
-:numref:`Table Surface data required for CLM and their base spatial resolution`
-and include the glacier, lake, and urban fractions of the grid cell
-(vegetated and crop occupy the remainder), the fractional cover of each
-plant functional type (PFT), monthly leaf and stem area index and canopy
-top and bottom heights for each PFT, soil color, soil texture, soil
-organic matter density, maximum fractional saturated area, slope,
-elevation, biogenic volatile organic compounds (BVOCs) emissions
-factors, population density, gross domestic production, peat area
-fraction, and peak month of agricultural burning. Optional surface data
-include crop irrigation and managed crops. All fields are aggregated to
-the model’s grid from high-resolution input datasets (
-:numref:`Table Surface data required for CLM and their base spatial resolution`) that
-are obtained from a variety of sources described below.
+Required surface data for each land grid cell are listed in :numref:`Table Surface data required for CLM and their base spatial resolution` and include the glacier, lake, and urban fractions of the grid cell (vegetated and crop occupy the remainder), the fractional cover of each plant functional type (PFT), monthly leaf and stem area index and canopy top and bottom heights for each PFT, soil color, soil texture, soil organic matter density, maximum fractional saturated area, slope, elevation, biogenic volatile organic compounds (BVOCs) emissions factors, population density, gross domestic production, peat area fraction, and peak month of agricultural burning. Optional surface data include crop irrigation and managed crops. All fields are aggregated to the model's grid from high-resolution input datasets ( :numref:`Table Surface data required for CLM and their base spatial resolution`) that are obtained from a variety of sources described below.
.. _Table Surface data required for CLM and their base spatial resolution:
@@ -645,228 +377,77 @@ are obtained from a variety of sources described below.
+--------------------------------------------+---------------------------+
| Surface Field | Resolution |
+============================================+===========================+
- | Percent glacier | 0.05\ :sup:`o` |
+ | Percent glacier | 0.05° |
+--------------------------------------------+---------------------------+
- | Percent lake and lake depth | 0.05\ :sup:`o` |
+ | Percent lake and lake depth | 0.05° |
+--------------------------------------------+---------------------------+
- | Percent urban | 0.05\ :sup:`o` |
+ | Percent urban | 0.05° |
+--------------------------------------------+---------------------------+
- | Percent plant functional types (PFTs) | 0.05\ :sup:`o` |
+ | Percent plant functional types (PFTs) | 0.05° |
+--------------------------------------------+---------------------------+
- | Monthly leaf and stem area index | 0.5\ :sup:`o` |
+ | Monthly leaf and stem area index | 0.5° |
+--------------------------------------------+---------------------------+
- | Canopy height (top, bottom) | 0.5\ :sup:`o` |
+ | Canopy height (top, bottom) | 0.5° |
+--------------------------------------------+---------------------------+
- | Soil color | 0.5\ :sup:`o` |
+ | Soil color | 0.5° |
+--------------------------------------------+---------------------------+
- | Percent sand, percent clay | 0.083\ :sup:`o` |
+ | Percent sand, percent clay | 0.083° |
+--------------------------------------------+---------------------------+
- | Soil organic matter density | 0.083\ :sup:`o` |
+ | Soil organic matter density | 0.083° |
+--------------------------------------------+---------------------------+
- | Maximum fractional saturated area | 0.125\ :sup:`o` |
+ | Maximum fractional saturated area | 0.125° |
+--------------------------------------------+---------------------------+
| Elevation | 1km |
+--------------------------------------------+---------------------------+
| Slope | 1km |
+--------------------------------------------+---------------------------+
- | Biogenic Volatile Organic Compounds | 0.5\ :sup:`o` |
+ | Biogenic Volatile Organic Compounds | 0.5° |
+--------------------------------------------+---------------------------+
- | Crop Irrigation | 0.083\ :sup:`o` |
+ | Crop Irrigation | 0.083° |
+--------------------------------------------+---------------------------+
- | Managed crops | 0.5\ :sup:`o` |
+ | Managed crops | 0.5° |
+--------------------------------------------+---------------------------+
- | Population density | 0.5\ :sup:`o` |
+ | Population density | 0.5° |
+--------------------------------------------+---------------------------+
- | Gross domestic production | 0.5\ :sup:`o` |
+ | Gross domestic production | 0.5° |
+--------------------------------------------+---------------------------+
- | Peat area fraction | 0.5\ :sup:`o` |
+ | Peat area fraction | 0.5° |
+--------------------------------------------+---------------------------+
- | Peak month of agricultural waste burning | 0.5\ :sup:`o` |
+ | Peak month of agricultural waste burning | 0.5° |
+--------------------------------------------+---------------------------+
-At the base spatial resolution of 0.05\ :sup:`o`, the percentage of
-each PFT is defined with respect to the vegetated portion of the grid
-cell and the sum of the PFTs is 100%. The percent lake,
-glacier, and urban at their base resolution are specified with respect
-to the entire grid cell. The surface dataset creation routines re-adjust
-the PFT percentages to ensure that the sum of all land cover types in
-the grid cell sum to 100%. A minimum threshold of 0.1% of the grid cell
-by area is required for urban areas.
-
-The percentage glacier mask was derived from vector data of global
-glacier and ice sheet spatial coverage. Vector data for glaciers (ice
-caps, icefields and mountain glaciers) were taken from the first
-globally complete glacier inventory, the Randolph Glacier Inventory
-version 1.0 (RGIv1.0: :ref:`Arendt et al. 2012 `).
-Vector data for the Greenland Ice Sheet were provided by Frank Paul and
-Tobias Bolch (University of Zurich: :ref:`Rastner et al. 2012
-`). Antarctic Ice Sheet data were provided by Andrew
-Bliss (University of Alaska) and were extracted from the Scientific
-Committee on Antarctic Research (SCAR) Antarctic Digital Database
-version 5.0. Floating ice is only provided for the Antarctic and does
-not include the small area of Arctic ice shelves. High spatial
-resolution vector data were then processed to determine the area of
-glacier, ice sheet and floating ice within 30-second grid cells
-globally. The 30-second glacier, ice sheet and Antarctic ice shelf masks
-were subsequently draped over equivalent-resolution GLOBE topography
-(Global Land One-km Base Elevation Project, Hastings et al. 1999) to
-extract approximate ice-covered elevations of ice-covered regions. Grid
-cells flagged as land-ice in the mask but ocean in GLOBE (typically,
-around ice sheets at high latitudes) were designated land-ice with an
-elevation of 0 meters. Finally, the high-resolution mask/topography
-datasets were aggregated and processed into three 3-minute datasets:
-3-minute fractional areal land ice coverage (including both glaciers and
-ice sheets); 3-minute distributions of areal glacier fractional coverage
-by elevation and areal ice sheet fractional coverage by elevation. Ice
-fractions were binned at 100 meter intervals, with bin edges defined
-from 0 to 6000 meters (plus one top bin encompassing all remaining
-high-elevation ice, primarily in the Himalaya). These distributions by
-elevation are used to divide each glacier land unit into columns based
-on elevation class.
-
-When running with the CISM ice sheet model, CISM dictates glacier areas
-and elevations in its domain, overriding the values specified by CLM's
-datasets. In typical CLM5 configurations, this means that CISM dictates
-glacier areas and elevations over Greenland.
-
-Percent lake and lake depth are area-averaged from the 90-second
-resolution data of :ref:`Kourzeneva (2009, 2010) ` to the 0.05\ :sup:`o`
-resolution using the MODIS land-mask. Percent urban is derived from
-LandScan 2004, a population density dataset derived from census data,
-nighttime lights satellite observations, road proximity and slope
-(:ref:`Dobson et al. 2000 `) as described by
-:ref:`Jackson et al. (2010) ` at 1km
-resolution and aggregated to 0.05\ :sup:`o`. A number of urban
-radiative, thermal, and morphological fields are also required and are
-obtained from :ref:`Jackson et al. (2010) `. Their description can be found in
-Table 3 of the Community Land Model Urban (CLMU) technical note (:ref:`Oleson
-et al. 2010b `).
-
-Percent PFTs are derived from MODIS satellite data as described in
-:ref:`Lawrence and Chase (2007) ` (section 21.3.3).
-Prescribed PFT leaf area index is derived from the MODIS satellite data of
-:ref:`Myneni et al. (2002) ` using the de-aggregation methods
-described in :ref:`Lawrence and Chase (2007) `
-(section 2.2.3). Prescribed PFT stem area index is derived from PFT leaf
-area index phenology combined with the methods of :ref:`Zeng et al. (2002) `.
-Prescribed canopy top and bottom heights are from :ref:`Bonan (1996) ` as
-described in :ref:`Bonan et al. (2002b) `. If the biogeochemistry model is
-active, it supplies the leaf and stem area index and canopy top and
-bottom heights dynamically, and the prescribed values are ignored.
-
-Soil color determines dry and saturated soil albedo (section :numref:`Ground Albedos`).
-Soil colors are from :ref:`Lawrence and Chase (2007) `.
-
-The soil texture and organic matter content determine soil thermal and
-hydrologic properties (sections 6.3 and 7.4.1). The International
-Geosphere-Biosphere Programme (IGBP) soil dataset (Global Soil Data Task
-2000) of 4931 soil mapping units and their sand and clay content for
-each soil layer were used to create a mineral soil texture dataset
-:ref:`(Bonan et al. 2002b) `. Soil organic matter data is merged from two
-sources. The majority of the globe is from ISRIC-WISE (:ref:`Batjes, 2006