From 3179627ff5a1b57fc5d3ba323f65ff7fbe21efff Mon Sep 17 00:00:00 2001 From: Ryan Knox Date: Wed, 24 Jan 2024 20:44:58 -0700 Subject: [PATCH 1/7] adding fates parameter auto-build to all tests --- .../testmods_dirs/clm/Fates/shell_commands | 14 ++++++++++++++ .../testdefs/testmods_dirs/clm/Fates/user_nl_clm | 1 + .../clm/FatesColdSeedDisp/shell_commands | 10 ++++------ .../clm/FatesColdSeedDisp/user_nl_clm | 1 - .../clm/FatesColdTwoStream/shell_commands | 11 ++++------- .../clm/FatesColdTwoStream/user_nl_clm | 2 +- .../shell_commands | 11 ++++------- .../user_nl_clm | 3 +-- 8 files changed, 29 insertions(+), 24 deletions(-) diff --git a/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands b/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands index 41a2342a51..fc60e915b1 100644 --- a/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands @@ -1,2 +1,16 @@ ./xmlchange CLM_BLDNML_OPTS="-no-megan" --append ./xmlchange BFBFLAG="TRUE" + +CASE=`./xmlquery CASE --value` +SRCROOT=`./xmlquery SRCROOT --value` + +#CIME_OUTPUT_ROOT=`./xmlquery CIME_OUTPUT_ROOT --value` +# CASEDIR=`./xmlquery CASEROOT --value` +# env_test.xml IS NOT AVAILABLE TESTROOT=`./xmlquery TESTROOT --value` +# env_test.xml IS NOT AVAILABLE TESTID=`./xmlquery TESTID --value` +# env_test.xml IS NOT AVAILABLE TESTARGV=`./xmlquery TEST_ARGV --value` + +FATESDIR=$SRCROOT/src/fates +FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc + +ncgen -o $FATESPARAMFILE $FATESDIR/parameter_files/fates_params_default.cdl 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 406fb598f6..1f45d85f66 100644 --- a/cime_config/testdefs/testmods_dirs/clm/Fates/user_nl_clm +++ b/cime_config/testdefs/testmods_dirs/clm/Fates/user_nl_clm @@ -4,6 +4,7 @@ hist_nhtfrq = -24 hist_empty_htapes = .true. hist_ndens = 1 fates_spitfire_mode = 1 +fates_paramfile='${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc' hist_fincl1 = 'FATES_NCOHORTS', 'FATES_TRIMMING', 'FATES_AREA_PLANTS', 'FATES_AREA_TREES', 'FATES_COLD_STATUS', 'FATES_GDD', 'FATES_NCHILLDAYS', 'FATES_NCOLDDAYS', 'FATES_DAYSINCE_COLDLEAFOFF','FATES_DAYSINCE_COLDLEAFON', diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands index 94a832af25..3593e1263c 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands @@ -1,9 +1,7 @@ -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 +CASE=`./xmlquery CASE --value` +SRCROOT=`./xmlquery SRCROOT --value` +FATESDIR=$SRCROOT/src/fates +FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc $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 diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/user_nl_clm index e8d24253c1..7b736a1511 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/user_nl_clm +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/user_nl_clm @@ -1,3 +1,2 @@ -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/FatesColdTwoStream/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands index 5d94e5f659..15b0fd06a7 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands @@ -1,8 +1,5 @@ -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 - +CASE=`./xmlquery CASE --value` +SRCROOT=`./xmlquery SRCROOT --value` +FATESDIR=$SRCROOT/src/fates +FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc $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 index cae5fc2112..8b13789179 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/user_nl_clm +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/user_nl_clm @@ -1 +1 @@ -fates_paramfile = '$CASEROOT/fates_params_twostream.nc' + diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands index 5d94e5f659..15b0fd06a7 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands @@ -1,8 +1,5 @@ -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 - +CASE=`./xmlquery CASE --value` +SRCROOT=`./xmlquery SRCROOT --value` +FATESDIR=$SRCROOT/src/fates +FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc $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 index 362dfa4a5e..ffcc5dd2f5 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/user_nl_clm +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/user_nl_clm @@ -1,2 +1 @@ -fates_paramfile = '$CASEROOT/fates_params_twostream.nc' -use_fates_fixed_biogeog=.true. \ No newline at end of file +use_fates_fixed_biogeog=.true. From 5404a7c66af9b1e5037ccffb7419bb99fec72e21 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Mon, 12 Feb 2024 10:55:03 -0700 Subject: [PATCH 2/7] Bring in changes to run_sys_tests from ctsm5.1.dev166. I.e., PR ESCOMP/CTSM#2326. --- .git-blame-ignore-revs | 1 + python/ctsm/run_sys_tests.py | 44 +++++++++++++++-- python/ctsm/test/test_unit_run_sys_tests.py | 53 ++++++++++++++++++++- 3 files changed, 93 insertions(+), 5 deletions(-) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index e63de8e099..8708f8e0c2 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -21,6 +21,7 @@ e4d38681df23ccca0ae29581a45f8362574e0630 025d5e7c2e80263717fb029101d65cbbf261c3c4 a9d96219902cf609636886c7073a84407f450d9a d866510188d26d51bcd6d37239283db690af7e82 +0dcd0a3c1abcaffe5529f8d79a6bc34734b195c7 # Ran SystemTests and python/ctsm through black python formatter 5364ad66eaceb55dde2d3d598fe4ce37ac83a93c 8056ae649c1b37f5e10aaaac79005d6e3a8b2380 diff --git a/python/ctsm/run_sys_tests.py b/python/ctsm/run_sys_tests.py index e4a0bcf009..de93081504 100644 --- a/python/ctsm/run_sys_tests.py +++ b/python/ctsm/run_sys_tests.py @@ -249,7 +249,7 @@ def run_sys_tests( else: raise RuntimeError("None of suite_name, testfile or testlist were provided") if not running_ctsm_py_tests: - _try_systemtests(testname_list) + _check_py_env(testname_list) _run_create_test( cime_path=cime_path, test_args=test_args, @@ -708,7 +708,23 @@ def _run_test_suite( ) -def _try_systemtests(testname_list): +def _get_testmod_list(test_attributes, unique=False): + # Isolate testmods, producing a list like + # ["clm-test1mod1", "clm-test2mod1", "clm-test2mod2", ...] + # Handles test attributes passed in from run_sys_tests calls using -t, -f, or -s + + testmods = [] + for test_attribute in test_attributes: + for dot_split in test_attribute.split("."): + slash_replaced = dot_split.replace("/", "-") + for ddash_split in slash_replaced.split("--"): + if "clm-" in ddash_split and (ddash_split not in testmods or not unique): + testmods.append(ddash_split) + + return testmods + + +def _check_py_env(test_attributes): err_msg = " can't be loaded. Do you need to activate the ctsm_pylib conda environment?" # Suppress pylint import-outside-toplevel warning because (a) we only want to import # this when certain tests are requested, and (b) the import needs to be in a try-except @@ -716,12 +732,31 @@ def _try_systemtests(testname_list): # pylint: disable=import-outside-toplevel disable # Suppress pylint unused-import warning because the import itself IS the use. # pylint: disable=unused-import disable - if any("FSURDATMODIFYCTSM" in t for t in testname_list): + # Suppress pylint import-error warning because the whole point here is to check + # whether import is possible. + # pylint: disable=import-error disable + + # Check requirements for FSURDATMODIFYCTSM, if needed + if any("FSURDATMODIFYCTSM" in t for t in test_attributes): try: import ctsm.modify_input_files.modify_fsurdat except ModuleNotFoundError as err: raise ModuleNotFoundError("modify_fsurdat" + err_msg) from err + # Check that list for any testmods that use modify_fates_paramfile.py + testmods_to_check = ["clm-FatesColdTwoStream", "clm-FatesColdTwoStreamNoCompFixedBioGeo"] + testmods = _get_testmod_list(test_attributes) + if any(t in testmods_to_check for t in testmods): + # This bit is needed because it's outside the top-level python/ directory. + fates_dir = os.path.join( + os.path.dirname(os.path.realpath(__file__)), os.pardir, os.pardir, "src", "fates" + ) + sys.path.insert(1, fates_dir) + try: + import tools.modify_fates_paramfile + except ModuleNotFoundError as err: + raise ModuleNotFoundError("modify_fates_paramfile" + err_msg) from err + def _get_compilers_for_suite(suite_name, machine_name, running_ctsm_py_tests): test_data = get_tests_from_xml(xml_machine=machine_name, xml_category=suite_name) @@ -730,7 +765,8 @@ def _get_compilers_for_suite(suite_name, machine_name, running_ctsm_py_tests): "No tests found for suite {} on machine {}".format(suite_name, machine_name) ) if not running_ctsm_py_tests: - _try_systemtests([t["testname"] for t in test_data]) + _check_py_env([t["testname"] for t in test_data]) + _check_py_env([t["testmods"] for t in test_data if "testmods" in t.keys()]) compilers = sorted({one_test["compiler"] for one_test in test_data}) logger.info("Running with compilers: %s", compilers) return compilers diff --git a/python/ctsm/test/test_unit_run_sys_tests.py b/python/ctsm/test/test_unit_run_sys_tests.py index ee5197d76f..65ec1df5a5 100755 --- a/python/ctsm/test/test_unit_run_sys_tests.py +++ b/python/ctsm/test/test_unit_run_sys_tests.py @@ -16,7 +16,7 @@ from ctsm import add_cime_to_path # pylint: disable=unused-import from ctsm import unit_testing -from ctsm.run_sys_tests import run_sys_tests +from ctsm.run_sys_tests import run_sys_tests, _get_testmod_list from ctsm.machine_defaults import MACHINE_DEFAULTS from ctsm.machine import create_machine from ctsm.joblauncher.job_launcher_factory import JOB_LAUNCHER_FAKE @@ -269,6 +269,57 @@ def test_withDryRun_nothingDone(self): self.assertEqual(os.listdir(self._scratch), []) self.assertEqual(machine.job_launcher.get_commands(), []) + def test_getTestmodList_suite(self): + """Ensure that _get_testmod_list() works correctly with suite-style input""" + input = [ + "clm/default", + "clm/default", + "clm/crop", + "clm/cropMonthlyOutput", + ] + target = [ + "clm-default", + "clm-default", + "clm-crop", + "clm-cropMonthlyOutput", + ] + output = _get_testmod_list(input, unique=False) + self.assertEqual(output, target) + + def test_getTestmodList_suite_unique(self): + """Ensure that _get_testmod_list() works correctly with unique=True""" + input = [ + "clm/default", + "clm/default", + "clm/crop", + "clm/cropMonthlyOutput", + ] + target = [ + "clm-default", + "clm-crop", + "clm-cropMonthlyOutput", + ] + + output = _get_testmod_list(input, unique=True) + self.assertEqual(output, target) + + def test_getTestmodList_testname(self): + """Ensure that _get_testmod_list() works correctly with full test name(s) specified""" + input = [ + "ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.izumi_nag.clm-crop", + "ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.izumi_nag.clm-default", + ] + target = ["clm-crop", "clm-default"] + output = _get_testmod_list(input) + self.assertEqual(output, target) + + def test_getTestmodList_twomods(self): + """Ensure that _get_testmod_list() works correctly with full test name(s) specified and two mods in one test""" + input = ["ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.izumi_nag.clm-default--clm-crop"] + target = ["clm-default", "clm-crop"] + output = _get_testmod_list(input) + self.assertEqual(output, target) + if __name__ == "__main__": unit_testing.setup_for_tests() From 5e5d485f6c3ec55dcf04d8e178246aced0a0a72c Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Mon, 12 Feb 2024 11:05:58 -0700 Subject: [PATCH 3/7] run_sys_tests now checks modules needed for FatesColdSeedDisp. --- python/ctsm/run_sys_tests.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/python/ctsm/run_sys_tests.py b/python/ctsm/run_sys_tests.py index de93081504..31689a83ea 100644 --- a/python/ctsm/run_sys_tests.py +++ b/python/ctsm/run_sys_tests.py @@ -744,7 +744,11 @@ def _check_py_env(test_attributes): raise ModuleNotFoundError("modify_fsurdat" + err_msg) from err # Check that list for any testmods that use modify_fates_paramfile.py - testmods_to_check = ["clm-FatesColdTwoStream", "clm-FatesColdTwoStreamNoCompFixedBioGeo"] + testmods_to_check = [ + "clm-FatesColdSeedDisp", + "clm-FatesColdTwoStream", + "clm-FatesColdTwoStreamNoCompFixedBioGeo", + ] testmods = _get_testmod_list(test_attributes) if any(t in testmods_to_check for t in testmods): # This bit is needed because it's outside the top-level python/ directory. From fe5d12ac95b1554a620354e7024a8eeec3509e33 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 15 Feb 2024 11:25:22 -0700 Subject: [PATCH 4/7] Remove code duplication in Fates*/shell_commands. --- .../testdefs/testmods_dirs/clm/Fates/shell_commands | 11 +---------- .../clm/FatesColdSeedDisp/shell_commands | 5 ++--- .../clm/FatesColdTwoStream/shell_commands | 4 +--- .../shell_commands | 4 +--- .../testdefs/testmods_dirs/clm/_scripts/README | 2 ++ .../clm/_scripts/get_fates_shell_commands_vars.sh | 9 +++++++++ 6 files changed, 16 insertions(+), 19 deletions(-) create mode 100644 cime_config/testdefs/testmods_dirs/clm/_scripts/README create mode 100755 cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh diff --git a/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands b/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands index fc60e915b1..3443bacef0 100644 --- a/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/Fates/shell_commands @@ -1,16 +1,7 @@ ./xmlchange CLM_BLDNML_OPTS="-no-megan" --append ./xmlchange BFBFLAG="TRUE" -CASE=`./xmlquery CASE --value` SRCROOT=`./xmlquery SRCROOT --value` - -#CIME_OUTPUT_ROOT=`./xmlquery CIME_OUTPUT_ROOT --value` -# CASEDIR=`./xmlquery CASEROOT --value` -# env_test.xml IS NOT AVAILABLE TESTROOT=`./xmlquery TESTROOT --value` -# env_test.xml IS NOT AVAILABLE TESTID=`./xmlquery TESTID --value` -# env_test.xml IS NOT AVAILABLE TESTARGV=`./xmlquery TEST_ARGV --value` - -FATESDIR=$SRCROOT/src/fates -FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc +. "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh ncgen -o $FATESPARAMFILE $FATESDIR/parameter_files/fates_params_default.cdl diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands index 3593e1263c..40047b6de5 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands @@ -1,7 +1,6 @@ -CASE=`./xmlquery CASE --value` SRCROOT=`./xmlquery SRCROOT --value` -FATESDIR=$SRCROOT/src/fates -FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc +. "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh +CASE=`./xmlquery CASE --value` $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 diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands index 15b0fd06a7..7c15db42b5 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands @@ -1,5 +1,3 @@ -CASE=`./xmlquery CASE --value` SRCROOT=`./xmlquery SRCROOT --value` -FATESDIR=$SRCROOT/src/fates -FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc +. "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh $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/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands index 15b0fd06a7..7c15db42b5 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands @@ -1,5 +1,3 @@ -CASE=`./xmlquery CASE --value` SRCROOT=`./xmlquery SRCROOT --value` -FATESDIR=$SRCROOT/src/fates -FATESPARAMFILE=${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc +. "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh $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/_scripts/README b/cime_config/testdefs/testmods_dirs/clm/_scripts/README new file mode 100644 index 0000000000..66eb22a375 --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/clm/_scripts/README @@ -0,0 +1,2 @@ +This directory contains scripts that can be called in +shell_commands of multiple testmods. diff --git a/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh b/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh new file mode 100755 index 0000000000..8a31a6b996 --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh @@ -0,0 +1,9 @@ +# This script should be called in shell_commands with +# . "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh +# where the leading period ensures it's run in the same shell. + +CASE=`./xmlquery CASE --value` +FATESDIR="${SRCROOT}/src/fates" +FATESPARAMFILE="${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc" + +# No exit status because it should be called in the same shell. From ec6cd21c52aea31d0607f28d0245bb1b8cab6f0b Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 15 Feb 2024 11:40:05 -0700 Subject: [PATCH 5/7] Fix check of modify_fates_paramfile module availability for run_sys_tests -f. --- python/ctsm/run_sys_tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ctsm/run_sys_tests.py b/python/ctsm/run_sys_tests.py index 31689a83ea..ce9f827b31 100644 --- a/python/ctsm/run_sys_tests.py +++ b/python/ctsm/run_sys_tests.py @@ -717,7 +717,8 @@ def _get_testmod_list(test_attributes, unique=False): for test_attribute in test_attributes: for dot_split in test_attribute.split("."): slash_replaced = dot_split.replace("/", "-") - for ddash_split in slash_replaced.split("--"): + newline_replaced = slash_replaced.replace("\n", "") + for ddash_split in newline_replaced.split("--"): if "clm-" in ddash_split and (ddash_split not in testmods or not unique): testmods.append(ddash_split) From d82c7b5dde14397e065e0e5815680f6014d2b0cc Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 15 Feb 2024 12:41:36 -0700 Subject: [PATCH 6/7] Make dir for FATESPARAMFILE if needed. --- .../clm/_scripts/get_fates_shell_commands_vars.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh b/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh index 8a31a6b996..382fb4e53e 100755 --- a/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh +++ b/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh @@ -4,6 +4,8 @@ CASE=`./xmlquery CASE --value` FATESDIR="${SRCROOT}/src/fates" -FATESPARAMFILE="${SRCROOT}/src/fates/parameter_files/binaries/${CASE}-params.nc" +FATESPARAMDIR="${SRCROOT}/src/fates/parameter_files/binaries" +mkdir -p "${FATESPARAMDIR}" +FATESPARAMFILE="${FATESPARAMDIR}/${CASE}-params.nc" # No exit status because it should be called in the same shell. From 267fe1434cc0351a7c6b2c6f9ca4df0084c97652 Mon Sep 17 00:00:00 2001 From: Ryan Knox Date: Mon, 26 Feb 2024 12:14:11 -0700 Subject: [PATCH 7/7] added python to the call on modify_fates_paramfile.py, needed for izumi --- .../testmods_dirs/clm/FatesColdSeedDisp/shell_commands | 8 ++++---- .../testmods_dirs/clm/FatesColdTwoStream/shell_commands | 2 +- .../FatesColdTwoStreamNoCompFixedBioGeo/shell_commands | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands index 40047b6de5..5d757df0c4 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdSeedDisp/shell_commands @@ -2,7 +2,7 @@ SRCROOT=`./xmlquery SRCROOT --value` . "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh CASE=`./xmlquery CASE --value` -$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 +python $FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_seed_dispersal_fraction --val 0.2 --allpfts +python $FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_seed_dispersal_max_dist --val 2500000 --allpfts +python $FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_seed_dispersal_pdf_scale --val 1e-05 --allpfts +python $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/FatesColdTwoStream/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands index 7c15db42b5..e08703f6a8 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStream/shell_commands @@ -1,3 +1,3 @@ SRCROOT=`./xmlquery SRCROOT --value` . "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh -$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_rad_model --val 2 --allpfts +python $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/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands index 7c15db42b5..e08703f6a8 100644 --- a/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdTwoStreamNoCompFixedBioGeo/shell_commands @@ -1,3 +1,3 @@ SRCROOT=`./xmlquery SRCROOT --value` . "${SRCROOT}"/cime_config/testdefs/testmods_dirs/clm/_scripts/get_fates_shell_commands_vars.sh -$FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_rad_model --val 2 --allpfts +python $FATESDIR/tools/modify_fates_paramfile.py --O --fin $FATESPARAMFILE --fout $FATESPARAMFILE --var fates_rad_model --val 2 --allpfts