diff --git a/branch/rljacob/docs/update-testing/html/.buildinfo b/branch/rljacob/docs/update-testing/html/.buildinfo new file mode 100644 index 00000000000..988fcd3d192 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 59a70d6cd69f70c7bf67975447c10eae +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/branch/rljacob/docs/update-testing/html/.nojekyll b/branch/rljacob/docs/update-testing/html/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.BuildTools.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.BuildTools.html new file mode 100644 index 00000000000..bae978f8b6f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.BuildTools.html @@ -0,0 +1,225 @@ + + + + + + + CIME.BuildTools package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.BuildTools package

+
+

Submodules

+
+
+

CIME.BuildTools.configure module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.Servers.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.Servers.html new file mode 100644 index 00000000000..af7a513e5e8 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.Servers.html @@ -0,0 +1,237 @@ + + + + + + + CIME.Servers package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.Servers package

+
+

Submodules

+
+
+

CIME.Servers.ftp module

+
+
+

CIME.Servers.generic_server module

+
+
+

CIME.Servers.gftp module

+
+
+

CIME.Servers.svn module

+
+
+

CIME.Servers.wget module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.SystemTests.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.SystemTests.html new file mode 100644 index 00000000000..0bfe1f0b752 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.SystemTests.html @@ -0,0 +1,346 @@ + + + + + + + CIME.SystemTests package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.SystemTests package

+
+

Subpackages

+ +
+
+

Submodules

+
+
+

CIME.SystemTests.dae module

+
+
+

CIME.SystemTests.eri module

+
+
+

CIME.SystemTests.erio module

+
+
+

CIME.SystemTests.erp module

+
+
+

CIME.SystemTests.err module

+
+
+

CIME.SystemTests.erri module

+
+
+

CIME.SystemTests.ers module

+
+
+

CIME.SystemTests.ers2 module

+
+
+

CIME.SystemTests.ert module

+
+
+

CIME.SystemTests.funit module

+
+
+

CIME.SystemTests.homme module

+
+
+

CIME.SystemTests.hommebaseclass module

+
+
+

CIME.SystemTests.hommebfb module

+
+
+

CIME.SystemTests.icp module

+
+
+

CIME.SystemTests.irt module

+
+
+

CIME.SystemTests.ldsta module

+
+
+

CIME.SystemTests.mcc module

+
+
+

CIME.SystemTests.mvk module

+
+
+

CIME.SystemTests.nck module

+
+
+

CIME.SystemTests.ncr module

+
+
+

CIME.SystemTests.nodefail module

+
+
+

CIME.SystemTests.pea module

+
+
+

CIME.SystemTests.pem module

+
+
+

CIME.SystemTests.pet module

+
+
+

CIME.SystemTests.pfs module

+
+
+

CIME.SystemTests.pgn module

+
+
+

CIME.SystemTests.pre module

+
+
+

CIME.SystemTests.rep module

+
+
+

CIME.SystemTests.restart_tests module

+
+
+

CIME.SystemTests.reuseinitfiles module

+
+
+

CIME.SystemTests.seq module

+
+
+

CIME.SystemTests.sms module

+
+
+

CIME.SystemTests.system_tests_common module

+
+
+

CIME.SystemTests.system_tests_compare_n module

+
+
+

CIME.SystemTests.system_tests_compare_two module

+
+
+

CIME.SystemTests.tsc module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.SystemTests.test_utils.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.SystemTests.test_utils.html new file mode 100644 index 00000000000..2b5be87f6aa --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.SystemTests.test_utils.html @@ -0,0 +1,251 @@ + + + + + + + CIME.SystemTests.test_utils package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.SystemTests.test_utils package

+
+

Submodules

+
+
+

CIME.SystemTests.test_utils.user_nl_utils module

+

This module contains functions for working with user_nl files in system tests.

+
+
+CIME.SystemTests.test_utils.user_nl_utils.append_to_user_nl_files(caseroot, component, contents)[source]
+

Append the string(s) given by ‘contents’ to the end of each user_nl file for +the given component (there may be multiple such user_nl files in the case of +a multi-instance test).

+

Also puts new lines before and after the appended text - so ‘contents’ +does not need to contain a trailing new line (but it’s also okay if it +does).

+
+
Args:

caseroot (str): Full path to the case directory

+
+
component (str): Name of component (e.g., ‘clm’). This is used to

determine which user_nl files are appended to. For example, for +component=’clm’, this function will operate on all user_nl files +matching the pattern ‘user_nl_clm*’. (We do a wildcard match to +handle multi-instance tests.)

+
+
contents (str or list-like): Contents to append to the end of each user_nl

file. If list-like, each item will be appended on its own line.

+
+
+
+
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.Tools.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.Tools.html new file mode 100644 index 00000000000..8ed446fe12f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.Tools.html @@ -0,0 +1,231 @@ + + + + + + + CIME.Tools package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.Tools package

+
+

Submodules

+
+
+

CIME.Tools.generate_cylc_workflow module

+
+
+

CIME.Tools.standard_script_setup module

+
+
+

CIME.Tools.testreporter module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.XML.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.XML.html new file mode 100644 index 00000000000..95c962c9b4b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.XML.html @@ -0,0 +1,321 @@ + + + + + + + CIME.XML package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.XML package

+
+

Submodules

+
+
+

CIME.XML.archive module

+
+
+

CIME.XML.archive_base module

+
+
+

CIME.XML.batch module

+
+
+

CIME.XML.component module

+
+
+

CIME.XML.compsets module

+
+
+

CIME.XML.entry_id module

+
+
+

CIME.XML.env_archive module

+
+
+

CIME.XML.env_base module

+
+
+

CIME.XML.env_batch module

+
+
+

CIME.XML.env_build module

+
+
+

CIME.XML.env_case module

+
+
+

CIME.XML.env_mach_pes module

+
+
+

CIME.XML.env_mach_specific module

+
+
+

CIME.XML.env_run module

+
+
+

CIME.XML.env_test module

+
+
+

CIME.XML.env_workflow module

+
+
+

CIME.XML.expected_fails_file module

+
+
+

CIME.XML.files module

+
+
+

CIME.XML.generic_xml module

+
+
+

CIME.XML.grids module

+
+
+

CIME.XML.headers module

+
+
+

CIME.XML.inputdata module

+
+
+

CIME.XML.machines module

+
+
+

CIME.XML.namelist_definition module

+
+
+

CIME.XML.pes module

+
+
+

CIME.XML.pio module

+
+
+

CIME.XML.standard_module_setup module

+
+
+

CIME.XML.stream module

+
+
+

CIME.XML.test_reporter module

+
+
+

CIME.XML.testlist module

+
+
+

CIME.XML.tests module

+
+
+

CIME.XML.testspec module

+
+
+

CIME.XML.workflow module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.baselines.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.baselines.html new file mode 100644 index 00000000000..e6e3b9022df --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.baselines.html @@ -0,0 +1,225 @@ + + + + + + + CIME.baselines package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.baselines package

+
+

Submodules

+
+
+

CIME.baselines.performance module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.build_scripts.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.build_scripts.html new file mode 100644 index 00000000000..dce8e6a5522 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.build_scripts.html @@ -0,0 +1,219 @@ + + + + + + + CIME.build_scripts package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.build_scripts package

+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.case.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.case.html new file mode 100644 index 00000000000..d474da1df96 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.case.html @@ -0,0 +1,255 @@ + + + + + + + CIME.case package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.case package

+
+

Submodules

+
+
+

CIME.case.case module

+
+
+

CIME.case.case_clone module

+
+
+

CIME.case.case_cmpgen_namelists module

+
+
+

CIME.case.case_run module

+
+
+

CIME.case.case_setup module

+
+
+

CIME.case.case_st_archive module

+
+
+

CIME.case.case_submit module

+
+
+

CIME.case.case_test module

+
+
+

CIME.case.check_input_data module

+
+
+

CIME.case.check_lockedfiles module

+
+
+

CIME.case.preview_namelists module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.config.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.config.html new file mode 100644 index 00000000000..d2198bdc2b5 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.config.html @@ -0,0 +1,220 @@ + + + + + + + CIME.data.config package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.data.config package

+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.html new file mode 100644 index 00000000000..e9b9c20259a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.html @@ -0,0 +1,234 @@ + + + + + + + CIME.data package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.data package

+
+

Subpackages

+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.templates.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.templates.html new file mode 100644 index 00000000000..4833302c58a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.data.templates.html @@ -0,0 +1,220 @@ + + + + + + + CIME.data.templates package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.data.templates package

+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.html new file mode 100644 index 00000000000..0256f7fea15 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.html @@ -0,0 +1,600 @@ + + + + + + + CIME package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME package

+
+

Subpackages

+
+ +
+
+
+

Submodules

+
+
+

CIME.aprun module

+
+
+

CIME.bless_test_results module

+
+
+

CIME.build module

+
+
+

CIME.buildlib module

+
+
+

CIME.buildnml module

+
+
+

CIME.code_checker module

+
+
+

CIME.compare_namelists module

+
+
+

CIME.compare_test_results module

+
+
+

CIME.config module

+
+
+

CIME.cs_status module

+
+
+

CIME.cs_status_creator module

+
+
+

CIME.date module

+
+
+

CIME.expected_fails module

+
+
+

CIME.get_tests module

+
+
+

CIME.get_timing module

+
+
+

CIME.hist_utils module

+
+
+

CIME.jenkins_generic_job module

+
+
+

CIME.locked_files module

+
+
+

CIME.namelist module

+
+
+

CIME.nmlgen module

+
+
+

CIME.provenance module

+
+
+

CIME.simple_compare module

+
+
+

CIME.test_scheduler module

+
+
+

CIME.test_status module

+
+
+

CIME.test_utils module

+
+
+

CIME.user_mod_support module

+
+
+

CIME.utils module

+
+
+

CIME.wait_for_tests module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.scripts.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.scripts.html new file mode 100644 index 00000000000..37c22053a0b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.scripts.html @@ -0,0 +1,237 @@ + + + + + + + CIME.scripts package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.scripts package

+
+

Submodules

+
+
+

CIME.scripts.create_clone module

+
+
+

CIME.scripts.create_newcase module

+
+
+

CIME.scripts.create_test module

+
+
+

CIME.scripts.query_config module

+
+
+

CIME.scripts.query_testlists module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/CIME.tests.html b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.tests.html new file mode 100644 index 00000000000..cc44a78f57b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/CIME.tests.html @@ -0,0 +1,697 @@ + + + + + + + CIME.tests package — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME.tests package

+
+

Submodules

+
+
+

CIME.tests.base module

+
+
+

CIME.tests.case_fake module

+

This module contains a fake implementation of the Case class that can be used +for testing the tests.

+
+
+class CIME.tests.case_fake.CaseFake(case_root, create_case_root=True)[source]
+

Bases: object

+
+
+case_setup(clean=False, test_mode=False, reset=False)[source]
+
+ +
+
+copy(newcasename, newcaseroot)[source]
+

Create and return a copy of self, but with CASE and CASEBASEID set to newcasename, +CASEROOT set to newcaseroot, and RUNDIR set appropriately.

+
+
Args:

newcasename (str): new value for CASE +newcaseroot (str): new value for CASEROOT

+
+
+
+ +
+
+create_clone(newcase, keepexe=False, mach_dir=None, project=None, cime_output_root=None, exeroot=None, rundir=None)[source]
+

Create a clone of the current case. Also creates the CASEROOT directory +for the clone case (given by newcase).

+
+
Args:
+
newcase (str): full path to the new case. This directory should not

already exist; it will be created

+
+
+

keepexe (bool, optional): Ignored +mach_dir (str, optional): Ignored +project (str, optional): Ignored +cime_output_root (str, optional): New CIME_OUTPUT_ROOT for the clone +exeroot (str, optional): New EXEROOT for the clone +rundir (str, optional): New RUNDIR for the clone

+
+
+

Returns the clone case object

+
+ +
+
+flush()[source]
+
+ +
+
+get_value(item)[source]
+

Get the value of the given item

+

Returns None if item isn’t set for this case

+
+
Args:

item (str): variable of interest

+
+
+
+ +
+
+load_env(reset=False)[source]
+
+ +
+
+make_rundir()[source]
+

Make directory given by RUNDIR

+
+ +
+
+set_exeroot()[source]
+

Assumes CASEROOT is already set; sets an appropriate EXEROOT +(nested inside CASEROOT)

+
+ +
+
+set_initial_test_values()[source]
+
+ +
+
+set_rundir()[source]
+

Assumes CASEROOT is already set; sets an appropriate RUNDIR (nested +inside CASEROOT)

+
+ +
+
+set_value(item, value)[source]
+

Set the value of the given item to the given value

+
+
Args:

item (str): variable of interest +value (any type): new value for item

+
+
+
+ +
+ +
+
+

CIME.tests.custom_assertions_test_status module

+
+
+

CIME.tests.scripts_regression_tests module

+
+
+

CIME.tests.test_sys_bless_tests_results module

+
+
+

CIME.tests.test_sys_build_system module

+
+
+

CIME.tests.test_sys_cime_case module

+
+
+

CIME.tests.test_sys_cime_performance module

+
+
+

CIME.tests.test_sys_create_newcase module

+
+
+

CIME.tests.test_sys_full_system module

+
+
+

CIME.tests.test_sys_grid_generation module

+
+
+

CIME.tests.test_sys_jenkins_generic_job module

+
+
+

CIME.tests.test_sys_manage_and_query module

+
+
+

CIME.tests.test_sys_query_config module

+
+
+

CIME.tests.test_sys_run_restart module

+
+
+

CIME.tests.test_sys_save_timings module

+
+
+

CIME.tests.test_sys_single_submit module

+
+
+

CIME.tests.test_sys_test_scheduler module

+
+
+

CIME.tests.test_sys_unittest module

+
+
+

CIME.tests.test_sys_user_concurrent_mods module

+
+
+

CIME.tests.test_sys_wait_for_tests module

+
+
+

CIME.tests.test_unit_aprun module

+
+
+

CIME.tests.test_unit_baselines_performance module

+
+
+

CIME.tests.test_unit_bless_test_results module

+
+
+

CIME.tests.test_unit_case module

+
+
+

CIME.tests.test_unit_case_fake module

+

This module contains unit tests of CaseFake

+
+
+class CIME.tests.test_unit_case_fake.TestCaseFake(methodName='runTest')[source]
+

Bases: TestCase

+
+
+setUp()[source]
+

Hook method for setting up the test fixture before exercising it.

+
+ +
+
+tearDown()[source]
+

Hook method for deconstructing the test fixture after testing it.

+
+ +
+
+test_create_clone()[source]
+
+ +
+ +
+
+

CIME.tests.test_unit_case_run module

+
+
+

CIME.tests.test_unit_case_setup module

+
+
+

CIME.tests.test_unit_compare_test_results module

+
+
+

CIME.tests.test_unit_compare_two module

+
+
+

CIME.tests.test_unit_config module

+
+
+

CIME.tests.test_unit_cs_status module

+
+
+

CIME.tests.test_unit_custom_assertions_test_status module

+
+
+

CIME.tests.test_unit_doctest module

+
+
+

CIME.tests.test_unit_expected_fails_file module

+
+
+

CIME.tests.test_unit_grids module

+
+
+

CIME.tests.test_unit_hist_utils module

+
+
+

CIME.tests.test_unit_nmlgen module

+
+
+

CIME.tests.test_unit_paramgen module

+

This module tests some functionality of CIME.ParamGen.paramgen’s ParamGen class

+
+
+class CIME.tests.test_unit_paramgen.DummyCase[source]
+

Bases: object

+

A dummy Case class that mimics CIME class objects’ get_value method.

+
+
+get_value(varname)[source]
+
+ +
+ +
+
+class CIME.tests.test_unit_paramgen.TestParamGen(methodName='runTest')[source]
+

Bases: TestCase

+

Tests some basic functionality of the +CIME.ParamGen.paramgen’s ParamGen class

+
+
+test_expandable_vars()[source]
+

Tests the reduce method of ParamGen expandable vars in guards.

+
+ +
+
+test_formula_expansion()[source]
+

Tests the formula expansion feature of ParamGen.

+
+ +
+
+test_init_data()[source]
+

Tests the ParamGen initializer with and without an initial data.

+
+ +
+
+test_match()[source]
+

Tests the default behavior of returning the last match and the optional behavior of returning the +first match.

+
+ +
+
+test_nested_reduce()[source]
+

Tests the reduce method of ParamGen on data with nested guards.

+
+ +
+
+test_outer_guards()[source]
+

Tests the reduce method on data with outer guards enclosing parameter definitions.

+
+ +
+
+test_reduce()[source]
+

Tests the reduce method of ParamGen on data with explicit guards (True or False).

+
+ +
+
+test_undefined_var()[source]
+

Tests the reduce method of ParamGen on nested guards where an undefined expandable var is specified +below a guard that evaluates to False. The undefined var should not lead to an error since the enclosing +guard evaluates to false.

+
+ +
+ +
+
+class CIME.tests.test_unit_paramgen.TestParamGenXmlConstructor(methodName='runTest')[source]
+

Bases: TestCase

+

A unit test class for testing ParamGen’s xml constructor.

+
+
+test_default_var()[source]
+

Test to check if default val is assigned when all guards eval to False

+
+ +
+
+test_duplicate_entry_error()[source]
+

Test to make sure duplicate ids raise the correct error +when the “no_duplicates” flag is True.

+
+ +
+
+test_mixed_guard()[source]
+

Tests multiple key=value guards mixed with explicit (flexible) guards.

+
+ +
+
+test_mixed_guard_first()[source]
+

Tests multiple key=value guards mixed with explicit (flexible) guards +with match=first option.

+
+ +
+
+test_no_match()[source]
+

Tests an xml entry with no match, i.e., no guards evaluating to True.

+
+ +
+
+test_single_key_val_guard()[source]
+

Test xml entry values with single key=value guards

+
+ +
+ +
+
+class CIME.tests.test_unit_paramgen.TestParamGenYamlConstructor(methodName='runTest')[source]
+

Bases: TestCase

+

A unit test class for testing ParamGen’s yaml constructor.

+
+
+test_input_data_list()[source]
+

Test mom.input_data_list file generation via a subset of original input_data_list.yaml

+
+ +
+
+test_mom_input()[source]
+

Test MOM_input file generation via a subset of original MOM_input.yaml

+
+ +
+ +
+
+

CIME.tests.test_unit_system_tests module

+
+
+

CIME.tests.test_unit_test_status module

+
+ +
+

CIME.tests.test_unit_user_mod_support module

+
+
+

CIME.tests.test_unit_user_nl_utils module

+
+
+class CIME.tests.test_unit_user_nl_utils.TestUserNLCopier(methodName='runTest')[source]
+

Bases: TestCase

+
+
+assertFileContentsEqual(expected, filepath, msg=None)[source]
+

Asserts that the contents of the file given by ‘filepath’ are equal to +the string given by ‘expected’. ‘msg’ gives an optional message to be +printed if the assertion fails.

+
+ +
+
+setUp()[source]
+

Hook method for setting up the test fixture before exercising it.

+
+ +
+
+tearDown()[source]
+

Hook method for deconstructing the test fixture after testing it.

+
+ +
+
+test_append()[source]
+
+ +
+
+test_append_list()[source]
+
+ +
+
+test_append_multiple_files()[source]
+
+ +
+
+test_append_without_files_raises_exception()[source]
+
+ +
+
+write_user_nl_file(component, contents, suffix='')[source]
+

Write contents to a user_nl file in the case directory. Returns the +basename (i.e., not the full path) of the file that is created.

+

For a component foo, with the default suffix of ‘’, the file name will +be user_nl_foo

+

If the suffix is ‘_0001’, the file name will be user_nl_foo_0001

+
+ +
+ +
+
+

CIME.tests.test_unit_utils module

+
+
+

CIME.tests.test_unit_xml_archive_base module

+
+
+

CIME.tests.test_unit_xml_env_batch module

+
+
+

CIME.tests.test_unit_xml_env_mach_specific module

+
+
+

CIME.tests.test_unit_xml_machines module

+
+
+

CIME.tests.test_unit_xml_namelist_definition module

+
+
+

CIME.tests.test_unit_xml_tests module

+
+
+

CIME.tests.utils module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/CIME_api/modules.html b/branch/rljacob/docs/update-testing/html/CIME_api/modules.html new file mode 100644 index 00000000000..8c61dde2fa6 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/CIME_api/modules.html @@ -0,0 +1,410 @@ + + + + + + + CIME — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CIME

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_api/Tools.html b/branch/rljacob/docs/update-testing/html/Tools_api/Tools.html new file mode 100644 index 00000000000..cfc7cdf810d --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_api/Tools.html @@ -0,0 +1,189 @@ + + + + + + + Tools package — CIME master documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Tools package

+
+

Submodules

+
+
+

Tools.generate_cylc_workflow module

+
+
+

Tools.standard_script_setup module

+
+
+

Tools.testreporter module

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_api/modules.html b/branch/rljacob/docs/update-testing/html/Tools_api/modules.html new file mode 100644 index 00000000000..b01cb011f7f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_api/modules.html @@ -0,0 +1,180 @@ + + + + + + + Tools — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/advanced-py-prof.html b/branch/rljacob/docs/update-testing/html/Tools_user/advanced-py-prof.html new file mode 100644 index 00000000000..6bf3f8c4e60 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/advanced-py-prof.html @@ -0,0 +1,235 @@ + + + + + + + advanced-py-prof — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

advanced-py-prof

+

advanced-py-prof is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./advanced-py-prof --help
+Traceback (most recent call last):
+  File "<frozen runpy>", line 198, in _run_module_as_main
+  File "<frozen runpy>", line 88, in _run_code
+  File "/opt/hostedtoolcache/Python/3.12.3/x64/lib/python3.12/cProfile.py", line 195, in <module>
+    main()
+  File "/opt/hostedtoolcache/Python/3.12.3/x64/lib/python3.12/cProfile.py", line 172, in main
+    with io.open_code(progname) as fp:
+         ^^^^^^^^^^^^^^^^^^^^^^
+FileNotFoundError: [Errno 2] No such file or directory: 'basename'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/archive_metadata.html b/branch/rljacob/docs/update-testing/html/Tools_user/archive_metadata.html new file mode 100644 index 00000000000..5ea9ac0a7ba --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/archive_metadata.html @@ -0,0 +1,234 @@ + + + + + + + archive_metadata — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

archive_metadata

+

archive_metadata is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./archive_metadata --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./archive_metadata", line 27, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/bld_diff.html b/branch/rljacob/docs/update-testing/html/Tools_user/bld_diff.html new file mode 100644 index 00000000000..e675d36f9ec --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/bld_diff.html @@ -0,0 +1,234 @@ + + + + + + + bld_diff — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

bld_diff

+

bld_diff is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./bld_diff --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./bld_diff", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/bless_test_results.html b/branch/rljacob/docs/update-testing/html/Tools_user/bless_test_results.html new file mode 100644 index 00000000000..f7fbd618196 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/bless_test_results.html @@ -0,0 +1,234 @@ + + + + + + + bless_test_results — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

bless_test_results

+

bless_test_results is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./bless_test_results --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./bless_test_results", line 11, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/case.build.html b/branch/rljacob/docs/update-testing/html/Tools_user/case.build.html new file mode 100644 index 00000000000..bc06975f639 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/case.build.html @@ -0,0 +1,234 @@ + + + + + + + case.build — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

case.build

+

case.build is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./case.build --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./case.build", line 45, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/case.cmpgen_namelists.html b/branch/rljacob/docs/update-testing/html/Tools_user/case.cmpgen_namelists.html new file mode 100644 index 00000000000..84aaa40f4a3 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/case.cmpgen_namelists.html @@ -0,0 +1,234 @@ + + + + + + + case.cmpgen_namelists — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

case.cmpgen_namelists

+

case.cmpgen_namelists is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./case.cmpgen_namelists --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./case.cmpgen_namelists", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/case.qstatus.html b/branch/rljacob/docs/update-testing/html/Tools_user/case.qstatus.html new file mode 100644 index 00000000000..aa5383cfde9 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/case.qstatus.html @@ -0,0 +1,234 @@ + + + + + + + case.qstatus — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

case.qstatus

+

case.qstatus is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./case.qstatus --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./case.qstatus", line 10, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/case.setup.html b/branch/rljacob/docs/update-testing/html/Tools_user/case.setup.html new file mode 100644 index 00000000000..64914cbe953 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/case.setup.html @@ -0,0 +1,234 @@ + + + + + + + case.setup — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

case.setup

+

case.setup is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./case.setup --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./case.setup", line 19, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/case.submit.html b/branch/rljacob/docs/update-testing/html/Tools_user/case.submit.html new file mode 100644 index 00000000000..7de225d2229 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/case.submit.html @@ -0,0 +1,234 @@ + + + + + + + case.submit — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

case.submit

+

case.submit is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./case.submit --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./case.submit", line 19, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/case_diff.html b/branch/rljacob/docs/update-testing/html/Tools_user/case_diff.html new file mode 100644 index 00000000000..40de35d2818 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/case_diff.html @@ -0,0 +1,234 @@ + + + + + + + case_diff — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

case_diff

+

case_diff is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./case_diff --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./case_diff", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/check_case.html b/branch/rljacob/docs/update-testing/html/Tools_user/check_case.html new file mode 100644 index 00000000000..f4819bfff26 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/check_case.html @@ -0,0 +1,234 @@ + + + + + + + check_case — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

check_case

+

check_case is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./check_case --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./check_case", line 20, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/check_input_data.html b/branch/rljacob/docs/update-testing/html/Tools_user/check_input_data.html new file mode 100644 index 00000000000..c406c8a109c --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/check_input_data.html @@ -0,0 +1,234 @@ + + + + + + + check_input_data — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

check_input_data

+

check_input_data is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./check_input_data --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./check_input_data", line 21, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/check_lockedfiles.html b/branch/rljacob/docs/update-testing/html/Tools_user/check_lockedfiles.html new file mode 100644 index 00000000000..1832569b286 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/check_lockedfiles.html @@ -0,0 +1,234 @@ + + + + + + + check_lockedfiles — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

check_lockedfiles

+

check_lockedfiles is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./check_lockedfiles --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./check_lockedfiles", line 6, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/cime_bisect.html b/branch/rljacob/docs/update-testing/html/Tools_user/cime_bisect.html new file mode 100644 index 00000000000..16d4b6745cb --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/cime_bisect.html @@ -0,0 +1,234 @@ + + + + + + + cime_bisect — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

cime_bisect

+

cime_bisect is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./cime_bisect --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./cime_bisect", line 12, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/code_checker.html b/branch/rljacob/docs/update-testing/html/Tools_user/code_checker.html new file mode 100644 index 00000000000..bb7d8b62c10 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/code_checker.html @@ -0,0 +1,234 @@ + + + + + + + code_checker — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

code_checker

+

code_checker is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./code_checker --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./code_checker", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/compare_namelists.html b/branch/rljacob/docs/update-testing/html/Tools_user/compare_namelists.html new file mode 100644 index 00000000000..c5e9ce13c5c --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/compare_namelists.html @@ -0,0 +1,234 @@ + + + + + + + compare_namelists — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

compare_namelists

+

compare_namelists is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./compare_namelists --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./compare_namelists", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/compare_test_results.html b/branch/rljacob/docs/update-testing/html/Tools_user/compare_test_results.html new file mode 100644 index 00000000000..a6fee4015c5 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/compare_test_results.html @@ -0,0 +1,234 @@ + + + + + + + compare_test_results — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

compare_test_results

+

compare_test_results is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./compare_test_results --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./compare_test_results", line 24, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_baseline.html b/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_baseline.html new file mode 100644 index 00000000000..2138c1be9c2 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_baseline.html @@ -0,0 +1,234 @@ + + + + + + + component_compare_baseline — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

component_compare_baseline

+

component_compare_baseline is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./component_compare_baseline --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./component_compare_baseline", line 7, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_copy.html b/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_copy.html new file mode 100644 index 00000000000..7f59957e5f9 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_copy.html @@ -0,0 +1,234 @@ + + + + + + + component_compare_copy — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

component_compare_copy

+

component_compare_copy is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./component_compare_copy --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./component_compare_copy", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_test.html b/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_test.html new file mode 100644 index 00000000000..9f3df1aa298 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/component_compare_test.html @@ -0,0 +1,234 @@ + + + + + + + component_compare_test — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

component_compare_test

+

component_compare_test is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./component_compare_test --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./component_compare_test", line 7, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/component_generate_baseline.html b/branch/rljacob/docs/update-testing/html/Tools_user/component_generate_baseline.html new file mode 100644 index 00000000000..107757688c4 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/component_generate_baseline.html @@ -0,0 +1,234 @@ + + + + + + + component_generate_baseline — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

component_generate_baseline

+

component_generate_baseline is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./component_generate_baseline --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./component_generate_baseline", line 7, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/concat_daily_hist.csh.html b/branch/rljacob/docs/update-testing/html/Tools_user/concat_daily_hist.csh.html new file mode 100644 index 00000000000..c0209be6013 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/concat_daily_hist.csh.html @@ -0,0 +1,227 @@ + + + + + + + concat_daily_hist.csh — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

concat_daily_hist.csh

+

concat_daily_hist.csh is a script in CIMEROOT/CIME/Tools.

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/create_clone.html b/branch/rljacob/docs/update-testing/html/Tools_user/create_clone.html new file mode 100644 index 00000000000..9821fb7a498 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/create_clone.html @@ -0,0 +1,236 @@ + + + + + + + create_clone — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

create_clone

+

create_clone is a script in CIMEROOT/scripts.

+
+
+
$ ./create_clone --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/scripts/./create_clone", line 15, in <module>
+    from CIME.scripts.create_clone import _main_func
+  File "/home/runner/work/cime/cime/CIME/scripts/create_clone.py", line 3, in <module>
+    from CIME.Tools.standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/create_newcase.html b/branch/rljacob/docs/update-testing/html/Tools_user/create_newcase.html new file mode 100644 index 00000000000..b0c69969ba4 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/create_newcase.html @@ -0,0 +1,236 @@ + + + + + + + create_newcase — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

create_newcase

+

create_newcase is a script in CIMEROOT/scripts.

+
+
+
$ ./create_newcase --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/scripts/./create_newcase", line 15, in <module>
+    from CIME.scripts.create_newcase import _main_func
+  File "/home/runner/work/cime/cime/CIME/scripts/create_newcase.py", line 9, in <module>
+    from CIME.Tools.standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/create_test.html b/branch/rljacob/docs/update-testing/html/Tools_user/create_test.html new file mode 100644 index 00000000000..6aaec81be2d --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/create_test.html @@ -0,0 +1,236 @@ + + + + + + + create_test — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

create_test

+

create_test is a script in CIMEROOT/scripts.

+
+
+
$ ./create_test --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/scripts/./create_test", line 15, in <module>
+    from CIME.scripts.create_test import _main_func
+  File "/home/runner/work/cime/cime/CIME/scripts/create_test.py", line 29, in <module>
+    from CIME.Tools.standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/cs.status.html b/branch/rljacob/docs/update-testing/html/Tools_user/cs.status.html new file mode 100644 index 00000000000..afd9b5de56e --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/cs.status.html @@ -0,0 +1,234 @@ + + + + + + + cs.status — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

cs.status

+

cs.status is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./cs.status --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./cs.status", line 11, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/e3sm_check_env.html b/branch/rljacob/docs/update-testing/html/Tools_user/e3sm_check_env.html new file mode 100644 index 00000000000..48ec042c694 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/e3sm_check_env.html @@ -0,0 +1,234 @@ + + + + + + + e3sm_check_env — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

e3sm_check_env

+

e3sm_check_env is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./e3sm_check_env --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./e3sm_check_env", line 9, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/generate_cylc_workflow.py.html b/branch/rljacob/docs/update-testing/html/Tools_user/generate_cylc_workflow.py.html new file mode 100644 index 00000000000..77e779d3c8d --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/generate_cylc_workflow.py.html @@ -0,0 +1,234 @@ + + + + + + + generate_cylc_workflow.py — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

generate_cylc_workflow.py

+

generate_cylc_workflow.py is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./generate_cylc_workflow.py --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./generate_cylc_workflow.py", line 11, in <module>
+    from CIME.Tools.standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/getTiming.html b/branch/rljacob/docs/update-testing/html/Tools_user/getTiming.html new file mode 100644 index 00000000000..3c418c56592 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/getTiming.html @@ -0,0 +1,234 @@ + + + + + + + getTiming — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

getTiming

+

getTiming is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./getTiming --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./getTiming", line 6, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/get_case_env.html b/branch/rljacob/docs/update-testing/html/Tools_user/get_case_env.html new file mode 100644 index 00000000000..5e24370a00f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/get_case_env.html @@ -0,0 +1,234 @@ + + + + + + + get_case_env — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

get_case_env

+

get_case_env is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./get_case_env --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./get_case_env", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/get_standard_makefile_args.html b/branch/rljacob/docs/update-testing/html/Tools_user/get_standard_makefile_args.html new file mode 100644 index 00000000000..3959a5a2ab5 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/get_standard_makefile_args.html @@ -0,0 +1,234 @@ + + + + + + + get_standard_makefile_args — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

get_standard_makefile_args

+

get_standard_makefile_args is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./get_standard_makefile_args --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./get_standard_makefile_args", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/index.html b/branch/rljacob/docs/update-testing/html/Tools_user/index.html new file mode 100644 index 00000000000..81e5f9c73c6 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/index.html @@ -0,0 +1,274 @@ + + + + + + + User Tools — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/jenkins_generic_job.html b/branch/rljacob/docs/update-testing/html/Tools_user/jenkins_generic_job.html new file mode 100644 index 00000000000..27287020ec8 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/jenkins_generic_job.html @@ -0,0 +1,234 @@ + + + + + + + jenkins_generic_job — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

jenkins_generic_job

+

jenkins_generic_job is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./jenkins_generic_job --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./jenkins_generic_job", line 10, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/list_e3sm_tests.html b/branch/rljacob/docs/update-testing/html/Tools_user/list_e3sm_tests.html new file mode 100644 index 00000000000..0101b1a3f36 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/list_e3sm_tests.html @@ -0,0 +1,234 @@ + + + + + + + list_e3sm_tests — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

list_e3sm_tests

+

list_e3sm_tests is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./list_e3sm_tests --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./list_e3sm_tests", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/mkDepends.html b/branch/rljacob/docs/update-testing/html/Tools_user/mkDepends.html new file mode 100644 index 00000000000..8c8ae9de8c4 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/mkDepends.html @@ -0,0 +1,260 @@ + + + + + + + mkDepends — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

mkDepends

+

mkDepends is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./mkDepends --help
+SYNOPSIS
+     mkDepends [-p [-Dmacro[=val]] [-Umacro] [-Idir]] [-d depfile]
+               [-m mangle_scheme] [-t dir] [-w] Filepath Srcfiles
+OPTIONS
+     -p
+          Preprocess files (suffix .F and .F90) before  searching
+	  for module dependencies. Default CPP preprocessor: cpp.
+	  Set env variables CPP and/or CPPFLAGS to override.
+     -D macro[=val]
+          Define the CPP macro with val as its value.
+	  Ignored when -p option is not active.
+     -U macro
+          Undefine the CPP macro.
+	  Ignored when -p option is not active.
+     -I dir
+          Add dir to the include path for CPP.
+	  Ignored when -p option is not active.
+     -d depfile
+          Additional file to be added to every .o dependence.
+     -m mangle_scheme
+          Method of mangling Fortran module names into .mod filenames.
+          Allowed values are:
+              lower - Filename is module_name.mod
+              upper - Filename is MODULE_NAME.MOD
+          The default is -m lower.
+     -t dir
+          Target directory.  If this option is set the .o files that are
+          targets in the dependency rules have the form dir/file.o.
+     -w   Print warnings to STDERR about files or dependencies not found.
+ARGUMENTS
+     Filepath is the name of a file containing the directories (one per
+     line) to be searched for dependencies.  Srcfiles is the name of a
+     file containing the names of files (one per line) for which
+     dependencies will be generated.
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/mkSrcfiles.html b/branch/rljacob/docs/update-testing/html/Tools_user/mkSrcfiles.html new file mode 100644 index 00000000000..86e9a9c05ae --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/mkSrcfiles.html @@ -0,0 +1,234 @@ + + + + + + + mkSrcfiles — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

mkSrcfiles

+

mkSrcfiles is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./mkSrcfiles --help
+SYNOPSIS
+     mkSrcfiles
+DESCRIPTION
+     The mkSrcfiles utility assumes the existence of an input file
+     ./Filepath, and writes an output file ./Srcfiles that contains
+     the names of all the files that match the patterns *.F90, *.F,
+     and *.c in all the directories from ./Filepath plus ./.  The
+     files are listed one per line.
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/mvsource.html b/branch/rljacob/docs/update-testing/html/Tools_user/mvsource.html new file mode 100644 index 00000000000..00bb843ec6e --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/mvsource.html @@ -0,0 +1,231 @@ + + + + + + + mvsource — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

mvsource

+

mvsource is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./mvsource --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./mvsource", line 8, in <module>
+    cimeroot = sys.argv[2]
+               ~~~~~~~~^^^
+IndexError: list index out of range
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/normalize_cases.html b/branch/rljacob/docs/update-testing/html/Tools_user/normalize_cases.html new file mode 100644 index 00000000000..8bde36e909c --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/normalize_cases.html @@ -0,0 +1,234 @@ + + + + + + + normalize_cases — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

normalize_cases

+

normalize_cases is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./normalize_cases --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./normalize_cases", line 11, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/pelayout.html b/branch/rljacob/docs/update-testing/html/Tools_user/pelayout.html new file mode 100644 index 00000000000..d33f7058f8f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/pelayout.html @@ -0,0 +1,234 @@ + + + + + + + pelayout — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

pelayout

+

pelayout is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./pelayout --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./pelayout", line 41, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/preview_namelists.html b/branch/rljacob/docs/update-testing/html/Tools_user/preview_namelists.html new file mode 100644 index 00000000000..7d4171c7984 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/preview_namelists.html @@ -0,0 +1,234 @@ + + + + + + + preview_namelists — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

preview_namelists

+

preview_namelists is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./preview_namelists --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./preview_namelists", line 18, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/preview_run.html b/branch/rljacob/docs/update-testing/html/Tools_user/preview_run.html new file mode 100644 index 00000000000..16fffd0a164 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/preview_run.html @@ -0,0 +1,234 @@ + + + + + + + preview_run — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

preview_run

+

preview_run is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./preview_run --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./preview_run", line 19, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/query_config.html b/branch/rljacob/docs/update-testing/html/Tools_user/query_config.html new file mode 100644 index 00000000000..af435abe5ef --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/query_config.html @@ -0,0 +1,236 @@ + + + + + + + query_config — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

query_config

+

query_config is a script in CIMEROOT/scripts.

+
+
+
$ ./query_config --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/scripts/./query_config", line 15, in <module>
+    from CIME.scripts.query_config import _main_func
+  File "/home/runner/work/cime/cime/CIME/scripts/query_config.py", line 9, in <module>
+    from CIME.Tools.standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/query_testlists.html b/branch/rljacob/docs/update-testing/html/Tools_user/query_testlists.html new file mode 100644 index 00000000000..453c7bc6251 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/query_testlists.html @@ -0,0 +1,236 @@ + + + + + + + query_testlists — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

query_testlists

+

query_testlists is a script in CIMEROOT/scripts.

+
+
+
$ ./query_testlists --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/scripts/./query_testlists", line 15, in <module>
+    from CIME.scripts.query_testlists import _main_func
+  File "/home/runner/work/cime/cime/CIME/scripts/query_testlists.py", line 17, in <module>
+    from CIME.Tools.standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/save_provenance.html b/branch/rljacob/docs/update-testing/html/Tools_user/save_provenance.html new file mode 100644 index 00000000000..c91445f8161 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/save_provenance.html @@ -0,0 +1,234 @@ + + + + + + + save_provenance — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

save_provenance

+

save_provenance is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./save_provenance --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./save_provenance", line 7, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/simple-py-prof.html b/branch/rljacob/docs/update-testing/html/Tools_user/simple-py-prof.html new file mode 100644 index 00000000000..011e8bf8a7e --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/simple-py-prof.html @@ -0,0 +1,235 @@ + + + + + + + simple-py-prof — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

simple-py-prof

+

simple-py-prof is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./simple-py-prof --help
+Usage: cProfile.py [-o output_file_path] [-s sort] [-m module | scriptfile] [arg] ...
+
+Options:
+  -h, --help            show this help message and exit
+  -o OUTFILE, --outfile=OUTFILE
+                        Save stats to <outfile>
+  -s SORT, --sort=SORT  Sort order when printing to stdout, based on
+                        pstats.Stats class
+  -m                    Profile a library module
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/simple_compare.html b/branch/rljacob/docs/update-testing/html/Tools_user/simple_compare.html new file mode 100644 index 00000000000..99269e2374a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/simple_compare.html @@ -0,0 +1,234 @@ + + + + + + + simple_compare — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

simple_compare

+

simple_compare is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./simple_compare --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./simple_compare", line 8, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/testreporter.py.html b/branch/rljacob/docs/update-testing/html/Tools_user/testreporter.py.html new file mode 100644 index 00000000000..79368d69400 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/testreporter.py.html @@ -0,0 +1,234 @@ + + + + + + + testreporter.py — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

testreporter.py

+

testreporter.py is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./testreporter.py --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./testreporter.py", line 11, in <module>
+    from CIME.Tools.standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/wait_for_tests.html b/branch/rljacob/docs/update-testing/html/Tools_user/wait_for_tests.html new file mode 100644 index 00000000000..5156a3dc970 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/wait_for_tests.html @@ -0,0 +1,234 @@ + + + + + + + wait_for_tests — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

wait_for_tests

+

wait_for_tests is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./wait_for_tests --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./wait_for_tests", line 11, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/xmlchange.html b/branch/rljacob/docs/update-testing/html/Tools_user/xmlchange.html new file mode 100644 index 00000000000..dff51da036a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/xmlchange.html @@ -0,0 +1,234 @@ + + + + + + + xmlchange — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

xmlchange

+

xmlchange is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./xmlchange --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./xmlchange", line 49, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/xmlquery.html b/branch/rljacob/docs/update-testing/html/Tools_user/xmlquery.html new file mode 100644 index 00000000000..f4b55bb39e6 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/xmlquery.html @@ -0,0 +1,234 @@ + + + + + + + xmlquery — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

xmlquery

+

xmlquery is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./xmlquery --help
+Traceback (most recent call last):
+  File "/home/runner/work/cime/cime/CIME/Tools/./xmlquery", line 100, in <module>
+    from standard_script_setup import *
+  File "/home/runner/work/cime/cime/CIME/Tools/standard_script_setup.py", line 42, in <module>
+    import CIME.utils
+  File "/home/runner/work/cime/cime/CIME/utils.py", line 15, in <module>
+    from distutils import file_util
+ModuleNotFoundError: No module named 'distutils'
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/Tools_user/xmltestentry.html b/branch/rljacob/docs/update-testing/html/Tools_user/xmltestentry.html new file mode 100644 index 00000000000..df7e6bb883a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/Tools_user/xmltestentry.html @@ -0,0 +1,228 @@ + + + + + + + xmltestentry — CIME master documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

xmltestentry

+

xmltestentry is a script in CIMEROOT/CIME/Tools.

+
+
+
$ ./xmltestentry --help
+Unknown option: help
+Could not open file! at ./xmltestentry line 23.
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/_modules/CIME/SystemTests/test_utils/user_nl_utils.html b/branch/rljacob/docs/update-testing/html/_modules/CIME/SystemTests/test_utils/user_nl_utils.html new file mode 100644 index 00000000000..a2f480c575a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_modules/CIME/SystemTests/test_utils/user_nl_utils.html @@ -0,0 +1,219 @@ + + + + + + CIME.SystemTests.test_utils.user_nl_utils — CIME master documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for CIME.SystemTests.test_utils.user_nl_utils

+"""
+This module contains functions for working with user_nl files in system tests.
+"""
+
+import os
+import glob
+
+
+
+[docs] +def append_to_user_nl_files(caseroot, component, contents): + """ + Append the string(s) given by 'contents' to the end of each user_nl file for + the given component (there may be multiple such user_nl files in the case of + a multi-instance test). + + Also puts new lines before and after the appended text - so 'contents' + does not need to contain a trailing new line (but it's also okay if it + does). + + Args: + caseroot (str): Full path to the case directory + + component (str): Name of component (e.g., 'clm'). This is used to + determine which user_nl files are appended to. For example, for + component='clm', this function will operate on all user_nl files + matching the pattern 'user_nl_clm*'. (We do a wildcard match to + handle multi-instance tests.) + + contents (str or list-like): Contents to append to the end of each user_nl + file. If list-like, each item will be appended on its own line. + """ + + if isinstance(contents, str): + contents = [contents] + + files = _get_list_of_user_nl_files(caseroot, component) + + if len(files) == 0: + raise RuntimeError("No user_nl files found for component " + component) + + for one_file in files: + with open(one_file, "a") as user_nl_file: + user_nl_file.write("\n") + for c in contents: + user_nl_file.write(c + "\n")
+ + + +def _get_list_of_user_nl_files(path, component): + """Get a list of all user_nl files in the current path for the component + of interest. For a component 'foo', we match all files of the form + user_nl_foo* - with a wildcard match at the end in order to match files + in a multi-instance case. + + The list of returned files gives their full path. + """ + + file_pattern = "user_nl_" + component + "*" + file_list = glob.glob(os.path.join(path, file_pattern)) + + return file_list +
+ +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/case_fake.html b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/case_fake.html new file mode 100644 index 00000000000..fe96d06abcd --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/case_fake.html @@ -0,0 +1,346 @@ + + + + + + CIME.tests.case_fake — CIME master documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for CIME.tests.case_fake

+"""
+This module contains a fake implementation of the Case class that can be used
+for testing the tests.
+"""
+
+import os
+from copy import deepcopy
+
+
+
+[docs] +class CaseFake(object): + def __init__(self, case_root, create_case_root=True): + """ + Initialize a new case object for the given case_root directory. + + Args: + case_root (str): path to CASEROOT + create_case_root (bool): If True, creates the directory given by case_root + """ + self.vars = dict() + if create_case_root: + os.makedirs(case_root) + self.set_value("CASEROOT", case_root) + casename = os.path.basename(case_root) + # Typically, CIME_OUTPUT_ROOT is independent of the case. Here, + # we nest it under CASEROOT so that (1) tests don't interfere + # with each other; (2) a cleanup that removes CASEROOT will also + # remove CIME_OUTPUT_ROOT. + self.set_value("CIME_OUTPUT_ROOT", os.path.join(case_root, "CIME_OUTPUT_ROOT")) + self.set_value("CASE", casename) + self.set_value("CASEBASEID", casename) + self.set_value("RUN_TYPE", "startup") + self.set_exeroot() + self.set_rundir() + +
+[docs] + def set_initial_test_values(self): + pass
+ + +
+[docs] + def get_value(self, item): + """ + Get the value of the given item + + Returns None if item isn't set for this case + + Args: + item (str): variable of interest + """ + return self.vars.get(item)
+ + +
+[docs] + def set_value(self, item, value): + """ + Set the value of the given item to the given value + + Args: + item (str): variable of interest + value (any type): new value for item + """ + self.vars[item] = value
+ + +
+[docs] + def copy(self, newcasename, newcaseroot): + """ + Create and return a copy of self, but with CASE and CASEBASEID set to newcasename, + CASEROOT set to newcaseroot, and RUNDIR set appropriately. + + Args: + newcasename (str): new value for CASE + newcaseroot (str): new value for CASEROOT + """ + newcase = deepcopy(self) + newcase.set_value("CASE", newcasename) + newcase.set_value("CASEBASEID", newcasename) + newcase.set_value("CASEROOT", newcaseroot) + newcase.set_exeroot() + newcase.set_rundir() + + return newcase
+ + +
+[docs] + def create_clone( + self, + newcase, + keepexe=False, + mach_dir=None, + project=None, + cime_output_root=None, + exeroot=None, + rundir=None, + ): + # Need to disable unused-argument checking: keepexe is needed to match + # the interface of Case, but is not used in this fake implementation + # + # pylint: disable=unused-argument + """ + Create a clone of the current case. Also creates the CASEROOT directory + for the clone case (given by newcase). + + Args: + newcase (str): full path to the new case. This directory should not + already exist; it will be created + keepexe (bool, optional): Ignored + mach_dir (str, optional): Ignored + project (str, optional): Ignored + cime_output_root (str, optional): New CIME_OUTPUT_ROOT for the clone + exeroot (str, optional): New EXEROOT for the clone + rundir (str, optional): New RUNDIR for the clone + + Returns the clone case object + """ + newcaseroot = os.path.abspath(newcase) + newcasename = os.path.basename(newcase) + os.makedirs(newcaseroot) + clone = self.copy(newcasename=newcasename, newcaseroot=newcaseroot) + if cime_output_root is not None: + clone.set_value("CIME_OUTPUT_ROOT", cime_output_root) + if exeroot is not None: + clone.set_value("EXEROOT", exeroot) + if rundir is not None: + clone.set_value("RUNDIR", rundir) + + return clone
+ + +
+[docs] + def flush(self): + pass
+ + +
+[docs] + def make_rundir(self): + """ + Make directory given by RUNDIR + """ + os.makedirs(self.get_value("RUNDIR"))
+ + +
+[docs] + def set_exeroot(self): + """ + Assumes CASEROOT is already set; sets an appropriate EXEROOT + (nested inside CASEROOT) + """ + self.set_value("EXEROOT", os.path.join(self.get_value("CASEROOT"), "bld"))
+ + +
+[docs] + def set_rundir(self): + """ + Assumes CASEROOT is already set; sets an appropriate RUNDIR (nested + inside CASEROOT) + """ + self.set_value("RUNDIR", os.path.join(self.get_value("CASEROOT"), "run"))
+ + +
+[docs] + def case_setup(self, clean=False, test_mode=False, reset=False): + pass
+ + +
+[docs] + def load_env(self, reset=False): + pass
+ + + def __enter__(self): + pass + + def __exit__(self, *_): + pass
+ +
+ +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_case_fake.html b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_case_fake.html new file mode 100644 index 00000000000..38f6aea4e86 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_case_fake.html @@ -0,0 +1,210 @@ + + + + + + CIME.tests.test_unit_case_fake — CIME master documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for CIME.tests.test_unit_case_fake

+#!/usr/bin/env python3
+
+"""
+This module contains unit tests of CaseFake
+"""
+
+import unittest
+import tempfile
+import os
+import shutil
+
+from CIME.tests.case_fake import CaseFake
+
+
+
+[docs] +class TestCaseFake(unittest.TestCase): +
+[docs] + def setUp(self): + self.tempdir = tempfile.mkdtemp()
+ + +
+[docs] + def tearDown(self): + shutil.rmtree(self.tempdir, ignore_errors=True)
+ + +
+[docs] + def test_create_clone(self): + # Setup + old_caseroot = os.path.join(self.tempdir, "oldcase") + oldcase = CaseFake(old_caseroot) + oldcase.set_value("foo", "bar") + + # Exercise + new_caseroot = os.path.join(self.tempdir, "newcase") + clone = oldcase.create_clone(new_caseroot) + + # Verify + self.assertEqual("bar", clone.get_value("foo")) + self.assertEqual("newcase", clone.get_value("CASE")) + self.assertEqual("newcase", clone.get_value("CASEBASEID")) + self.assertEqual(new_caseroot, clone.get_value("CASEROOT")) + self.assertEqual(os.path.join(new_caseroot, "run"), clone.get_value("RUNDIR"))
+
+ + + +if __name__ == "__main__": + unittest.main() +
+ +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_paramgen.html b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_paramgen.html new file mode 100644 index 00000000000..0b671d0b65a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_paramgen.html @@ -0,0 +1,688 @@ + + + + + + CIME.tests.test_unit_paramgen — CIME master documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for CIME.tests.test_unit_paramgen

+#!/usr/bin/env python3
+
+"""
+This module tests *some* functionality of CIME.ParamGen.paramgen's ParamGen class
+"""
+
+# Ignore privacy concerns for unit tests, so that unit tests can access
+# protected members of the system under test
+#
+# pylint:disable=protected-access
+
+# Also ignore too-long lines, since these are common in unit tests
+#
+# pylint:disable=line-too-long
+
+import unittest
+import tempfile
+from CIME.ParamGen.paramgen import ParamGen
+
+###############
+# Example inputs
+###############
+
+_MOM_INPUT_YAML = """
+Global:
+    INPUTDIR:
+        value: ${DIN_LOC_ROOT}/ocn/mom/${OCN_GRID}
+    RESTORE_SALINITY:
+        value:
+            $OCN_GRID == "tx0.66v1" and $COMP_ATM == "datm": True  # for C and G compsets on tx0.66v1
+            else: False
+    INIT_LAYERS_FROM_Z_FILE:
+        value:
+            $OCN_GRID == "gx1v6": True
+            $OCN_GRID == "tx0.66v1": True
+            $OCN_GRID == "tx0.25v1": True
+    TEMP_SALT_Z_INIT_FILE:
+        value:
+            $OCN_GRID == "gx1v6": "WOA05_pottemp_salt.nc"
+            $OCN_GRID == "tx0.66v1": "woa18_04_initial_conditions.nc"
+            $OCN_GRID == "tx0.25v1": "MOM6_IC_TS.nc"
+"""
+
+_MOM_INPUT_DATA_LIST_YAML = """
+mom.input_data_list:
+    ocean_hgrid:
+        $OCN_GRID == "gx1v6":    "${INPUTDIR}/ocean_hgrid.nc"
+        $OCN_GRID == "tx0.66v1": "${INPUTDIR}/ocean_hgrid_180829.nc"
+        $OCN_GRID == "tx0.25v1": "${INPUTDIR}/ocean_hgrid.nc"
+    tempsalt:
+        $OCN_GRID in ["gx1v6", "tx0.66v1", "tx0.25v1"]:
+            $INIT_LAYERS_FROM_Z_FILE == "True":
+                "${INPUTDIR}/${TEMP_SALT_Z_INIT_FILE}"
+"""
+
+_MY_TEMPLATE_XML = """<?xml version="1.0"?>
+
+<entry_id_pg version="0.1">
+
+  <entry id="foo">
+    <type>string</type>
+    <group>test_nml</group>
+    <desc>a dummy parameter for testing single key=value guards</desc>
+    <values>
+      <value>alpha</value>
+      <value cice_mode="thermo_only">beta</value>
+      <value cice_mode="prescribed">gamma</value>
+    </values>
+  </entry>
+
+  <entry id="bar">
+    <type>string</type>
+    <group>test_nml</group>
+    <desc>another dummy parameter for multiple key=value guards mixed with explicit (flexible) guards</desc>
+    <values>
+      <value some_int="2" some_bool="True" some_float="3.1415">delta</value>
+      <value guard='$ICE_GRID .startswith("gx1v")'>epsilon</value>
+    </values>
+  </entry>
+
+  <entry id="baz">
+    <type>string</type>
+    <group>test_nml</group>
+    <desc>parameter to test the case where there is no match</desc>
+    <values>
+      <value some_int="-9999">zeta</value>
+      <value guard='not $ICE_GRID .startswith("gx1v")'>eta</value>
+    </values>
+  </entry>
+
+  </entry_id_pg>
+"""
+
+_DUPLICATE_IDS_XML = """<?xml version="1.0"?>
+
+<entry_id_pg version="0.1">
+
+  <entry id="foo">
+    <type>string</type>
+    <group>test_nml</group>
+    <desc>a dummy parameter for testing single key=value guards</desc>
+    <values>
+      <value>alpha</value>
+      <value cice_mode="thermo_only">beta</value>
+      <value cice_mode="prescribed">gamma</value>
+    </values>
+  </entry>
+
+  <entry id="foo">
+    <type>string</type>
+    <group>test_nml</group>
+    <desc>another dummy parameter for multiple key=value guards mixed with explicit (flexible) guards</desc>
+    <values>
+      <value some_int="2" some_bool="True" some_float="3.1415">delta</value>
+      <value guard='$ICE_GRID .startswith("gx1v")'>epsilon</value>
+    </values>
+  </entry>
+
+  </entry_id_pg>
+"""
+
+############################
+# Dummy functions and classes
+############################
+
+
+
+[docs] +class DummyCase: + """A dummy Case class that mimics CIME class objects' get_value method.""" + +
+[docs] + def get_value(self, varname): + d = { + "DIN_LOC_ROOT": "/foo/inputdata", + "OCN_GRID": "tx0.66v1", + "COMP_ATM": "datm", + } + return d[varname] if varname in d else None
+
+ + + +case = DummyCase() + +##### + + +def _expand_func_demo(varname): + return { + "ICE_GRID": "gx1v6", + "DIN_LOC_ROOT": "/glade/p/cesmdata/cseg/inputdata", + "cice_mode": "thermo_only", + "some_bool": "True", + "some_int": 2, + "some_float": "3.1415", + }[varname] + + +################ +# Unitest classes +################ + + +
+[docs] +class TestParamGen(unittest.TestCase): + """ + Tests some basic functionality of the + CIME.ParamGen.paramgen's ParamGen class + """ + +
+[docs] + def test_init_data(self): + """Tests the ParamGen initializer with and without an initial data.""" + # empty + _ = ParamGen({}) + # with data + data_dict = {"a": 1, "b": 2} + _ = ParamGen(data_dict)
+ + +
+[docs] + def test_reduce(self): + """Tests the reduce method of ParamGen on data with explicit guards (True or False).""" + data_dict = {"False": 1, "True": 2} + obj = ParamGen(data_dict) + obj.reduce() + self.assertEqual(obj.data, 2)
+ + +
+[docs] + def test_nested_reduce(self): + """Tests the reduce method of ParamGen on data with nested guards.""" + data_dict = {"False": 1, "True": {"2>3": 0, "2<3": 2}} + obj = ParamGen(data_dict) + obj.reduce() + self.assertEqual(obj.data, 2)
+ + +
+[docs] + def test_outer_guards(self): + """Tests the reduce method on data with outer guards enclosing parameter definitions.""" + data_dict = { + "False": {"param": "foo"}, + "True": {"param": "bar"}, + } + obj = ParamGen(data_dict) + obj.reduce() + self.assertEqual(obj.data, {"param": "bar"})
+ + +
+[docs] + def test_match(self): + """Tests the default behavior of returning the last match and the optional behavior of returning the + first match.""" + + data_dict = { + "1<2": "foo", + "2<3": "bar", + "3<4": "baz", + } + + obj = ParamGen(data_dict) # by default, match='last' + obj.reduce() + self.assertEqual(obj.data, "baz") + + obj = ParamGen(data_dict, match="first") + obj.reduce() + self.assertEqual(obj.data, "foo")
+ + +
+[docs] + def test_undefined_var(self): + """Tests the reduce method of ParamGen on nested guards where an undefined expandable var is specified + below a guard that evaluates to False. The undefined var should not lead to an error since the enclosing + guard evaluates to false.""" + + # define an expansion function, i.e., a mapping for expandable var names to their values + test_map = {"alpha": 1, "beta": False} + expand_func = lambda var: test_map[var] + + # define a data dict + data_dict = {"param": {"$alpha >= 1": "foo", "${beta}": {"${zeta}": "bar"}}} + + # Instantiate a ParamGen object and reduce its data to obtain the final parameter set + obj = ParamGen(data_dict) + obj.reduce(expand_func) + self.assertEqual(obj.data, {"param": "foo"})
+ + +
+[docs] + def test_expandable_vars(self): + """Tests the reduce method of ParamGen expandable vars in guards.""" + + # define an expansion function, i.e., a mapping for expandable var names to their values + test_map = {"alpha": 1, "beta": False, "gamma": "xyz"} + expand_func = lambda var: test_map[var] + + # define a data dict + data_dict = { + "param": {"$alpha > 1": "foo", "${beta}": "bar", '"x" in $gamma': "baz"} + } + + # Instantiate a ParamGen object and reduce its data to obtain the final parameter set + obj = ParamGen(data_dict) + obj.reduce(expand_func) + self.assertEqual(obj.data, {"param": "baz"})
+ + +
+[docs] + def test_formula_expansion(self): + """Tests the formula expansion feature of ParamGen.""" + + # define an expansion function, i.e., a mapping for expandable var names to their values + test_map = {"alpha": 3} + expand_func = lambda var: test_map[var] + + # define a data dict + data_dict = {"x": "= $alpha **2", "y": "= [i for i in range(3)]"} + + # Instantiate a ParamGen object and reduce its data to obtain the final parameter set + obj = ParamGen(data_dict) + obj.reduce(expand_func) + self.assertEqual(obj.data["x"], 9) + self.assertEqual(obj.data["y"], [0, 1, 2])
+
+ + + +##### + + +
+[docs] +class TestParamGenYamlConstructor(unittest.TestCase): + """A unit test class for testing ParamGen's yaml constructor.""" + +
+[docs] + def test_mom_input(self): + """Test MOM_input file generation via a subset of original MOM_input.yaml""" + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_MOM_INPUT_YAML.encode()) + temp.flush() + + # Open YAML file using ParamGen: + mom_input = ParamGen.from_yaml(temp.name) + + # Define a local ParamGen reducing function: + def input_data_list_expand_func(varname): + val = case.get_value(varname) + if val == None: + val = str(mom_input.data["Global"][varname]["value"]).strip() + if val == None: + raise RuntimeError("Cannot determine the value of variable: " + varname) + return val + + # Reduce ParamGen entries: + mom_input.reduce(input_data_list_expand_func) + + # Check output: + self.assertEqual( + mom_input.data, + { + "Global": { + "INPUTDIR": {"value": "/foo/inputdata/ocn/mom/tx0.66v1"}, + "RESTORE_SALINITY": {"value": True}, + "INIT_LAYERS_FROM_Z_FILE": {"value": True}, + "TEMP_SALT_Z_INIT_FILE": { + "value": "woa18_04_initial_conditions.nc" + }, + } + }, + )
+ + +
+[docs] + def test_input_data_list(self): + """Test mom.input_data_list file generation via a subset of original input_data_list.yaml""" + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_MOM_INPUT_YAML.encode()) + temp.flush() + + # Open YAML file using ParamGen: + mom_input = ParamGen.from_yaml(temp.name) + + # Define a local ParamGen reducing function: + def input_data_list_expand_func(varname): + val = case.get_value(varname) + if val == None: + val = str(mom_input.data["Global"][varname]["value"]).strip() + if val == None: + raise RuntimeError("Cannot determine the value of variable: " + varname) + return val + + # Reduce ParamGen entries: + mom_input.reduce(input_data_list_expand_func) + + # Create a second temporary YAML file: + with tempfile.NamedTemporaryFile() as temp2: + temp2.write(_MOM_INPUT_DATA_LIST_YAML.encode()) + temp2.flush() + + # Open second YAML file using ParamGen: + input_data_list = ParamGen.from_yaml(temp2.name) + + # Reduce ParamGen entries: + input_data_list.reduce(input_data_list_expand_func) + + # Check output: + self.assertEqual( + input_data_list.data, + { + "mom.input_data_list": { + "ocean_hgrid": "/foo/inputdata/ocn/mom/tx0.66v1/ocean_hgrid_180829.nc", + "tempsalt": "/foo/inputdata/ocn/mom/tx0.66v1/woa18_04_initial_conditions.nc", + } + }, + )
+
+ + + +##### + + +
+[docs] +class TestParamGenXmlConstructor(unittest.TestCase): + """A unit test class for testing ParamGen's xml constructor.""" + +
+[docs] + def test_single_key_val_guard(self): + """Test xml entry values with single key=value guards""" + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_MY_TEMPLATE_XML.encode()) + temp.flush() + + # Open XML file using ParamGen: + pg = ParamGen.from_xml_nml(temp.name) + + # Reduce ParamGen entries: + pg.reduce(_expand_func_demo) + + # Check output: + self.assertEqual(pg.data["test_nml"]["foo"]["values"], "beta")
+ + +
+[docs] + def test_mixed_guard(self): + """Tests multiple key=value guards mixed with explicit (flexible) guards.""" + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_MY_TEMPLATE_XML.encode()) + temp.flush() + + # Open XML file using ParamGen: + pg = ParamGen.from_xml_nml(temp.name) + + # Reduce ParamGen entries: + pg.reduce(_expand_func_demo) + + # Check output: + self.assertEqual(pg.data["test_nml"]["bar"]["values"], "epsilon")
+ + +
+[docs] + def test_mixed_guard_first(self): + """Tests multiple key=value guards mixed with explicit (flexible) guards + with match=first option.""" + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_MY_TEMPLATE_XML.encode()) + temp.flush() + + # Open XML file using ParamGen: + pg = ParamGen.from_xml_nml(temp.name, match="first") + + # Reduce ParamGen entries: + pg.reduce(_expand_func_demo) + + # Check output: + self.assertEqual(pg.data["test_nml"]["bar"]["values"], "delta")
+ + +
+[docs] + def test_no_match(self): + """Tests an xml entry with no match, i.e., no guards evaluating to True.""" + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_MY_TEMPLATE_XML.encode()) + temp.flush() + + # Open XML file using ParamGen: + pg = ParamGen.from_xml_nml(temp.name) + + # Reduce ParamGen entries: + pg.reduce(_expand_func_demo) + + # Check output: + self.assertEqual(pg.data["test_nml"]["baz"]["values"], None)
+ + +
+[docs] + def test_default_var(self): + """Test to check if default val is assigned when all guards eval to False""" + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_MY_TEMPLATE_XML.encode()) + temp.flush() + + # Open XML file using ParamGen: + pg = ParamGen.from_xml_nml(temp.name) + + # Reduce ParamGen entries: + pg.reduce(lambda varname: "_") + + # Check output: + self.assertEqual(pg.data["test_nml"]["foo"]["values"], "alpha")
+ + +
+[docs] + def test_duplicate_entry_error(self): + """ + Test to make sure duplicate ids raise the correct error + when the "no_duplicates" flag is True. + """ + with self.assertRaises(ValueError) as verr: + + # Create temporary YAML file: + with tempfile.NamedTemporaryFile() as temp: + temp.write(_DUPLICATE_IDS_XML.encode()) + temp.flush() + + _ = ParamGen.from_xml_nml(temp.name, no_duplicates=True) + + emsg = "Entry id 'foo' listed twice in file:\n'./xml_test_files/duplicate_ids.xml'" + self.assertEqual(emsg, str(verr.exception))
+
+ + + +if __name__ == "__main__": + unittest.main() +
+ +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_user_nl_utils.html b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_user_nl_utils.html new file mode 100644 index 00000000000..e79b7818fdd --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_modules/CIME/tests/test_unit_user_nl_utils.html @@ -0,0 +1,342 @@ + + + + + + CIME.tests.test_unit_user_nl_utils — CIME master documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for CIME.tests.test_unit_user_nl_utils

+#!/usr/bin/env python3
+
+import unittest
+import os
+import shutil
+import tempfile
+from CIME.SystemTests.test_utils import user_nl_utils
+
+
+
+[docs] +class TestUserNLCopier(unittest.TestCase): + + # ======================================================================== + # Test helper functions + # ======================================================================== + +
+[docs] + def setUp(self): + self._caseroot = tempfile.mkdtemp()
+ + +
+[docs] + def tearDown(self): + shutil.rmtree(self._caseroot, ignore_errors=True)
+ + +
+[docs] + def write_user_nl_file(self, component, contents, suffix=""): + """Write contents to a user_nl file in the case directory. Returns the + basename (i.e., not the full path) of the file that is created. + + For a component foo, with the default suffix of '', the file name will + be user_nl_foo + + If the suffix is '_0001', the file name will be user_nl_foo_0001 + """ + + filename = "user_nl_" + component + suffix + + with open(os.path.join(self._caseroot, filename), "w") as user_nl_file: + user_nl_file.write(contents) + + return filename
+ + +
+[docs] + def assertFileContentsEqual(self, expected, filepath, msg=None): + """Asserts that the contents of the file given by 'filepath' are equal to + the string given by 'expected'. 'msg' gives an optional message to be + printed if the assertion fails.""" + + with open(filepath, "r") as myfile: + contents = myfile.read() + + self.assertEqual(expected, contents, msg=msg)
+ + + # ======================================================================== + # Begin actual tests + # ======================================================================== + +
+[docs] + def test_append(self): + # Define some variables + component = "foo" + # deliberately exclude new line from file contents, to make sure that's + # handled correctly + orig_contents = "bar = 42" + contents_to_append = "baz = 101" + + # Setup + filename = self.write_user_nl_file(component, orig_contents) + + # Exercise + user_nl_utils.append_to_user_nl_files( + caseroot=self._caseroot, component=component, contents=contents_to_append + ) + + # Verify + expected_contents = orig_contents + "\n" + contents_to_append + "\n" + self.assertFileContentsEqual( + expected_contents, os.path.join(self._caseroot, filename) + )
+ + +
+[docs] + def test_append_list(self): + # Define some variables + component = "foo" + # deliberately exclude new line from file contents, to make sure that's + # handled correctly + orig_contents = "bar = 42" + contents_to_append_1 = "baz = 101" + contents_to_append_2 = "qux = 987" + contents_to_append = [ + contents_to_append_1, + contents_to_append_2, + ] + + # Setup + filename = self.write_user_nl_file(component, orig_contents) + + # Exercise + user_nl_utils.append_to_user_nl_files( + caseroot=self._caseroot, component=component, contents=contents_to_append + ) + + # Verify + expected_contents = ( + orig_contents + + "\n" + + contents_to_append_1 + + "\n" + + contents_to_append_2 + + "\n" + ) + self.assertFileContentsEqual( + expected_contents, os.path.join(self._caseroot, filename) + )
+ + +
+[docs] + def test_append_multiple_files(self): + # Simulates a multi-instance test + component = "foo" + orig_contents1 = "bar = 42" + orig_contents2 = "bar = 17" + contents_to_append = "baz = 101" + + # Setup + filename1 = self.write_user_nl_file(component, orig_contents1, suffix="_0001") + filename2 = self.write_user_nl_file(component, orig_contents2, suffix="_0002") + + # Exercise + user_nl_utils.append_to_user_nl_files( + caseroot=self._caseroot, component=component, contents=contents_to_append + ) + + # Verify + expected_contents1 = orig_contents1 + "\n" + contents_to_append + "\n" + expected_contents2 = orig_contents2 + "\n" + contents_to_append + "\n" + self.assertFileContentsEqual( + expected_contents1, os.path.join(self._caseroot, filename1) + ) + self.assertFileContentsEqual( + expected_contents2, os.path.join(self._caseroot, filename2) + )
+ + +
+[docs] + def test_append_without_files_raises_exception(self): + # This test verifies that you get an exception if you call + # append_to_user_nl_files when there are no user_nl files of interest + + # Define some variables + component_exists = "foo" + component_for_append = "bar" + + # Setup + # Create file in caseroot for component_exists, but not for component_for_append + self.write_user_nl_file(component_exists, "irrelevant contents") + + self.assertRaisesRegex( + RuntimeError, + "No user_nl files found", + user_nl_utils.append_to_user_nl_files, + caseroot=self._caseroot, + component=component_for_append, + contents="irrelevant contents to append", + )
+
+ + + +if __name__ == "__main__": + unittest.main() +
+ +
+
+ +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/_modules/index.html b/branch/rljacob/docs/update-testing/html/_modules/index.html new file mode 100644 index 00000000000..20537a6b5da --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_modules/index.html @@ -0,0 +1,161 @@ + + + + + + Overview: module code — CIME master documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+ + +
+
+
+
+ + + +
+ + Read the Docs + v: master + + +
+ +
+
Versions
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.BuildTools.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.BuildTools.rst.txt new file mode 100644 index 00000000000..4da79947b78 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.BuildTools.rst.txt @@ -0,0 +1,21 @@ +CIME.BuildTools package +======================= + +Submodules +---------- + +CIME.BuildTools.configure module +-------------------------------- + +.. automodule:: CIME.BuildTools.configure + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.BuildTools + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.Servers.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.Servers.rst.txt new file mode 100644 index 00000000000..92d83549769 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.Servers.rst.txt @@ -0,0 +1,53 @@ +CIME.Servers package +==================== + +Submodules +---------- + +CIME.Servers.ftp module +----------------------- + +.. automodule:: CIME.Servers.ftp + :members: + :undoc-members: + :show-inheritance: + +CIME.Servers.generic\_server module +----------------------------------- + +.. automodule:: CIME.Servers.generic_server + :members: + :undoc-members: + :show-inheritance: + +CIME.Servers.gftp module +------------------------ + +.. automodule:: CIME.Servers.gftp + :members: + :undoc-members: + :show-inheritance: + +CIME.Servers.svn module +----------------------- + +.. automodule:: CIME.Servers.svn + :members: + :undoc-members: + :show-inheritance: + +CIME.Servers.wget module +------------------------ + +.. automodule:: CIME.Servers.wget + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.Servers + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.SystemTests.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.SystemTests.rst.txt new file mode 100644 index 00000000000..4886908720d --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.SystemTests.rst.txt @@ -0,0 +1,309 @@ +CIME.SystemTests package +======================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + CIME.SystemTests.test_utils + +Submodules +---------- + +CIME.SystemTests.dae module +--------------------------- + +.. automodule:: CIME.SystemTests.dae + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.eri module +--------------------------- + +.. automodule:: CIME.SystemTests.eri + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.erio module +---------------------------- + +.. automodule:: CIME.SystemTests.erio + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.erp module +--------------------------- + +.. automodule:: CIME.SystemTests.erp + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.err module +--------------------------- + +.. automodule:: CIME.SystemTests.err + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.erri module +---------------------------- + +.. automodule:: CIME.SystemTests.erri + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.ers module +--------------------------- + +.. automodule:: CIME.SystemTests.ers + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.ers2 module +---------------------------- + +.. automodule:: CIME.SystemTests.ers2 + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.ert module +--------------------------- + +.. automodule:: CIME.SystemTests.ert + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.funit module +----------------------------- + +.. automodule:: CIME.SystemTests.funit + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.homme module +----------------------------- + +.. automodule:: CIME.SystemTests.homme + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.hommebaseclass module +-------------------------------------- + +.. automodule:: CIME.SystemTests.hommebaseclass + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.hommebfb module +-------------------------------- + +.. automodule:: CIME.SystemTests.hommebfb + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.icp module +--------------------------- + +.. automodule:: CIME.SystemTests.icp + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.irt module +--------------------------- + +.. automodule:: CIME.SystemTests.irt + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.ldsta module +----------------------------- + +.. automodule:: CIME.SystemTests.ldsta + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.mcc module +--------------------------- + +.. automodule:: CIME.SystemTests.mcc + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.mvk module +--------------------------- + +.. automodule:: CIME.SystemTests.mvk + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.nck module +--------------------------- + +.. automodule:: CIME.SystemTests.nck + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.ncr module +--------------------------- + +.. automodule:: CIME.SystemTests.ncr + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.nodefail module +-------------------------------- + +.. automodule:: CIME.SystemTests.nodefail + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.pea module +--------------------------- + +.. automodule:: CIME.SystemTests.pea + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.pem module +--------------------------- + +.. automodule:: CIME.SystemTests.pem + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.pet module +--------------------------- + +.. automodule:: CIME.SystemTests.pet + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.pfs module +--------------------------- + +.. automodule:: CIME.SystemTests.pfs + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.pgn module +--------------------------- + +.. automodule:: CIME.SystemTests.pgn + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.pre module +--------------------------- + +.. automodule:: CIME.SystemTests.pre + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.rep module +--------------------------- + +.. automodule:: CIME.SystemTests.rep + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.restart\_tests module +-------------------------------------- + +.. automodule:: CIME.SystemTests.restart_tests + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.reuseinitfiles module +-------------------------------------- + +.. automodule:: CIME.SystemTests.reuseinitfiles + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.seq module +--------------------------- + +.. automodule:: CIME.SystemTests.seq + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.sms module +--------------------------- + +.. automodule:: CIME.SystemTests.sms + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.system\_tests\_common module +--------------------------------------------- + +.. automodule:: CIME.SystemTests.system_tests_common + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.system\_tests\_compare\_n module +------------------------------------------------- + +.. automodule:: CIME.SystemTests.system_tests_compare_n + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.system\_tests\_compare\_two module +--------------------------------------------------- + +.. automodule:: CIME.SystemTests.system_tests_compare_two + :members: + :undoc-members: + :show-inheritance: + +CIME.SystemTests.tsc module +--------------------------- + +.. automodule:: CIME.SystemTests.tsc + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.SystemTests + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.SystemTests.test_utils.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.SystemTests.test_utils.rst.txt new file mode 100644 index 00000000000..433003260b0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.SystemTests.test_utils.rst.txt @@ -0,0 +1,21 @@ +CIME.SystemTests.test\_utils package +==================================== + +Submodules +---------- + +CIME.SystemTests.test\_utils.user\_nl\_utils module +--------------------------------------------------- + +.. automodule:: CIME.SystemTests.test_utils.user_nl_utils + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.SystemTests.test_utils + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.Tools.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.Tools.rst.txt new file mode 100644 index 00000000000..3f32969300c --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.Tools.rst.txt @@ -0,0 +1,37 @@ +CIME.Tools package +================== + +Submodules +---------- + +CIME.Tools.generate\_cylc\_workflow module +------------------------------------------ + +.. automodule:: CIME.Tools.generate_cylc_workflow + :members: + :undoc-members: + :show-inheritance: + +CIME.Tools.standard\_script\_setup module +----------------------------------------- + +.. automodule:: CIME.Tools.standard_script_setup + :members: + :undoc-members: + :show-inheritance: + +CIME.Tools.testreporter module +------------------------------ + +.. automodule:: CIME.Tools.testreporter + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.Tools + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.XML.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.XML.rst.txt new file mode 100644 index 00000000000..2a96f42aab7 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.XML.rst.txt @@ -0,0 +1,277 @@ +CIME.XML package +================ + +Submodules +---------- + +CIME.XML.archive module +----------------------- + +.. automodule:: CIME.XML.archive + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.archive\_base module +----------------------------- + +.. automodule:: CIME.XML.archive_base + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.batch module +--------------------- + +.. automodule:: CIME.XML.batch + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.component module +------------------------- + +.. automodule:: CIME.XML.component + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.compsets module +------------------------ + +.. automodule:: CIME.XML.compsets + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.entry\_id module +------------------------- + +.. automodule:: CIME.XML.entry_id + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_archive module +---------------------------- + +.. automodule:: CIME.XML.env_archive + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_base module +------------------------- + +.. automodule:: CIME.XML.env_base + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_batch module +-------------------------- + +.. automodule:: CIME.XML.env_batch + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_build module +-------------------------- + +.. automodule:: CIME.XML.env_build + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_case module +------------------------- + +.. automodule:: CIME.XML.env_case + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_mach\_pes module +------------------------------ + +.. automodule:: CIME.XML.env_mach_pes + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_mach\_specific module +----------------------------------- + +.. automodule:: CIME.XML.env_mach_specific + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_run module +------------------------ + +.. automodule:: CIME.XML.env_run + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_test module +------------------------- + +.. automodule:: CIME.XML.env_test + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.env\_workflow module +----------------------------- + +.. automodule:: CIME.XML.env_workflow + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.expected\_fails\_file module +------------------------------------- + +.. automodule:: CIME.XML.expected_fails_file + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.files module +--------------------- + +.. automodule:: CIME.XML.files + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.generic\_xml module +---------------------------- + +.. automodule:: CIME.XML.generic_xml + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.grids module +--------------------- + +.. automodule:: CIME.XML.grids + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.headers module +----------------------- + +.. automodule:: CIME.XML.headers + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.inputdata module +------------------------- + +.. automodule:: CIME.XML.inputdata + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.machines module +------------------------ + +.. automodule:: CIME.XML.machines + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.namelist\_definition module +------------------------------------ + +.. automodule:: CIME.XML.namelist_definition + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.pes module +------------------- + +.. automodule:: CIME.XML.pes + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.pio module +------------------- + +.. automodule:: CIME.XML.pio + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.standard\_module\_setup module +--------------------------------------- + +.. automodule:: CIME.XML.standard_module_setup + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.stream module +---------------------- + +.. automodule:: CIME.XML.stream + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.test\_reporter module +------------------------------ + +.. automodule:: CIME.XML.test_reporter + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.testlist module +------------------------ + +.. automodule:: CIME.XML.testlist + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.tests module +--------------------- + +.. automodule:: CIME.XML.tests + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.testspec module +------------------------ + +.. automodule:: CIME.XML.testspec + :members: + :undoc-members: + :show-inheritance: + +CIME.XML.workflow module +------------------------ + +.. automodule:: CIME.XML.workflow + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.XML + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.baselines.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.baselines.rst.txt new file mode 100644 index 00000000000..4c5f75cdc43 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.baselines.rst.txt @@ -0,0 +1,21 @@ +CIME.baselines package +====================== + +Submodules +---------- + +CIME.baselines.performance module +--------------------------------- + +.. automodule:: CIME.baselines.performance + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.baselines + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.build_scripts.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.build_scripts.rst.txt new file mode 100644 index 00000000000..a792d8946b7 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.build_scripts.rst.txt @@ -0,0 +1,10 @@ +CIME.build\_scripts package +=========================== + +Module contents +--------------- + +.. automodule:: CIME.build_scripts + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.case.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.case.rst.txt new file mode 100644 index 00000000000..68500a8c4ec --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.case.rst.txt @@ -0,0 +1,101 @@ +CIME.case package +================= + +Submodules +---------- + +CIME.case.case module +--------------------- + +.. automodule:: CIME.case.case + :members: + :undoc-members: + :show-inheritance: + +CIME.case.case\_clone module +---------------------------- + +.. automodule:: CIME.case.case_clone + :members: + :undoc-members: + :show-inheritance: + +CIME.case.case\_cmpgen\_namelists module +---------------------------------------- + +.. automodule:: CIME.case.case_cmpgen_namelists + :members: + :undoc-members: + :show-inheritance: + +CIME.case.case\_run module +-------------------------- + +.. automodule:: CIME.case.case_run + :members: + :undoc-members: + :show-inheritance: + +CIME.case.case\_setup module +---------------------------- + +.. automodule:: CIME.case.case_setup + :members: + :undoc-members: + :show-inheritance: + +CIME.case.case\_st\_archive module +---------------------------------- + +.. automodule:: CIME.case.case_st_archive + :members: + :undoc-members: + :show-inheritance: + +CIME.case.case\_submit module +----------------------------- + +.. automodule:: CIME.case.case_submit + :members: + :undoc-members: + :show-inheritance: + +CIME.case.case\_test module +--------------------------- + +.. automodule:: CIME.case.case_test + :members: + :undoc-members: + :show-inheritance: + +CIME.case.check\_input\_data module +----------------------------------- + +.. automodule:: CIME.case.check_input_data + :members: + :undoc-members: + :show-inheritance: + +CIME.case.check\_lockedfiles module +----------------------------------- + +.. automodule:: CIME.case.check_lockedfiles + :members: + :undoc-members: + :show-inheritance: + +CIME.case.preview\_namelists module +----------------------------------- + +.. automodule:: CIME.case.preview_namelists + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.case + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.config.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.config.rst.txt new file mode 100644 index 00000000000..677ad072de7 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.config.rst.txt @@ -0,0 +1,10 @@ +CIME.data.config package +======================== + +Module contents +--------------- + +.. automodule:: CIME.data.config + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.rst.txt new file mode 100644 index 00000000000..7cde8b2e321 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.rst.txt @@ -0,0 +1,19 @@ +CIME.data package +================= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + CIME.data.config + CIME.data.templates + +Module contents +--------------- + +.. automodule:: CIME.data + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.templates.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.templates.rst.txt new file mode 100644 index 00000000000..4a05478bf1d --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.data.templates.rst.txt @@ -0,0 +1,10 @@ +CIME.data.templates package +=========================== + +Module contents +--------------- + +.. automodule:: CIME.data.templates + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.rst.txt new file mode 100644 index 00000000000..4c6e8292b7f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.rst.txt @@ -0,0 +1,255 @@ +CIME package +============ + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + CIME.BuildTools + CIME.Servers + CIME.SystemTests + CIME.Tools + CIME.XML + CIME.baselines + CIME.build_scripts + CIME.case + CIME.data + CIME.scripts + CIME.tests + +Submodules +---------- + +CIME.aprun module +----------------- + +.. automodule:: CIME.aprun + :members: + :undoc-members: + :show-inheritance: + +CIME.bless\_test\_results module +-------------------------------- + +.. automodule:: CIME.bless_test_results + :members: + :undoc-members: + :show-inheritance: + +CIME.build module +----------------- + +.. automodule:: CIME.build + :members: + :undoc-members: + :show-inheritance: + +CIME.buildlib module +-------------------- + +.. automodule:: CIME.buildlib + :members: + :undoc-members: + :show-inheritance: + +CIME.buildnml module +-------------------- + +.. automodule:: CIME.buildnml + :members: + :undoc-members: + :show-inheritance: + +CIME.code\_checker module +------------------------- + +.. automodule:: CIME.code_checker + :members: + :undoc-members: + :show-inheritance: + +CIME.compare\_namelists module +------------------------------ + +.. automodule:: CIME.compare_namelists + :members: + :undoc-members: + :show-inheritance: + +CIME.compare\_test\_results module +---------------------------------- + +.. automodule:: CIME.compare_test_results + :members: + :undoc-members: + :show-inheritance: + +CIME.config module +------------------ + +.. automodule:: CIME.config + :members: + :undoc-members: + :show-inheritance: + +CIME.cs\_status module +---------------------- + +.. automodule:: CIME.cs_status + :members: + :undoc-members: + :show-inheritance: + +CIME.cs\_status\_creator module +------------------------------- + +.. automodule:: CIME.cs_status_creator + :members: + :undoc-members: + :show-inheritance: + +CIME.date module +---------------- + +.. automodule:: CIME.date + :members: + :undoc-members: + :show-inheritance: + +CIME.expected\_fails module +--------------------------- + +.. automodule:: CIME.expected_fails + :members: + :undoc-members: + :show-inheritance: + +CIME.get\_tests module +---------------------- + +.. automodule:: CIME.get_tests + :members: + :undoc-members: + :show-inheritance: + +CIME.get\_timing module +----------------------- + +.. automodule:: CIME.get_timing + :members: + :undoc-members: + :show-inheritance: + +CIME.hist\_utils module +----------------------- + +.. automodule:: CIME.hist_utils + :members: + :undoc-members: + :show-inheritance: + +CIME.jenkins\_generic\_job module +--------------------------------- + +.. automodule:: CIME.jenkins_generic_job + :members: + :undoc-members: + :show-inheritance: + +CIME.locked\_files module +------------------------- + +.. automodule:: CIME.locked_files + :members: + :undoc-members: + :show-inheritance: + +CIME.namelist module +-------------------- + +.. automodule:: CIME.namelist + :members: + :undoc-members: + :show-inheritance: + +CIME.nmlgen module +------------------ + +.. automodule:: CIME.nmlgen + :members: + :undoc-members: + :show-inheritance: + +CIME.provenance module +---------------------- + +.. automodule:: CIME.provenance + :members: + :undoc-members: + :show-inheritance: + +CIME.simple\_compare module +--------------------------- + +.. automodule:: CIME.simple_compare + :members: + :undoc-members: + :show-inheritance: + +CIME.test\_scheduler module +--------------------------- + +.. automodule:: CIME.test_scheduler + :members: + :undoc-members: + :show-inheritance: + +CIME.test\_status module +------------------------ + +.. automodule:: CIME.test_status + :members: + :undoc-members: + :show-inheritance: + +CIME.test\_utils module +----------------------- + +.. automodule:: CIME.test_utils + :members: + :undoc-members: + :show-inheritance: + +CIME.user\_mod\_support module +------------------------------ + +.. automodule:: CIME.user_mod_support + :members: + :undoc-members: + :show-inheritance: + +CIME.utils module +----------------- + +.. automodule:: CIME.utils + :members: + :undoc-members: + :show-inheritance: + +CIME.wait\_for\_tests module +---------------------------- + +.. automodule:: CIME.wait_for_tests + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.scripts.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.scripts.rst.txt new file mode 100644 index 00000000000..65764cc9f3b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.scripts.rst.txt @@ -0,0 +1,53 @@ +CIME.scripts package +==================== + +Submodules +---------- + +CIME.scripts.create\_clone module +--------------------------------- + +.. automodule:: CIME.scripts.create_clone + :members: + :undoc-members: + :show-inheritance: + +CIME.scripts.create\_newcase module +----------------------------------- + +.. automodule:: CIME.scripts.create_newcase + :members: + :undoc-members: + :show-inheritance: + +CIME.scripts.create\_test module +-------------------------------- + +.. automodule:: CIME.scripts.create_test + :members: + :undoc-members: + :show-inheritance: + +CIME.scripts.query\_config module +--------------------------------- + +.. automodule:: CIME.scripts.query_config + :members: + :undoc-members: + :show-inheritance: + +CIME.scripts.query\_testlists module +------------------------------------ + +.. automodule:: CIME.scripts.query_testlists + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.scripts + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.tests.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.tests.rst.txt new file mode 100644 index 00000000000..d0d44ecbaa6 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/CIME.tests.rst.txt @@ -0,0 +1,429 @@ +CIME.tests package +================== + +Submodules +---------- + +CIME.tests.base module +---------------------- + +.. automodule:: CIME.tests.base + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.case\_fake module +---------------------------- + +.. automodule:: CIME.tests.case_fake + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.custom\_assertions\_test\_status module +-------------------------------------------------- + +.. automodule:: CIME.tests.custom_assertions_test_status + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.scripts\_regression\_tests module +-------------------------------------------- + +.. automodule:: CIME.tests.scripts_regression_tests + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_bless\_tests\_results module +-------------------------------------------------- + +.. automodule:: CIME.tests.test_sys_bless_tests_results + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_build\_system module +------------------------------------------ + +.. automodule:: CIME.tests.test_sys_build_system + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_cime\_case module +--------------------------------------- + +.. automodule:: CIME.tests.test_sys_cime_case + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_cime\_performance module +---------------------------------------------- + +.. automodule:: CIME.tests.test_sys_cime_performance + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_create\_newcase module +-------------------------------------------- + +.. automodule:: CIME.tests.test_sys_create_newcase + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_full\_system module +----------------------------------------- + +.. automodule:: CIME.tests.test_sys_full_system + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_grid\_generation module +--------------------------------------------- + +.. automodule:: CIME.tests.test_sys_grid_generation + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_jenkins\_generic\_job module +-------------------------------------------------- + +.. automodule:: CIME.tests.test_sys_jenkins_generic_job + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_manage\_and\_query module +----------------------------------------------- + +.. automodule:: CIME.tests.test_sys_manage_and_query + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_query\_config module +------------------------------------------ + +.. automodule:: CIME.tests.test_sys_query_config + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_run\_restart module +----------------------------------------- + +.. automodule:: CIME.tests.test_sys_run_restart + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_save\_timings module +------------------------------------------ + +.. automodule:: CIME.tests.test_sys_save_timings + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_single\_submit module +------------------------------------------- + +.. automodule:: CIME.tests.test_sys_single_submit + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_test\_scheduler module +-------------------------------------------- + +.. automodule:: CIME.tests.test_sys_test_scheduler + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_unittest module +------------------------------------- + +.. automodule:: CIME.tests.test_sys_unittest + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_user\_concurrent\_mods module +--------------------------------------------------- + +.. automodule:: CIME.tests.test_sys_user_concurrent_mods + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_sys\_wait\_for\_tests module +--------------------------------------------- + +.. automodule:: CIME.tests.test_sys_wait_for_tests + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_aprun module +----------------------------------- + +.. automodule:: CIME.tests.test_unit_aprun + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_baselines\_performance module +---------------------------------------------------- + +.. automodule:: CIME.tests.test_unit_baselines_performance + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_bless\_test\_results module +-------------------------------------------------- + +.. automodule:: CIME.tests.test_unit_bless_test_results + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_case module +---------------------------------- + +.. automodule:: CIME.tests.test_unit_case + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_case\_fake module +---------------------------------------- + +.. automodule:: CIME.tests.test_unit_case_fake + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_case\_run module +--------------------------------------- + +.. automodule:: CIME.tests.test_unit_case_run + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_case\_setup module +----------------------------------------- + +.. automodule:: CIME.tests.test_unit_case_setup + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_compare\_test\_results module +---------------------------------------------------- + +.. automodule:: CIME.tests.test_unit_compare_test_results + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_compare\_two module +------------------------------------------ + +.. automodule:: CIME.tests.test_unit_compare_two + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_config module +------------------------------------ + +.. automodule:: CIME.tests.test_unit_config + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_cs\_status module +---------------------------------------- + +.. automodule:: CIME.tests.test_unit_cs_status + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_custom\_assertions\_test\_status module +-------------------------------------------------------------- + +.. automodule:: CIME.tests.test_unit_custom_assertions_test_status + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_doctest module +------------------------------------- + +.. automodule:: CIME.tests.test_unit_doctest + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_expected\_fails\_file module +--------------------------------------------------- + +.. automodule:: CIME.tests.test_unit_expected_fails_file + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_grids module +----------------------------------- + +.. automodule:: CIME.tests.test_unit_grids + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_hist\_utils module +----------------------------------------- + +.. automodule:: CIME.tests.test_unit_hist_utils + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_nmlgen module +------------------------------------ + +.. automodule:: CIME.tests.test_unit_nmlgen + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_paramgen module +-------------------------------------- + +.. automodule:: CIME.tests.test_unit_paramgen + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_system\_tests module +------------------------------------------- + +.. automodule:: CIME.tests.test_unit_system_tests + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_test\_status module +------------------------------------------ + +.. automodule:: CIME.tests.test_unit_test_status + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_two\_link\_to\_case2\_output module +---------------------------------------------------------- + +.. automodule:: CIME.tests.test_unit_two_link_to_case2_output + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_user\_mod\_support module +------------------------------------------------ + +.. automodule:: CIME.tests.test_unit_user_mod_support + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_user\_nl\_utils module +--------------------------------------------- + +.. automodule:: CIME.tests.test_unit_user_nl_utils + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_utils module +----------------------------------- + +.. automodule:: CIME.tests.test_unit_utils + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_xml\_archive\_base module +------------------------------------------------ + +.. automodule:: CIME.tests.test_unit_xml_archive_base + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_xml\_env\_batch module +--------------------------------------------- + +.. automodule:: CIME.tests.test_unit_xml_env_batch + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_xml\_env\_mach\_specific module +------------------------------------------------------ + +.. automodule:: CIME.tests.test_unit_xml_env_mach_specific + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_xml\_machines module +------------------------------------------- + +.. automodule:: CIME.tests.test_unit_xml_machines + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_xml\_namelist\_definition module +------------------------------------------------------- + +.. automodule:: CIME.tests.test_unit_xml_namelist_definition + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.test\_unit\_xml\_tests module +---------------------------------------- + +.. automodule:: CIME.tests.test_unit_xml_tests + :members: + :undoc-members: + :show-inheritance: + +CIME.tests.utils module +----------------------- + +.. automodule:: CIME.tests.utils + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: CIME.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/CIME_api/modules.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/modules.rst.txt new file mode 100644 index 00000000000..f98c2603acb --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/CIME_api/modules.rst.txt @@ -0,0 +1,7 @@ +CIME +==== + +.. toctree:: + :maxdepth: 4 + + CIME diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_api/Tools.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_api/Tools.rst.txt new file mode 100644 index 00000000000..ada0dae541d --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_api/Tools.rst.txt @@ -0,0 +1,37 @@ +Tools package +============= + +Submodules +---------- + +Tools.generate\_cylc\_workflow module +------------------------------------- + +.. automodule:: Tools.generate_cylc_workflow + :members: + :undoc-members: + :show-inheritance: + +Tools.standard\_script\_setup module +------------------------------------ + +.. automodule:: Tools.standard_script_setup + :members: + :undoc-members: + :show-inheritance: + +Tools.testreporter module +------------------------- + +.. automodule:: Tools.testreporter + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: Tools + :members: + :undoc-members: + :show-inheritance: diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_api/modules.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_api/modules.rst.txt new file mode 100644 index 00000000000..788189a3760 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_api/modules.rst.txt @@ -0,0 +1,7 @@ +Tools +===== + +.. toctree:: + :maxdepth: 4 + + Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/advanced-py-prof.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/advanced-py-prof.rst.txt new file mode 100644 index 00000000000..87c2fc571ac --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/advanced-py-prof.rst.txt @@ -0,0 +1,14 @@ + +.. _advanced-py-prof: + +#################################################### +advanced-py-prof +#################################################### + +**advanced-py-prof** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./advanced-py-prof --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/archive_metadata.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/archive_metadata.rst.txt new file mode 100644 index 00000000000..e7b36bcac6b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/archive_metadata.rst.txt @@ -0,0 +1,14 @@ + +.. _archive_metadata: + +#################################################### +archive_metadata +#################################################### + +**archive_metadata** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./archive_metadata --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/bld_diff.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/bld_diff.rst.txt new file mode 100644 index 00000000000..55d2314ea0d --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/bld_diff.rst.txt @@ -0,0 +1,14 @@ + +.. _bld_diff: + +#################################################### +bld_diff +#################################################### + +**bld_diff** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./bld_diff --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/bless_test_results.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/bless_test_results.rst.txt new file mode 100644 index 00000000000..37963bda9ed --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/bless_test_results.rst.txt @@ -0,0 +1,14 @@ + +.. _bless_test_results: + +#################################################### +bless_test_results +#################################################### + +**bless_test_results** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./bless_test_results --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.build.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.build.rst.txt new file mode 100644 index 00000000000..3439450dea1 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.build.rst.txt @@ -0,0 +1,14 @@ + +.. _case.build: + +#################################################### +case.build +#################################################### + +**case.build** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./case.build --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.cmpgen_namelists.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.cmpgen_namelists.rst.txt new file mode 100644 index 00000000000..2897c6ac1c5 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.cmpgen_namelists.rst.txt @@ -0,0 +1,14 @@ + +.. _case.cmpgen_namelists: + +#################################################### +case.cmpgen_namelists +#################################################### + +**case.cmpgen_namelists** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./case.cmpgen_namelists --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.qstatus.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.qstatus.rst.txt new file mode 100644 index 00000000000..6d33eb0d876 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.qstatus.rst.txt @@ -0,0 +1,14 @@ + +.. _case.qstatus: + +#################################################### +case.qstatus +#################################################### + +**case.qstatus** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./case.qstatus --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.setup.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.setup.rst.txt new file mode 100644 index 00000000000..09d77d7acd0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.setup.rst.txt @@ -0,0 +1,14 @@ + +.. _case.setup: + +#################################################### +case.setup +#################################################### + +**case.setup** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./case.setup --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.submit.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.submit.rst.txt new file mode 100644 index 00000000000..d1d7e69b710 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case.submit.rst.txt @@ -0,0 +1,14 @@ + +.. _case.submit: + +#################################################### +case.submit +#################################################### + +**case.submit** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./case.submit --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case_diff.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case_diff.rst.txt new file mode 100644 index 00000000000..c532e8dc491 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/case_diff.rst.txt @@ -0,0 +1,14 @@ + +.. _case_diff: + +#################################################### +case_diff +#################################################### + +**case_diff** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./case_diff --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_case.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_case.rst.txt new file mode 100644 index 00000000000..93167f0d7b8 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_case.rst.txt @@ -0,0 +1,14 @@ + +.. _check_case: + +#################################################### +check_case +#################################################### + +**check_case** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./check_case --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_input_data.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_input_data.rst.txt new file mode 100644 index 00000000000..d45d180e3e0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_input_data.rst.txt @@ -0,0 +1,14 @@ + +.. _check_input_data: + +#################################################### +check_input_data +#################################################### + +**check_input_data** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./check_input_data --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_lockedfiles.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_lockedfiles.rst.txt new file mode 100644 index 00000000000..2f269da57b8 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/check_lockedfiles.rst.txt @@ -0,0 +1,14 @@ + +.. _check_lockedfiles: + +#################################################### +check_lockedfiles +#################################################### + +**check_lockedfiles** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./check_lockedfiles --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/cime_bisect.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/cime_bisect.rst.txt new file mode 100644 index 00000000000..18f17fe5151 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/cime_bisect.rst.txt @@ -0,0 +1,14 @@ + +.. _cime_bisect: + +#################################################### +cime_bisect +#################################################### + +**cime_bisect** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./cime_bisect --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/code_checker.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/code_checker.rst.txt new file mode 100644 index 00000000000..7a3125f54c9 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/code_checker.rst.txt @@ -0,0 +1,14 @@ + +.. _code_checker: + +#################################################### +code_checker +#################################################### + +**code_checker** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./code_checker --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/compare_namelists.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/compare_namelists.rst.txt new file mode 100644 index 00000000000..c7ea60e899b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/compare_namelists.rst.txt @@ -0,0 +1,14 @@ + +.. _compare_namelists: + +#################################################### +compare_namelists +#################################################### + +**compare_namelists** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./compare_namelists --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/compare_test_results.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/compare_test_results.rst.txt new file mode 100644 index 00000000000..c2db982550b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/compare_test_results.rst.txt @@ -0,0 +1,14 @@ + +.. _compare_test_results: + +#################################################### +compare_test_results +#################################################### + +**compare_test_results** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./compare_test_results --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_baseline.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_baseline.rst.txt new file mode 100644 index 00000000000..4454c4543ae --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_baseline.rst.txt @@ -0,0 +1,14 @@ + +.. _component_compare_baseline: + +#################################################### +component_compare_baseline +#################################################### + +**component_compare_baseline** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./component_compare_baseline --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_copy.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_copy.rst.txt new file mode 100644 index 00000000000..ca94d75e960 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_copy.rst.txt @@ -0,0 +1,14 @@ + +.. _component_compare_copy: + +#################################################### +component_compare_copy +#################################################### + +**component_compare_copy** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./component_compare_copy --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_test.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_test.rst.txt new file mode 100644 index 00000000000..1ee6637caf0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_compare_test.rst.txt @@ -0,0 +1,14 @@ + +.. _component_compare_test: + +#################################################### +component_compare_test +#################################################### + +**component_compare_test** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./component_compare_test --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_generate_baseline.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_generate_baseline.rst.txt new file mode 100644 index 00000000000..44168b00538 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/component_generate_baseline.rst.txt @@ -0,0 +1,14 @@ + +.. _component_generate_baseline: + +#################################################### +component_generate_baseline +#################################################### + +**component_generate_baseline** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./component_generate_baseline --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/concat_daily_hist.csh.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/concat_daily_hist.csh.rst.txt new file mode 100644 index 00000000000..073513931ff --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/concat_daily_hist.csh.rst.txt @@ -0,0 +1,14 @@ + +.. _concat_daily_hist.csh: + +#################################################### +concat_daily_hist.csh +#################################################### + +**concat_daily_hist.csh** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./concat_daily_hist.csh --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_clone.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_clone.rst.txt new file mode 100644 index 00000000000..dfcef31b85f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_clone.rst.txt @@ -0,0 +1,14 @@ + +.. _create_clone: + +#################################################### +create_clone +#################################################### + +**create_clone** is a script in CIMEROOT/scripts. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./create_clone --help + :cwd: ../../../scripts diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_newcase.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_newcase.rst.txt new file mode 100644 index 00000000000..3f58e9d9c05 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_newcase.rst.txt @@ -0,0 +1,14 @@ + +.. _create_newcase: + +#################################################### +create_newcase +#################################################### + +**create_newcase** is a script in CIMEROOT/scripts. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./create_newcase --help + :cwd: ../../../scripts diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_test.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_test.rst.txt new file mode 100644 index 00000000000..220a9751dbc --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/create_test.rst.txt @@ -0,0 +1,14 @@ + +.. _create_test: + +#################################################### +create_test +#################################################### + +**create_test** is a script in CIMEROOT/scripts. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./create_test --help + :cwd: ../../../scripts diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/cs.status.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/cs.status.rst.txt new file mode 100644 index 00000000000..2d79ae9de47 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/cs.status.rst.txt @@ -0,0 +1,14 @@ + +.. _cs.status: + +#################################################### +cs.status +#################################################### + +**cs.status** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./cs.status --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/e3sm_check_env.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/e3sm_check_env.rst.txt new file mode 100644 index 00000000000..62ace75c10b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/e3sm_check_env.rst.txt @@ -0,0 +1,14 @@ + +.. _e3sm_check_env: + +#################################################### +e3sm_check_env +#################################################### + +**e3sm_check_env** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./e3sm_check_env --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/generate_cylc_workflow.py.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/generate_cylc_workflow.py.rst.txt new file mode 100644 index 00000000000..5e08cd7f9af --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/generate_cylc_workflow.py.rst.txt @@ -0,0 +1,14 @@ + +.. _generate_cylc_workflow.py: + +#################################################### +generate_cylc_workflow.py +#################################################### + +**generate_cylc_workflow.py** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./generate_cylc_workflow.py --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/getTiming.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/getTiming.rst.txt new file mode 100644 index 00000000000..b0e1fe297ad --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/getTiming.rst.txt @@ -0,0 +1,14 @@ + +.. _getTiming: + +#################################################### +getTiming +#################################################### + +**getTiming** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./getTiming --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/get_case_env.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/get_case_env.rst.txt new file mode 100644 index 00000000000..b149880456c --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/get_case_env.rst.txt @@ -0,0 +1,14 @@ + +.. _get_case_env: + +#################################################### +get_case_env +#################################################### + +**get_case_env** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./get_case_env --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/get_standard_makefile_args.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/get_standard_makefile_args.rst.txt new file mode 100644 index 00000000000..7ce9adb169a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/get_standard_makefile_args.rst.txt @@ -0,0 +1,14 @@ + +.. _get_standard_makefile_args: + +#################################################### +get_standard_makefile_args +#################################################### + +**get_standard_makefile_args** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./get_standard_makefile_args --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/index.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/index.rst.txt new file mode 100644 index 00000000000..452b7dd85a5 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/index.rst.txt @@ -0,0 +1,63 @@ +.. _Tools_user: + +########## +User Tools +########## + +CIME includes a number of user scripts. Some of these scripts are copied into +the CASEROOT as part of **create_newcase**, **create_test**, **create_clone**, +and **case.setup**. + +.. toctree:: + :maxdepth: 1 + + advanced-py-prof + archive_metadata + bld_diff + bless_test_results + case.build + case.cmpgen_namelists + case.qstatus + case.setup + case.submit + case_diff + check_case + check_input_data + check_lockedfiles + cime_bisect + code_checker + compare_namelists + compare_test_results + component_compare_baseline + component_compare_copy + component_compare_test + component_generate_baseline + concat_daily_hist.csh + create_clone + create_newcase + create_test + cs.status + e3sm_check_env + generate_cylc_workflow.py + getTiming + get_case_env + get_standard_makefile_args + jenkins_generic_job + list_e3sm_tests + mkDepends + mkSrcfiles + mvsource + normalize_cases + pelayout + preview_namelists + preview_run + query_config + query_testlists + save_provenance + simple-py-prof + simple_compare + testreporter.py + wait_for_tests + xmlchange + xmlquery + xmltestentry diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/jenkins_generic_job.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/jenkins_generic_job.rst.txt new file mode 100644 index 00000000000..947abd2e390 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/jenkins_generic_job.rst.txt @@ -0,0 +1,14 @@ + +.. _jenkins_generic_job: + +#################################################### +jenkins_generic_job +#################################################### + +**jenkins_generic_job** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./jenkins_generic_job --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/list_e3sm_tests.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/list_e3sm_tests.rst.txt new file mode 100644 index 00000000000..c3e7463151e --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/list_e3sm_tests.rst.txt @@ -0,0 +1,14 @@ + +.. _list_e3sm_tests: + +#################################################### +list_e3sm_tests +#################################################### + +**list_e3sm_tests** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./list_e3sm_tests --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mkDepends.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mkDepends.rst.txt new file mode 100644 index 00000000000..366508f0173 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mkDepends.rst.txt @@ -0,0 +1,14 @@ + +.. _mkDepends: + +#################################################### +mkDepends +#################################################### + +**mkDepends** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./mkDepends --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mkSrcfiles.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mkSrcfiles.rst.txt new file mode 100644 index 00000000000..ecdeaf45274 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mkSrcfiles.rst.txt @@ -0,0 +1,14 @@ + +.. _mkSrcfiles: + +#################################################### +mkSrcfiles +#################################################### + +**mkSrcfiles** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./mkSrcfiles --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mvsource.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mvsource.rst.txt new file mode 100644 index 00000000000..ca56a6bb47a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/mvsource.rst.txt @@ -0,0 +1,14 @@ + +.. _mvsource: + +#################################################### +mvsource +#################################################### + +**mvsource** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./mvsource --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/normalize_cases.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/normalize_cases.rst.txt new file mode 100644 index 00000000000..e59c668a8a2 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/normalize_cases.rst.txt @@ -0,0 +1,14 @@ + +.. _normalize_cases: + +#################################################### +normalize_cases +#################################################### + +**normalize_cases** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./normalize_cases --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/pelayout.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/pelayout.rst.txt new file mode 100644 index 00000000000..2e2be45b00b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/pelayout.rst.txt @@ -0,0 +1,14 @@ + +.. _pelayout: + +#################################################### +pelayout +#################################################### + +**pelayout** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./pelayout --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/preview_namelists.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/preview_namelists.rst.txt new file mode 100644 index 00000000000..d2518864f19 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/preview_namelists.rst.txt @@ -0,0 +1,14 @@ + +.. _preview_namelists: + +#################################################### +preview_namelists +#################################################### + +**preview_namelists** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./preview_namelists --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/preview_run.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/preview_run.rst.txt new file mode 100644 index 00000000000..b3a41c5a744 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/preview_run.rst.txt @@ -0,0 +1,14 @@ + +.. _preview_run: + +#################################################### +preview_run +#################################################### + +**preview_run** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./preview_run --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/query_config.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/query_config.rst.txt new file mode 100644 index 00000000000..1060269312f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/query_config.rst.txt @@ -0,0 +1,14 @@ + +.. _query_config: + +#################################################### +query_config +#################################################### + +**query_config** is a script in CIMEROOT/scripts. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./query_config --help + :cwd: ../../../scripts diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/query_testlists.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/query_testlists.rst.txt new file mode 100644 index 00000000000..e3eef5c74d2 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/query_testlists.rst.txt @@ -0,0 +1,14 @@ + +.. _query_testlists: + +#################################################### +query_testlists +#################################################### + +**query_testlists** is a script in CIMEROOT/scripts. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./query_testlists --help + :cwd: ../../../scripts diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/save_provenance.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/save_provenance.rst.txt new file mode 100644 index 00000000000..c239d5ef619 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/save_provenance.rst.txt @@ -0,0 +1,14 @@ + +.. _save_provenance: + +#################################################### +save_provenance +#################################################### + +**save_provenance** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./save_provenance --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/simple-py-prof.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/simple-py-prof.rst.txt new file mode 100644 index 00000000000..fc07e9f958c --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/simple-py-prof.rst.txt @@ -0,0 +1,14 @@ + +.. _simple-py-prof: + +#################################################### +simple-py-prof +#################################################### + +**simple-py-prof** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./simple-py-prof --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/simple_compare.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/simple_compare.rst.txt new file mode 100644 index 00000000000..8fe1a72f683 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/simple_compare.rst.txt @@ -0,0 +1,14 @@ + +.. _simple_compare: + +#################################################### +simple_compare +#################################################### + +**simple_compare** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./simple_compare --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/testreporter.py.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/testreporter.py.rst.txt new file mode 100644 index 00000000000..0256b0750ad --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/testreporter.py.rst.txt @@ -0,0 +1,14 @@ + +.. _testreporter.py: + +#################################################### +testreporter.py +#################################################### + +**testreporter.py** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./testreporter.py --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/wait_for_tests.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/wait_for_tests.rst.txt new file mode 100644 index 00000000000..53ecaf85f32 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/wait_for_tests.rst.txt @@ -0,0 +1,14 @@ + +.. _wait_for_tests: + +#################################################### +wait_for_tests +#################################################### + +**wait_for_tests** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./wait_for_tests --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmlchange.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmlchange.rst.txt new file mode 100644 index 00000000000..86c76d3c60f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmlchange.rst.txt @@ -0,0 +1,14 @@ + +.. _xmlchange: + +#################################################### +xmlchange +#################################################### + +**xmlchange** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./xmlchange --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmlquery.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmlquery.rst.txt new file mode 100644 index 00000000000..365f07891e1 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmlquery.rst.txt @@ -0,0 +1,14 @@ + +.. _xmlquery: + +#################################################### +xmlquery +#################################################### + +**xmlquery** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./xmlquery --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmltestentry.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmltestentry.rst.txt new file mode 100644 index 00000000000..e6d68dd3edb --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/Tools_user/xmltestentry.rst.txt @@ -0,0 +1,14 @@ + +.. _xmltestentry: + +#################################################### +xmltestentry +#################################################### + +**xmltestentry** is a script in CIMEROOT/CIME/Tools. + +.. toctree:: + :maxdepth: 1 + +.. command-output:: ./xmltestentry --help + :cwd: ../../../CIME/Tools diff --git a/branch/rljacob/docs/update-testing/html/_sources/build_cpl/adding-components.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/build_cpl/adding-components.rst.txt new file mode 100644 index 00000000000..c9fcf234dd1 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/build_cpl/adding-components.rst.txt @@ -0,0 +1,36 @@ +.. _adding-components: + +=================== +Adding components +=================== + +Here are the steps to add prognostic components to CIME models. + +There are a couple of aspects of a component interface to CIME, the +scripts interface which controls setting up component inputs and +building the component and the run interface which controls connecting +the component to the coupler and through the coupler, the other +components of the CIME based model. + +The component should have a subdirectory **cime_config** and this +subdirectory should have two files **buildnml** and **buildlib** The +**buildnml** script is used to build the components instructional, +runtime inputs. These have traditionally been in the form of fortran +namelists but may also follow other formats. The **buildnml** may +either be called from the command line or as a python subroutine. If +buildnml is called from the command line it will be passed the +caseroot directory on the command line. If it is called as a +subroutine, the subroutine name must be buildnml and it will take +three arguments, a Case object, a caseroot directory and a component +name. The **buildlib** script will always be called from the command +line, it is called in the case.build step and is expected to build the +the buildlib script will be called with three arguments in order they +are caseroot, libroot (the location of the installed library, +typically EXEROOT/lib) and bldroot, the location of the component +build directory. Look at the cime internal components such as datm +for an example. + +The coupler interface is dependent on which coupler is used, for the mct coupler in cime +the component model must provide NNN_INIT_MCT, NNN_RUN_MCT, NNN_FINAL_MCT where NNN is the +component type of the particular component (eg ATM for an atmosphere, LND for a land model) +these subroutines are expected to be in the component library. diff --git a/branch/rljacob/docs/update-testing/html/_sources/build_cpl/index.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/build_cpl/index.rst.txt new file mode 100644 index 00000000000..a492a431548 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/build_cpl/index.rst.txt @@ -0,0 +1,24 @@ +.. _build-cpl: + +.. on documentation master file, created by + sphinx-quickstart on Tue Jan 31 19:46:36 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +####################################################################### +Building a Coupled Model with CIME +####################################################################### + +.. toctree:: + :maxdepth: 3 + :numbered: + + introduction.rst + adding-components.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/branch/rljacob/docs/update-testing/html/_sources/build_cpl/introduction.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/build_cpl/introduction.rst.txt new file mode 100644 index 00000000000..0352da61bf7 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/build_cpl/introduction.rst.txt @@ -0,0 +1,14 @@ +Introduction +============ + +Content to go here: + +How to add a new component model to cime. + +How to replace an existing cime model with another one. + +How to integrate your model in to the cime build/configure system and coupler. + +How to work with the CIME-supplied models. + +What to do if you want to add another component to the long name. diff --git a/branch/rljacob/docs/update-testing/html/_sources/change.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/change.rst.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/branch/rljacob/docs/update-testing/html/_sources/glossary/index.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/glossary/index.rst.txt new file mode 100644 index 00000000000..6ab8f033fa9 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/glossary/index.rst.txt @@ -0,0 +1,171 @@ +.. _glossary: + +######## +Glossary +######## + +.. toctree:: + :maxdepth: 1 + :numbered: + +********* +General +********* + +.. glossary:: + + active or prognostic component + Solves a complex set of equations to describe a sub-model’s behavior. + + case (CASE) + An instance of a global climate model simulation. A case is defined by a component set, a model grid, + a machine, a compiler, and any other additional customizations. + + component + A sub-model coupled with other components to constitute a global climate modeling system. + Example components: atmosphere, ocean, land, etc. + + component set (COMPSET) + A complete set of components to be linked together into a climate model to + run a specific case. + + data component + Replacement for an active component. Sends and receives the same variables to and from other + models (but ignores the variables received). + + grid (GRID) + A set of numerical grids of a case. Each active component operates on its own numerical grid. + + resolution + Used to refer to a set of grids. Each grid within a set may have different resolution. + + stub component + Simply occupies the required place in the climate execution sequence and does send or receive + any data. + +********* +Coupling +********* + +.. glossary:: + + coupler + A component of the CIME infrastructure that is run from within the driver. It can be run on a + subset of the total processors, and carries out mapping (interpolation), merging, diagnostics, and other + calculations. + + driver + The hub that connects all components. CIME driver runs on all hardware processors, runs the top + level instructions, and, executes the driver time loop. + + forcing + An imposed perturbation of Earth's energy balance + + Model Coupling Toolkit or MCT + A library used by CIME for all data rearranging and mapping (interpolation) + + mask + Determines land/ocean boundaries in the model + + mapping + Interpolation of fields between components. + +********************* +Files and Directories +********************* + +.. glossary:: + + archive directory (DOUT_S_ROOT) + If short term archiving is activated (DOUT_S = TRUE), the restart files and run output files + are copied to archive directory location (DOUT_S_ROOT). + + build directory (EXEROOT) + Location where the case is built. + + case root (CASEROOT) + The directory where the case is created. Includes namelist files, xml files, and scripts to setup, + build, and run the case. Also, includes logs and timing output files. + + CIME root (CIMEROOT) + The directory where the CIME source code resides + + history files + NetCDF files that contain fields associated with the state of the model at a given time slice. + + initial files + Files required to start a file + + input data stream (DIN_LOC_ROOT) + A time-series of input data files where all the fields in the stream are located in the + same data file and all share the same spatial and temporal coordinates. + + namelist files + Each namelist file includes input parameters for a specific component. + + run directory (RUNDIR) + Where the case is run. + + restart files + Written and read by each component in the RUNDIR to stop and subsequently restart in a bit-for-bit fashion. + + rpointer files + Text file written by the coupler in the RUNDIR with a list of necessary files required for model restart. + + XML files + Elements and attributes in these files configure a case. (building, running, batch, etc.) These files + include env_archive.xml, env_batch.xml, env_build.xml, env_case.xml, env_mach_pes.xml, env_mach_specific.xml, env_run.xml + in CASEROOT and can be queried and modifed using the xmlquery and xmlchange tools. + +*********** +Development +*********** + +.. glossary:: + + sandbox (SRCROOT) + A checked out tag on a local or a remote machine. may be edited to create a new tag. or, may + just be used for running cases. + + source modifications (CASEROOT/SourceMods) + one or more source files that are modified by the user. Before building a case, CIME replaces + the original source files with these files. + + tag + A snapshot of the source code. With each consecutive tag (one or more) answer-changing modifications + to the source code of a component are introduced. + + user namelist files (CASEROOT/user_nl_*) + User modifications for a given case can be specified in these files. + +******** +Testing +******** + +.. glossary:: + + baseline + A set of test cases that is run using a tag which is complete, tested, and has no modifications + in the source code. Used to assess the performance/accuracy of a case that is run using a sandbox. + + baseline failure + A test that fails in its comparison with a baseline. + + blessing + Part of the unit testing framework used by CIME scripts regression tests. + + regression test + A test that compares with baseline results to determine if any new errors have been introduced + into the code base. + + unit testing + A fast, self-verifying test of a small piece of code. + +************* +Miscellaneous +************* + +.. glossary:: + + ESP + External System Processing: handles data assimilation diff --git a/branch/rljacob/docs/update-testing/html/_sources/index.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/index.rst.txt new file mode 100644 index 00000000000..89cc7155218 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/index.rst.txt @@ -0,0 +1,46 @@ +.. on documentation master file, created by + sphinx-quickstart on Tue Jan 31 19:46:36 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +CIME documentation +================== + +The Common Infrastructure for Modeling the Earth (CIME - pronounced +"SEAM") provides a Case Control System for configuring, compiling and executing +Earth system models, data and stub model components, a driver and associated tools +and libraries. + +Table of contents +----------------- +.. toctree:: + :maxdepth: 2 + + what_cime/index.rst + users_guide/index.rst + build_cpl/index.rst + misc_tools/index.rst + +Appendices +---------- +.. toctree:: + :maxdepth: 2 + + glossary/index.rst + Tools_user/index.rst + xml_files/index.rst + CIME_api/modules.rst + Tools_api/modules.rst + +Python Module Indices and Search +--------------------------------- + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + + + +CIME is developed by the +`E3SM `_ and +`CESM `_ projects. diff --git a/branch/rljacob/docs/update-testing/html/_sources/misc_tools/ect.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/misc_tools/ect.rst.txt new file mode 100644 index 00000000000..5a2af9737de --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/misc_tools/ect.rst.txt @@ -0,0 +1,118 @@ +.. _ensemble-consistency-test: + +============================== +CESM-ECT (CESM Ensemble Consistency Test): +============================== + +CESM-ECT is a suite of tests to determine whether a new +simulation set up (new machine, compiler, etc.) is statistically +distinguishable from an accepted ensemble. The verification tools in +the CESM-ECT suite are: + +CAM-ECT - detects issues in CAM and CLM (12 month runs) +UF-CAM-ECT - detects issues in CAM and CLM (9 time step runs) +POP-ECT - detects issues in POP and CICE (12 month runs) + +The ECT process involves comparing runs generated with +the new scenario ( 3 for CAM-ECT and UF-CAM-ECT, and 1 for POP-ECT) +to an ensemble built on a trusted machine (currently +cheyenne). The python ECT tools are located in the pyCECT +subdirectory or https://github.com/NCAR/PyCECT/releases. + +-OR- + +We now provide a web server for CAM-ECT and UF-CAM-ECT, where +you can upload the (3) generated runs for comparison to our ensemble. +Please see the webpage at http://www.cesm.ucar.edu/models/cesm2/verification/ +for further instructions. + +----------------------------------- +Creating or obtaining a summary file: +----------------------------------- + +Before the test can be run, a summary file is needed of the ensemble +runs to which the comparison will be made. Ensemble summary files +(NetCDF) for existing tags for CAM-ECT, UF-CAM-ECT, and POP-ECT that +were created by CSEG are located (respectively) in the CESM input data +directories: + +$CESMDATAROOT/inputdata/validation/ensembles +$CESMDATAROOT/inputdata/validation/uf_ensembles +$CESMDATAROOT/inputdata/validation/pop_ensembles + +If none of our ensembles are suitable for your needs, then you may create +your own ensemble (and summary file) using the following instructions: + +(1) To create a new ensemble, use the ensemble.py script in this directory. +This script creates and compiles a case, then creates clones of the +original case, where the initial temperature perturbation is slightly modified +for each ensemble member. At this time, cime includes functionality +to create ensembles for CAM-ECT, UF-CAM-ECT, and POP-ECT. + +(2) Use --ect to specify whether ensemble is for CAM or POP. +(See 'python ensemble.py -h' for additional details). + +(3) Use --ensemble to specify the ensemble size. +Recommended ensemble sizes: +CAM-ECT: 151 +UF-CAM-ECT: 350 +POP-ECT 40 + +(4) Examples: + +CAM-ECT: + +python ensemble.py --case /glade/scratch/cesm_user/cesm_tag/ensemble/ensemble.cesm_tag.000 --mach cheyenne --ensemble 151 --ect cam --project P99999999 + + +UF-CAM-ECT: + +python ensemble.py --case /glade/scratch/cesm_user/cesm_tag/uf_ensemble/ensemble.cesm_tag.uf.000 --mach cheyenne --ensemble 350 --uf --ect cam --project P99999999 + +POP-ECT: + +python ensemble.py --case /glade/scratch/cesm_user/cesm_tag/uf_ensemble/ensemble.cesm_tag.000 --mach cheyenne --ensemble 40 --ect pop --project P99999999 + +Notes: + (a) ensemble.py accepts (most of) the argumenets of create_newcase + + (b) case name must end in ".000" and include the full path + + (c) ensemble size must be specified, and suggested defaults are listed + above. Note that for CAM-ECT and UF-CAM-ECT, the ensemble size + needs to be larger than the number of variables that ECT will evaluate. + + +(5) Once all ensemble simulations have run successfully, copy every cam history +file (*.cam.h0.*) for CAM-ECT and UF-CAM-ECT) or monthly pop history file +(*.pop.h.*) for POP-ECT from each ensemble run directory into a separate directory. +Next create the ensemble summary using the pyCECT tool pyEnsSum.py (for CAM-ECT and +UF-CAM-ECT) or pyEnsSumPop.py (for POP-ECT). For details see README_pyEnsSum.rst +and README_pyEnsSumPop.rst with the pyCECT tools. + +------------------- +Creating test runs: +------------------- + +(1) Once an ensemble summary file has been created or chosen to +use from $CESMDATAROOT/inputdata/validation, the simulation +run(s) to be verified by ECT must be created via script ensemble.py. + +NOTE: It is important that the **same** resolution and compset be used in the +individual runs as in the ensemble. The NetCDF ensemble summary file global +attributes give this information. + +(2) For example, for CAM-ECT: + +python ensemble.py --case /glade/scratch/cesm_user/cesm_tag/camcase.cesm_tag.000 --ect cam --mach cheyenne --project P99999999 +--compset F2000climo --res f19_f19 +For example, for UF-CAM-ECT: + +python ensemble.py --case /glade/scratch/cesm_user/cesm_tag/uf.camcase.cesm_tag.000 --ect cam --uf --mach cheyenne --project P99999999 --compset F2000climo --res f19_f19 + +For example, for POP-ECT: + +python ensemble.py --case /glade/scratch/cesm_user/cesm_tag/popcase.cesm_tag.000 --ect pop --mach cheyenne --project P99999999 --compset G --res T62_g17 + +(3) Next verify the new simulation(s) with the pyCECT tool pyCECT.py (see +README_pyCECT.rst with the pyCECT tools). diff --git a/branch/rljacob/docs/update-testing/html/_sources/misc_tools/index.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/misc_tools/index.rst.txt new file mode 100644 index 00000000000..9130145901a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/misc_tools/index.rst.txt @@ -0,0 +1,30 @@ +.. _misc-tools: + +.. on documentation master file, created by + sphinx-quickstart on Tue Jan 31 19:46:36 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +##################################### + Miscellaneous Tools +##################################### + +In addition to basic infrastructure for a coupled model, CIME contains in its distribution several stand-alone +tools that are necessary and/or useful when building a climate model. Guides for using them will be here. + +.. toctree:: + :maxdepth: 3 + :numbered: + + + ect.rst + mapping-tools.rst + cprnc.rst + load-balancing-tool.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/branch/rljacob/docs/update-testing/html/_sources/misc_tools/load-balancing-tool.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/misc_tools/load-balancing-tool.rst.txt new file mode 100644 index 00000000000..2701b9e1b6f --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/misc_tools/load-balancing-tool.rst.txt @@ -0,0 +1,379 @@ +.. _load_balancing_tool: + + +========================= + CIME Load Balancing Tool +========================= + + Originally Developed by Sheri Mickelson mickelso@ucar.edu + and Yuri Alekseev (ALCF/Argonne National Laboratory + + Updated 2017 Jason Sarich sarich@mcs.anl.gov (Argonne National Laboratory) + + +This Load Balancing tool performs several operations intended to find +a reasonable PE layout for CIME simulations. These operations involve two +steps:: + + 1. load_balancing_submit.py + Run a series of simulations in order to obtain timing data + + 2. load_balancing_solve.py + Using the data provided in the previous program, solve a mixed integer + linear program to optimize the model throughput. Requires installation + of PuLP and uses the included COIN-CBC solver. (https://pythonhosted.org/PuLP) + +Also in this documentation is:: + + 3. More about the algorithm used + + 4. Extending the solver for other models + + 5. Testing information for developers + + +*For the impatient* + + +1. set PYTHONPATH to include $CIME_DIR/scripts:$CIME_DIR/tools/load_balancing_tool + +2. create PE XML file to describe the PE layouts for the timing runs + +3. $ ./load_balancing_submit.py --res --compset --pesfile + +4. ... wait for jobs to run ... + +5. $ ./load_balancing_solve.py --total-tasks --blocksize 8 + + + +****************************************************************** +Running simulations using load_balancing_submit.py +****************************************************************** + +Simulations can be run on a given system by executing the load_balancing_tool.py +script, located in cime/tools/load_balancing_tool/load_balancing_tool_submit.py. +This creates timing files in the case directory which will be used to solve +a mixed integer linear program optimizing the layout. If there is already timing +information available, then a + +As with the create_newcase and create_test scripts, command line options +are used to tailor the simulations for a given model. These values will be +directly forwarded to the passed:: + + --compiler + --project + --compset (required) + --res (required) + --machine + +Other options include:: + + --pesfile (required) + This file is used to designated the pes layout that + are used to create the timing data. The format is the same used + by CIME pes_files, but note that the 'pesize' tag will be used + to generate the casename. Also, this file will not be directly + passed through to CIME, but rather it will trigger xmlchange + commands to execute based on the values in the file. + + --test-id + By default, the load balancing tool will use casenames: + PFS_I0.res.compset.lbt + PFS_I1.res.compset.lbt + ... + PFS_IN.res.compset.lbt + for each simulation requested. These casenames will be forwarded to + the create_test script. + + Using this option will instead direct the tool to use: + PFS_I0.res.compset.test-id + PFS_I1.res.compset.test-id + ... + PFS_IN.res.compset.test-id + + --force-purge + Force the tool to remove any existing case directories if they + exist. Removes PFS_I*.res.compset.test-id + + --extra-options-file + Add extra xml options to the timing runs from a user file, + these options will be set after create_newcase and before + case.setup. + This text file should have one variable per line in + the format =. Example: + + STOP_OPTION=ndays + STOP_N=7 + DOUT_S=FALSE + + +****************************************************************** +Optimizing the layout using load_balacing_solve.py +****************************************************************** + +Reads timing data created with load_balancing_submit.py (or otherwise, +see --timing-files option) and solves an mixed integer optimization problem +using these timings. The default layout (IceLndAtmOcn) minimizes the cost per +model day assuming the layout:: + + ____________________ + | ICE | LND | | + |______|_______| | + | | OCN | + | ATM | | + |______________|_____| + + +An IceLndWavAtmOcn layout is also available. It is possible to extend +this tool to solve for other layouts (See Section 1.4 Extending the Load +Balancing Tool) + +Note -- threading is not considered part of this optimization, it is assumed that +all timing data have the same threading structure (i.e. all ATM runs use two threads per PE) + +Options recognized by the solver:: + + --layout + Name of the class used to solve the layout problem. The only built-in + class at this time is the default IceLndAtmOcn, but this can be extended. + See section 4 Extending the Load Balancing Tool + + --total-tasks N (required) + The total number of PEs that can be assigned + + --timing-dir + Optional, read in all files from this directory as timing data + + --test-id + The test-id used when submitting the timing jobs. This option can also + be used to set a single directory where ALL of the timing data is. + The solver will extract data from timing files that match either pattern: + .test-id/timing/timing..test-id + .test-id/timing/timing..test-id + + --blocksize N + The blocksize is the granularity of processors that will be group + together, useful for when PEs to be multiples of 8, 16, etc. + + --blocksize-XXX N + Components don't all have to have the same blocksize. The default + blocksize given by --blocksize can be overridden for a given component + using this option, where XXX can be ATM, ICE, GLC, etc. + Example: + --blocksize 8 --blocksize-GLC 1 + will set the GLC blocksize to 1 and all other blocksizes to 8 + + --milp-output + After extracting data from timing files and before solving, write the + data to a .json file where is can be analyzed or manually edited. + + --milp-input + Read in the problem from the given .json file instead of extracting from + timing files. + + --pe-output + Write the solution PE layout to a potential pe xml file. + + +*************************** +More about the algorithm +*************************** + +Before solving the mixed-integer linear program, a model of the cost vs ntasks +function is constructed for each component. + +Given a component data set of costs (C1,C2,..,Cn) and nblocks (N1,N2,..,Nn), +then an piecewise set of n+1 linear constraints are created using the idea: + +If N < N1 (which means that N1 cannot be 1), then assume that there is +perfect scalability from N to N1. Thus the cost is on the line +defined by the points (1, C1*N1) - (N1, C1). + +If N is between N_i and N_{i+1}, then the cost is on the line defined by the +points (N_i, C_i) and (N_{i+1}, C_{i+1}. + +If N > Nn, then we want to extrapolate the cost at N=total_tasks +(we define N{n+1} = total_tasks, C{n+1} = estimated cost using all nodes) +Assuming perfect scalability is problematic at this level, so we instead +assume that the parallel efficiency drops at the same factor as it does + + from N=N{n-1} to N = Nn + + First solve for efficiency E: + C{n-1} - Cn = E * (C{n-1} * N{n-1} / Nn) + + Then E to find C{n+1} (cost at ntasks N{n+1}): + Cn - Ct = E * (Cn * Nn / Nt) + + Now cost is on the line defined by (Nn,Cn) - (Nt,Ct) + +Assuming that this piecewise linear function describes a convex function, we do +not have to explicitly construct this piecewise function and can instead use +each of the cost functions on the entire domain. + +These piecewise linear models give us the following linear constraints, where +the model time cost C as a function of N (ntasks) for each component +is constrained by:: + + C >= Ci - Ni * (C{i+1}-Ci) / (N{i+1}-Ni) + + N * (C{i+1}-Ci) / (N{i+1}-Ni) for i=0..n + + +These constraints should be in effect for any extensions of the solver (the +components involved may be different). + +There are options available in load_balancing_submit.py to inspect these +piecewise linear models:: + + --graph-models (requires matplotlib) + --print-models (debugging modes writes the models to the log) + + +Now that these constraints are defined, the mixed integer linear program (MILP) +follows from the layout:: + + NOTES: variable N[c] is number of tasks assigned for component c + variable NB[c] is the number of blocks assigned to component c + constant C[c]_i is the cost contributed by component c from + timing data set i + constant N[c]_i is the ntasks assigned to component c from + timing data set i + + ____________________ + | ICE | LND | | + T1 |______|_______| | + | | OCN | + | ATM | | + T |______________|_____| + + Min T + s.t. Tice <= T1 + Tlnd <= T1 + T1 + Tatm <= T + Tocn <= T + + NB[c] >= 1 for c in [ice,lnd,ocn,atm] + N[ice] + N[lnd] <= N[atm] + N[atm] + N[ocn] <= TotalTasks + N[c] = blocksize * NB[c], for c in [ice,lnd,ocn,atm] + + + T[c] >= C[c]_{i} - N[c]_{i} * + (C[c]_{i+1} - C[c]_{i}) / (N[c]_{i+1} - N[c]_{i}) + + N[c] * (C[c]_{i+1} - C[c]_{i}) + / (N[c]_{i+1} - N[c]_{i}), + for i=0..#data points (original + extrapolated, + c in [ice,lnd,ocn,atm] + all T vars >=0 + all N,NB vars integer + +This MILP is solved using the PuLP python interface to the COIN-CBC solver +https://pythonhosted.org/PuLP/ +https://www.coin-or.org/Cbc/ + + +************************************ +Extending the Load Balancing Tool +************************************ +The file $CIME_DIR/tools/load_balancing_tool/optimize_model.py +contains a base class OptimizeModel as well as an implementation class +IceLndAtmOcn. Any layout solver will look similar to IceLndAtmOcn +except for the components involved and the layout-specific constraints. + +Example class and inherited methods that should be overridden: + +file my_new_layout.py:: + + import optimize_model + + class MyNewLayout(optimize_model.OptimizeModel) + def get_required_components(self): + """ + Should be overridden by derived class. Return a list of required + components (capitalized) used in the layout. + Example: return ['ATM', 'LND', 'ICE'] + """ + + def optimize(self): + """ + Run the optimization. + Must set self.state using LpStatus object + LpStatusOptimal -> STATE_SOLVED_OK + LpStatusNotSolved -> STATE_UNSOLVED + LpStatusInfeasible -> STATE_SOLVED_BAD + LpStatusUnbounded -> STATE_SOLVED_BAD + LpStatusUndefined -> STATE_UNDEFINED + -- use self.set_state(lpstatus) -- + Returns state + + If solved, then solution will be stored in self.X dictionary, indexed + by variable name. Suggested convention: + 'Tice', 'Tlnd', ... for cost per component + 'Nice', 'Nlnd', ... for ntasks per component + 'NBice', 'NBlnd', ... for number of blocks per component + + The default implementation of get_solution() returns a dictionary + of these variable keys and their values. + """ + + def get_solution(self): + """ + Return a dictionary of the solution variables, can be overridden. + Default implementation returns values in self.X + """ + + +To use this new layout: + 1. save the class MyNewLayout in file my_new_layout.py + 2. make sure that my_new_layout.py is in PYTHONPATH + 3. Use those names in your execution command line argument to --layout + :: + + $ ./load_balancing_solve.py ... --layout my_new_layout.MyNewLayout + +To permanently add to CIME: + + 1. add MyNewLayout class to layouts.py + 2. run using '--layout MyNewLayout' + 3. add test in tests/load_balance_test.py that uses that name in command + line argument (see test for atm_lnd) + 4. make pull request + + +******* +Testing +******* + +To run the provided test suite: + + 1. set PYTHONPATH to include CIME libraries:: + + $ export CIME_DIR=/path/to/cime + $ export PYTHONPATH=$CIME_DIR/scripts:$CIME_DIR/tools/load_balancing_tool + + 2. To run an example:: + + $ cd $CIME_DIR/tools/load_balancing_tool + $ ./load_balancing_solve.py --json-input tests/example.json --blocksize 8 + Solving Mixed Integer Linear Program using PuLP interface to COIN-CBC + PuLP solver status: Solved + COST_ATM = 22.567587 + COST_ICE = 1.375768 + COST_LND = 1.316000 + COST_OCN = 15.745000 + COST_TOTAL = 23.943355 + NBLOCKS_ATM = 124 + NBLOCKS_ICE = 109 + NBLOCKS_LND = 15 + NBLOCKS_OCN = 4 + NTASKS_ATM = 992 + NTASKS_ICE = 872 + NTASKS_LND = 120 + NTASKS_OCN = 32 + NTASKS_TOTAL = 1024 + + 3. To run the test suite:: + + $ cd $CIME_DIR/tools/load_balancing_tool + $ ./tests/load_balancing_test.py diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/building-a-case.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/building-a-case.rst.txt new file mode 100644 index 00000000000..3f820171bc5 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/building-a-case.rst.txt @@ -0,0 +1,149 @@ +.. _building-a-case: + +****************** +Building a Case +****************** + +Once the case has been created and setup, its time to build the executable. +Several directories full of source code must be built all with the same compiler and flags. +**case.build** performs all build operations (setting dependecies, invoking Make, +creating the executable). + +.. _building-the-model: + +======================== +Calling **case.build** +======================== + +After calling `case.setup <../Tools_user/case.setup.html>`_ , run `case.build <../Tools_user/case.build.html>`_ to build the model executable. Running this will: + +1. Create the component namelists in ``$RUNDIR`` and ``$CASEROOT/CaseDocs``. +2. Create the necessary compiled libraries used by coupler and component models ``mct``, ``pio``, ``gptl`` and ``csm_share``. + The libraries will be placed in a path below ``$SHAREDLIBROOT``. +3. Create the necessary compiled libraries for each component model. These are be placed in ``$EXEROOT/bld/lib``. +4. Create the model executable (``$MODEL.exe``), which is placed in ``$EXEROOT``. + +You do not need to change the default build settings to create the executable, but it is useful to become familiar with them in order to make optimal use of the system. The CIME scripts provide you with a great deal of flexibility in customizing the build process. + +The **env_build.xml** variables control various aspects of building the executable. Most of the variables should not be modified, but users can modify these: + +- ``$BUILD_THREADED`` : if TRUE, the model will be built with OpenMP. + +- ``$DEBUG`` : if TRUE, the model is compiled with debugging instead of optimization flags. + +- ``$GMAKE_J`` : How many threads GNUMake should use while building. + +The best way to see what xml variables are in your ``$CASEROOT`` directory is to use the `xmlquery <../Tools_user/xmlquery.html>`_ command. For usage information, run: +:: + + > ./xmlquery --help + +To build the model, change to your ``$CASEROOT`` directory and execute **case.build**. +:: + + > cd $CASEROOT + > ./case.build + +Diagnostic comments appear as the build proceeds. + +The `case.build <../Tools_user/case.build.html>`_ command generates the utility and component libraries and the model executable, and it generates build logs for each component. +Each log file is named form: **$component.bldlog.$datestamp**. They are located in ``$BLDDIR``. If they are compressed (as indicated by a .gz file extension), the build ran successfully. + +Invoking `case.build <../Tools_user/case.build.html>`_ creates the following directory structure in ``$EXEROOT`` if the Intel compiler is used: +:: + + atm/, cpl/, esp/, glc/, ice/, intel/, lib/, lnd/, ocn/, rof/, wav/ + +Except for **intel/** and **lib/**, each directory contains an **obj/** subdirectory for the target model component's compiled object files. + +The *mct*, *pio*, *gptl* and *csm_share* libraries are placed in a directory tree that reflects their dependencies. See the **bldlog** for a given component to locate the library. + +Special **include** modules are placed in **lib/include**. The model executable (**cesm.exe** or **e3sm.exe**, for example) is placed directly in ``$EXEROOT``. + +Component namelists, component logs, output data sets, and restart files are placed in ``$RUNDIR``. +It is important to note that ``$RUNDIR`` and ``$EXEROOT`` are independent variables that are set in the **$CASEROOT/env_run.xml** file. + +.. _rebuilding-the-model: + +======================== +Rebuilding the model +======================== + +Rebuild the model under the following circumstances: + +If either **env_build.xml** or **Macros.make** has been modified, and/or if code is added to **SourceMods/src.**, it's safest to clean the build and rebuild from scratch as shown here: +:: + + > cd $CASEROOT + > ./case.build --clean-all + +If you have ONLY modified the PE layout in **env_mach_pes.xml**, a clean may not be required. +:: + + > cd $CASEROOT + > ./case.build + +If the threading has been changed (turned on or off) in any component since the previous build, the build script should fail with the following error and suggestion that the model be rebuilt from scratch: +:: + + ERROR SMP STATUS HAS CHANGED + SMP_BUILD = a0l0i0o0g0c0 + SMP_VALUE = a1l0i0o0g0c0 + A manual clean of your obj directories is strongly recommended. + You should execute the following: + ./case.build --clean + ./case.build + + ---- OR ---- + + You can override this error message at your own risk by executing: + ./xmlchange SMP_BUILD=0 + Then rerun the build script interactively. + +If there is any doubt, rebuild. + +Run this to clean all of the model components (except for support libraries such as *mct* and *gptl*): + :: + + > case.build --clean + +Run this to clean everything associated with the build: + :: + + > case.build --clean-all + +You can also clean an individual component as shown here, where "compname" is the name of the component you want to clean (for example, atm, clm, pio and so on). + :: + + > case.build --clean compname + +Review the **help** text for more information. + +.. _inputdata: + +========== +Input data +========== + +All active components and data components use input data sets. In order to run CIME and the CIME-compliant active components, a local disk needs the directory tree that is specified by the xml variable ``$DIN_LOC_ROOT`` to be populated with input data. + +Input data is provided as part of the CIME release via data from a subversion input data server. It is downloaded from the server on an as-needed basis determined by the case. Data may already exist in the default local file system's input data area as specified by ``$DIN_LOC_ROOT``. + +Input data can occupy significant space on a system, so users should share a common ``$DIN_LOC_ROOT`` directory on each system if possible. + +The build process handles input data as follows: + +- The **buildnml** scripts in the various component ``cime_config`` directories create listings of required component input data sets in the ``Buildconf/$component.input_data_list`` files. + +- `check_input_data <../Tools_user/check_input_data.html>`_ , which is called by `case.build <../Tools_user/case.build.html>`_ , checks for the presence of the required input data files in the root directory ``$DIN_LOC_ROOT``. + +- If all required data sets are found on the local disk, the build can proceed. + +- If any of the required input data sets are not found locally, the + files that are missing are listed. At this point, you must obtain + the required data from the input data server with `check_input_data + <../Tools_user/check_input_data.html>`_ as shown here: :: + + check_input_data --download + +The **env_run.xml** variables ``$DIN_LOC_ROOT`` and ``$DIN_LOC_ROOT_CLMFORC`` determine where you should expect input data to reside on a local disk. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-change-namelist.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-change-namelist.rst.txt new file mode 100644 index 00000000000..54497898d2b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-change-namelist.rst.txt @@ -0,0 +1,367 @@ +.. _namelist-gen: + +Customizing your input variables +================================ + +CIME and CIME-compliant components primarily use Fortran namelists to control runtime options. Some components use +other text-based files for runtime options. + +All CIME-compliant components generate their input variable files using a **buildnml** script typically located in the +component's **cime_config** directory (or other location as set in **config_file.xml**). +**buildnml** may call other scripts to complete construction of the input file. + +For example, the CIME data atmosphere model (DATM) generates namelists using the script **$CIMEROOT/components/data_comps/datm/cime_config/buildnml**. + +You can customize a model's namelists in one of two ways: + +1. by editing the **$CASEROOT/user_nl_xxx** files + + These files should be modified via keyword-value pairs that correspond to new namelist or input data settings. They use the + syntax of Fortran namelists. + +2. by calling `xmlchange <../Tools_user/xmlchange.html>`_ to modify xml variables in your ``$CASEROOT``. + + Many of these variables are converted to Fortran namelist values for input by the models. Variables that have + to be coordinated between models in a coupled system (such as how many steps to run for) are usually in a CIME xml file. + +You can generate the component namelists by running `preview_namelists <../Tools_user/preview_namelists.html>`_ from ``$CASEROOT``. + +This results in the creation of component namelists (for example, atm_in, lnd_in, and so on) in ``$CASEROOT/CaseDocs/``. + +.. warning:: The namelist files in ``CaseDocs`` are there only for user reference and **SHOULD NOT BE EDITED** since they are overwritten every time `preview_namelists <../Tools_user/preview_namelists.html>`_ and `case.submit <../Tools_user/case.submit.html>`_ are called and the files read at runtime are not the ones in ``CaseDocs``. + +.. _use-cases-modifying-driver-namelists: + +Customizing driver input variables +------------------------------------------- + +The driver input namelists/variables are contained in the files, **drv_in**, **drv_flds_in** and **seq_maps.rc**. Note that **seq_maps.rc** has a different file format than the other two input files. + +All driver namelist variables are defined in the file **$CIMEROOT/src/drivers/mct/cime_config/namelist_definition_drv.xml**. + +The variables that can be changed only by modifying xml variables appear with the *entry* attribute ``modify_via_xml="xml_variable_name"``. + +All other driver namelist variables can be modified by by adding a keyword value pair at the end of ``user_nl_cpl``. + +For example, to change the driver namelist value of ``eps_frac`` to ``1.0e-15``, add the following line to the end of the ``user_nl_cpl``: + +:: + + eps_frac = 1.0e-15 + +On the hand, to change the driver namelist value of the starting year/month/day, ``start_ymd`` to ``18500901``, use the command: + +:: + + ./xmlchange RUN_STARTDATE=1850-09-01 + +Note that + +To see the result of change, call `preview_namelists <../Tools_user/preview_namelists.html>`_ and verify that the new value appears in **CaseDocs/drv_in**. + +.. _basic_example: + +Setting up a multi-year run +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This shows all of the steps necessary to do a multi-year simulation starting from a "cold start" for all components. The +compset and resolution in this example are for a CESM fully-coupled case but the steps are similar for other models and cases. + +1. Create a new case named EXAMPLE_CASE in your **$HOME** directory. + + :: + + > cd $CIME/scripts + > ./create_newcase --case ~/EXAMPLE_CASE --compset B1850 --res f09_g17 + +2. Check the pe-layout by running **./pelayout**. Make sure it is suitable for your machine. + If it is not use `xmlchange <../Tools_user/xmlchange.html>`_ or `pelayout <../Tools_user/pelayout.html>`_ to modify your pe-layout. + Then setup your case and build your executable. + + :: + + > cd ~/EXAMPLE_CASE + > ./case.setup + > ./case.build + + .. warning:: The case.build script can be compute intensive and may not be suitable to run on a login node. As an alternative you would submit this job to an interactive queue. + For example, on the NCAR cheyenne platform, you would use **qcmd -- ./case.build** to do this. + +3. In your case directory, set the job to run 12 model months, set the wallclock time, and submit the job. + + :: + + > ./xmlchange STOP_OPTION=nmonths + > ./xmlchange STOP_N=12 + > ./xmlchange JOB_WALLCLOCK_TIME=06:00 --subgroup case.run + > ./case.submit + +4. Make sure the run succeeded. + + You should see the following line or similar at the end of the **cpl.log** file in your run directory or your short term archiving directory, set by ``$DOUT_S_ROOT``. + + :: + + (seq_mct_drv): =============== SUCCESSFUL TERMINATION OF CPL7-cesm =============== + +5. In the same case directory, Set the case to resubmit itself 10 times so it will run a total of 11 years (including the initial year), and resubmit the case. (Note that a resubmit will automatically change the run to be a continuation run). + + :: + + > ./xmlchange RESUBMIT=10 + > ./case.submit + + By default resubmitted runs are not submitted until the previous run is completed. For 10 1-year runs as configured in this + example, CIME will first submit a job for one year, then when that job completes it will submit a job for another year. There will be + only one job in the queue at a time. + To change this behavior, and submit all jobs at once (with batch dependencies such that only one job is run at a time), use the command: + + :: + + > ./case.submit --resubmit-immediate + +Setting up a branch or hybrid run +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A branch or hybrid run uses initialization data from a previous run. Here is an example in which a valid load-balanced scenario is assumed. + +1. The first step in setting up a branch or hybrid run is to create a new case. A CESM compset and resolution is assumed below. + + :: + + > cd $CIMEROOT/scripts + > create_newcase --case ~/NEW_CASE --compset B1850 --res f09_g17 + > cd ~/NEW_CASE + + +2. For a branch run, use the following `xmlchange <../Tools_user/xmlchange.html>`_ commands to make **NEW_CASE** be a branch off of **EXAMPLE_CASE** at year 0001-02-01. + + :: + + > ./xmlchange RUN_TYPE=branch + > ./xmlchange RUN_REFCASE=EXAMPLE_CASE + > ./xmlchange RUN_REFDATE=0001-02-01 + +3. For a hybrid run, use the following `xmlchange <../Tools_user/xmlchange.html>`_ command to start **NEW_CASE** from **EXAMPLE_CASE** at year 0001-02-01. + + :: + + > ./xmlchange RUN_TYPE=hybrid + > ./xmlchange RUN_REFCASE=EXAMPLE_CASE + > ./xmlchange RUN_REFDATE=0001-02-01 + + For a branch run, your **env_run.xml** file for **NEW_CASE** should be identical to the file for **EXAMPLE_CASE** except for the ``$RUN_TYPE`` setting. + + Also, modifications introduced into **user_nl_** files in **EXAMPLE_CASE** should be reintroduced in **NEW_CASE**. + +4. Next, set up and build your case executable. + :: + + > ./case.setup + > ./case.build + +5. Pre-stage the necessary restart/initial data in ``$RUNDIR``. Assume for this example that it was created in the **/rest/0001-02-01-00000** directory shown here: + + :: + > cd $RUNDIR + > cp /user/archive/EXAMPLE_CASE/rest/0001-02-01-00000/* . + + It is assumed that you already have a valid load-balanced scenario. + Go back to the case directory, set the job to run 12 model months, and submit the job. + :: + + > cd ~/NEW_CASE + > ./xmlchange STOP_OPTION=nmonths + > ./xmlchange STOP_N=12 + > ./xmlchange JOB_WALLCLOCK_TIME=06:00 + > ./case.submit + +6. Make sure the run succeeded (see above directions) and then change + the run to a continuation run. Set it to resubmit itself 10 times + so it will run a total of 11 years (including the initial year), + then resubmit the case. + :: + + > ./xmlchange CONTINUE_RUN=TRUE + > ./xmlchange RESUMIT=10 + > ./case.submit + +.. _changing-data-model-namelists: + +Customizing data model input variable and stream files +------------------------------------------------------ + +Each data model can be runtime-configured with its own namelist. + +Data Atmosphere (DATM) +~~~~~~~~~~~~~~~~~~~~~~ + +DATM is discussed in detail in :ref:`data atmosphere overview ` (**link currently broken**). +DATM can be user-customized by changing either its *namelist input files* or its *stream files*. +The namelist file for DATM is **datm_in** (or **datm_in_NNN** for multiple instances). + +- To modify **datm_in** or **datm_in_NNN**, add the appropriate keyword/value pair(s) for the namelist changes that you want at the end of the **user_nl_datm** file or the **user_nl_datm_NNN** file in ``$CASEROOT``. + +- To modify the contents of a DATM stream file, first run `preview_namelists <../Tools_user/preview_namelists.html>`_ to list the *streams.txt* files in the **CaseDocs/** directory. Then, in the same directory: + + 1. Make a *copy* of the file with the string *"user_"* prepended. + ``> cp datm.streams.txt.[extension] user_datm.streams.txt[extension.`` + 2. **Change the permissions of the file to be writeable.** (chmod 644) + ``chmod 644 user_datm.streams.txt[extension`` + 3. Edit the **user_datm.streams.txt.*** file. + +**Example** + +If the stream txt file is **datm.streams.txt.CORE2_NYF.GISS**, the modified copy should be **user_datm.streams.txt.CORE2_NYF.GISS**. +After calling `preview_namelists <../Tools_user/preview_namelists.html>`_ again, your edits should appear in **CaseDocs/datm.streams.txt.CORE2_NYF.GISS**. + +Data Ocean (DOCN) +~~~~~~~~~~~~~~~~~~~~~~ + +DOCN is discussed in detail in :ref:`data ocean overview ` (**link currently broken**). +DOCN can be user-customized by changing either its namelist input or its stream files. +The namelist file for DOCN is **docn_in** (or **docn_in_NNN** for multiple instances). + +- To modify **docn_in** or **docn_in_NNN**, add the appropriate keyword/value pair(s) for the namelist changes that you want at the end of the file in ``$CASEROOT``. + +- To modify the contents of a DOCN stream file, first run `preview_namelists <../Tools_user/preview_namelists.html>`_ to list the *streams.txt* files in the **CaseDocs/** directory. Then, in the same directory: + + 1. Make a *copy* of the file with the string *"user_"* prepended. + ``> cp docn.streams.txt.[extension] user_docn.streams.txt[extension.`` + 2. **Change the permissions of the file to be writeable.** (chmod 644) + ``chmod 644 user_docn.streams.txt[extension`` + 3. Edit the **user_docn.streams.txt.*** file. + +**Example** + +As an example, if the stream text file is **docn.stream.txt.prescribed**, the modified copy should be **user_docn.streams.txt.prescribed**. +After changing this file and calling `preview_namelists <../Tools_user/preview_namelists.html>`_ again, your edits should appear in **CaseDocs/docn.streams.txt.prescribed**. + +Data Sea-ice (DICE) +~~~~~~~~~~~~~~~~~~~~~~ + +DICE is discussed in detail in :ref:`data sea-ice overview ` (**link currently broken**). +DICE can be user-customized by changing either its namelist input or its stream files. +The namelist file for DICE is ``dice_in`` (or ``dice_in_NNN`` for multiple instances) and its values can be changed by editing the ``$CASEROOT`` file ``user_nl_dice`` (or ``user_nl_dice_NNN`` for multiple instances). + +- To modify **dice_in** or **dice_in_NNN**, add the appropriate keyword/value pair(s) for the namelist changes that you want at the end of the file in ``$CASEROOT``. + +- To modify the contents of a DICE stream file, first run `preview_namelists <../Tools_user/preview_namelists.html>`_ to list the *streams.txt* files in the **CaseDocs/** directory. Then, in the same directory: + + 1. Make a *copy* of the file with the string *"user_"* prepended. + ``> cp dice.streams.txt.[extension] user_dice.streams.txt[extension.`` + 2. **Change the permissions of the file to be writeable.** (chmod 644) + ``chmod 644 user_dice.streams.txt[extension`` + 3. Edit the **user_dice.streams.txt.*** file. + +Data Land (DLND) +~~~~~~~~~~~~~~~~~~~~~~ + +DLND is discussed in detail in :ref:`data land overview ` (**link currently broken**). +DLND can be user-customized by changing either its namelist input or its stream files. +The namelist file for DLND is ``dlnd_in`` (or ``dlnd_in_NNN`` for multiple instances) and its values can be changed by editing the ``$CASEROOT`` file ``user_nl_dlnd`` (or ``user_nl_dlnd_NNN`` for multiple instances). + +- To modify **dlnd_in** or **dlnd_in_NNN**, add the appropriate keyword/value pair(s) for the namelist changes that you want at the end of the file in ``$CASEROOT``. + +- To modify the contents of a DLND stream file, first run `preview_namelists <../Tools_user/preview_namelists.html>`_ to list the *streams.txt* files in the **CaseDocs/** directory. Then, in the same directory: + + 1. Make a *copy* of the file with the string *"user_"* prepended. + ``> cp dlnd.streams.txt.[extension] user_dlnd.streams.txt[extension.`` + 2. **Change the permissions of the file to be writeable.** (chmod 644) + ``chmod 644 user_dlnd.streams.txt[extension`` + 3. Edit the **user_dlnd.streams.txt.*** file. + +Data River (DROF) +~~~~~~~~~~~~~~~~~~~~~~ + +DROF is discussed in detail in :ref:`data river overview ` (**link currently broken**). +DROF can be user-customized by changing either its namelist input or its stream files. +The namelist file for DROF is ``drof_in`` (or ``drof_in_NNN`` for multiple instances) and its values can be changed by editing the ``$CASEROOT`` file ``user_nl_drof`` (or ``user_nl_drof_NNN`` for multiple instances). + +- To modify **drof_in** or **drof_in_NNN**, add the appropriate keyword/value pair(s) for the namelist changes that you want at the end of the file in ``$CASEROOT``. + +- To modify the contents of a DROF stream file, first run `preview_namelists <../Tools_user/preview_namelists.html>`_ to list the *streams.txt* files in the **CaseDocs/** directory. Then, in the same directory: + + 1. Make a *copy* of the file with the string *"user_"* prepended. + ``> cp drof.streams.txt.[extension] user_drof.streams.txt[extension.`` + 2. **Change the permissions of the file to be writeable.** (chmod 644) + ``chmod 644 user_drof.streams.txt[extension`` + 3. Edit the **user_drof.streams.txt.*** file. + + +Customizing CESM active component-specific namelist settings +------------------------------------------------------------ + +CAM +~~~ + +CIME calls **$SRCROOT/components/cam/cime_config/buildnml** to generate the CAM's namelist variables. + +CAM-specific CIME xml variables are set in **$SRCROOT/components/cam/cime_config/config_component.xml** and are used by CAM's **buildnml** script to generate the namelist. + +For complete documentation of namelist settings, see `CAM namelist variables `_. + +To modify CAM namelist settings, add the appropriate keyword/value pair at the end of the **$CASEROOT/user_nl_cam** file. (See the documentation for each file at the top of that file.) + +For example, to change the solar constant to 1363.27, modify **user_nl_cam** file to contain the following line at the end: +:: + + solar_const=1363.27 + +To see the result, call `preview_namelists <../Tools_user/preview_namelists.html>`_ and verify that the new value appears in **CaseDocs/atm_in**. + +CLM +~~~ + +CIME calls **$SRCROOT/components/clm/cime_config/buildnml** to generate the CLM namelist variables. + +CLM-specific CIME xml variables are set in **$SRCROOT/components/clm/cime_config/config_component.xml** and are used by CLM's **buildnml** script to generate the namelist. + +For complete documentation of namelist settings, see `CLM namelist variables `_. + +To modify CLM namelist settings, add the appropriate keyword/value pair at the end of the **$CASEROOT/user_nl_clm** file. + +To see the result, call `preview_namelists <../Tools_user/preview_namelists.html>`_ and verify that the changes appear correctly in **CaseDocs/lnd_in**. + +MOSART +~~~~~~ + +CIME calls **$SRCROOT/components/mosart/cime_config/buildnml** to generate the MOSART namelist variables. + +To modify MOSART namelist settings, add the appropriate keyword/value pair at the end of the **$CASEROOT/user_nl_rtm** file. + +To see the result of your change, call `preview_namelists <../Tools_user/preview_namelists.html>`_ and verify that the changes appear correctly in **CaseDocs/rof_in**. + +CICE +~~~~ + +CIME calls **$SRCROOT/components/cice/cime_config/buildnml** to generate the CICE namelist variables. + +For complete documentation of namelist settings, see `CICE namelist variables `_. + +To modify CICE namelist settings, add the appropriate keyword/value pair at the end of the **$CASEROOT/user_nl_cice** file. +(See the documentation for each file at the top of that file.) +To see the result of your change, call `preview_namelists <../Tools_user/preview_namelists.html>`_ and verify that the changes appear correctly in **CaseDocs/ice_in**. + +In addition, `case.setup <../Tools_user/case.setup.html>`_ creates CICE's compile time `block decomposition variables `_ in **env_build.xml**. + +POP2 +~~~~ + +CIME calls **$SRCROOT/components/pop2/cime_config/buildnml** to generate the POP2 namelist variables. + +For complete documentation of namelist settings, see `POP2 namelist variables `_. + +To modify POP2 namelist settings, add the appropriate keyword/value pair at the end of the **$CASEROOT/user_nl_pop2** file. +(See the documentation for each file at the top of that file.) +To see the result of your change, call `preview_namelists <../Tools_user/preview_namelists.html>`_ and verify that the changes appear correctly in **CaseDocs/ocn_in**. + +CISM +~~~~ + +See `CISM namelist variables `_ for a complete description of the CISM runtime namelist variables. This includes variables that appear both in **cism_in** and in **cism.config**. + +To modify any of these settings, add the appropriate keyword/value pair at the end of the **user_nl_cism** file. (See the documentation for each file at the top of that file.) +Note that there is no distinction between variables that will appear in **cism_in** and those that will appear in **cism.config**: simply add a new variable setting in **user_nl_cism**, and it will be added to the appropriate place in **cism_in** or **cism.config**. +To see the result of your change, call `preview_namelists <../Tools_user/preview_namelists.html>`_ and verify that the changes appear correctly in **CaseDocs/cism_in** and **CaseDocs/cism.config**. + +Some CISM runtime settings are sets via **env_run.xml**, as documented in `CISM runtime variables `_. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-config.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-config.rst.txt new file mode 100644 index 00000000000..f2953f0e9e0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-config.rst.txt @@ -0,0 +1,108 @@ +.. _customizing-cime: + +=============================== +CIME user config directory +=============================== + +CIME recognizes a user-created custom configuration directory, ``$HOME/.cime``. The contents of this directory may include any of the following files: + +* ``config`` + + This file must have a format which follows the python config format. See `Python Config Parser Examples `_ + + In the [main] block you can set the following variables: + + * ``CIME_MODEL=[e3sm, cesm]`` + + * ``PROJECT=`` + + Used to specify a project id for compute accounting and directory permissions when on a batch system. + + * ``CHARGE_ACCOUNT=`` + + Used to override the accounting (only) aspect of PROJECT + + * ``MAIL_USER=`` + + Used to request a non-default email for batch summary output + + * ``MAIL_TYPE=[never,all,begin,fail,end]`` + + Any **or** all the above valid values can be set to list the batch events that emails will be sent for. + + * **create_test** input arguments + + Any argument to the **create_test** script can have its default changed by listing it here with the new default. + + * The following is an example ``config`` file: + + :: + + [main] + CIME_MODEL=cesm + SRCROOT=$CIMEROOT/.. + MAIL_TYPE=end + [create_test] + MAIL_TYPE=fail + +* ``config_machines.xml`` + + This file must the same format as **$CIMEROOT/config/$model/machines/config_machines.xml** with the appropriate definitions for your machine. + + If you have a customized version of this file in the directory ``$HOME/.cime``, it will **append** to the file in ``$CIMEROOT/config/$model/machines/config_machines.xml``. + + For an example of a **config_machines.xml** file for a linux cluster, look at **$CIMEROOT/config/xml_schemas/config_machines_template.xml**. + +* ``cmake_macros`` + + This subdirectory contains a hierarchy of cmake macros files which + are used to generate the flags to be used in the compilation of a + case. The cmake macro files are examined in the following order, with later files takeing precidence over earlier ones. + + * universal.cmake + * *COMPILER*.cmake + * *OS*.cmake + * *MACHINE*.cmake + * *COMPILER*_*OS*.cmake + * *COMPILER*_*MACHINE*.cmake + +* ``config_compilers.xml`` **DEPRECATED use cmake_macros** + + This file permits you to customize compiler settings for your machine and is appended to the file **$CIMEROOT/config/$model/machines/config_compilers.xml**. + + The following is an example of what would be needed for customized a ibm compiler flags on a BlueGeneQ machine. + + :: + + + + + -g -qfullpath -qmaxmem=-1 -qspillsize=2500 -qextname=flush + -O3 -qstrict -qinline=auto + -qsmp=omp + -qsmp=omp:noopt + -DLINUX + --build=powerpc-bgp-linux --host=powerpc64-suse-linux + -Wl,--relax -Wl,--allow-multiple-definition + + + +* ``config_batch.xml`` + + This file permits you to customize batch settings for you machine and is appended to the file **$CIMEROOT/config/$model/machines/config_batch.xml**. + + The following is an example of what would be needed to add batch settings for pbs on the machine brutus. + + :: + + + + + + -S {{ shell }} + + + batch + + + diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-customize.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-customize.rst.txt new file mode 100644 index 00000000000..6431f5c388a --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-customize.rst.txt @@ -0,0 +1,76 @@ +.. _customizing-cime: + +=========================== +CIME config and hooks +=========================== + +CIME provides the ability to define model specific config and hooks. + +The config alters CIME's runtime and the hooks are triggered during their event. + +----------------------------------- +How does CIME load customizations? +----------------------------------- + +CIME will search ``cime_config/customize`` and load any python found under this directory or it's children. + +Any variables, functions or classes loaded are available from the ``CIME.customize`` module. + +--------------------------- +CIME config +--------------------------- + +Available config and descriptions. + +================================= ======================= ===== ================================================================================================================================================================================================================================ +Variable Default Type Description +================================= ======================= ===== ================================================================================================================================================================================================================================ +additional_archive_components ('drv', 'dart') tuple Additional components to archive. +allow_unsupported True bool If set to `True` then unsupported compsets and resolutions are allowed. +baseline_store_teststatus True bool If set to `True` and GENERATE_BASELINE is set then a teststatus.log is created in the case's baseline. +build_cime_component_lib True bool If set to `True` then `Filepath`, `CIME_cppdefs` and `CCSM_cppdefs` directories are copied from CASEBUILD directory to BUILDROOT in order to build CIME's internal components. +build_model_use_cmake False bool If set to `True` the model is built using using CMake otherwise Make is used. +calculate_mode_build_cost False bool If set to `True` then the TestScheduler will set the number of processors for building the model to min(16, (($GMAKE_J * 2) / 3) + 1) otherwise it's set to 4. +case_setup_generate_namelist False bool If set to `True` and case is a test then namelists are created during `case.setup`. +check_invalid_args True bool If set to `True` then script arguments are checked for being valid. +check_machine_name_from_test_name True bool If set to `True` then the TestScheduler will use testlists to parse for a list of tests. +common_sharedlibroot True bool If set to `True` then SHAREDLIBROOT is set for the case and SystemTests will only build the shared libs once. +copy_cesm_tools True bool If set to `True` then CESM specific tools are copied into the case directory. +copy_cism_source_mods True bool If set to `True` then `$CASEROOT/SourceMods/src.cism/source_cism` is created and a README is written to directory. +copy_e3sm_tools False bool If set to `True` then E3SM specific tools are copied into the case directory. +create_bless_log False bool If set to `True` and comparing test to baselines the most recent bless is added to comments. +create_test_flag_mode cesm str Sets the flag mode for the `create_test` script. When set to `cesm`, the `-c` flag will compare baselines against a give directory. +default_short_term_archiving True bool If set to `True` and the case is not a test then DOUT_S is set to True and TIMER_LEVEL is set to 4. +driver_choices ('mct', 'nuopc') tuple Sets the available driver choices for the model. +driver_default nuopc str Sets the default driver for the model. +enable_smp True bool If set to `True` then `SMP=` is added to model compile command. +make_case_run_batch_script False bool If set to `True` and case is not a test then `case.run.sh` is created in case directory from `$MACHDIR/template.case.run.sh`. +mct_path {srcroot}/libraries/mct str Sets the path to the mct library. +serialize_sharedlib_builds True bool If set to `True` then the TestScheduler will use `proc_pool + 1` processors to build shared libraries otherwise a single processor is used. +set_comp_root_dir_cpl True bool If set to `True` then COMP_ROOT_DIR_CPL is set for the case. +share_exes False bool If set to `True` then the TestScheduler will share exes between tests. +shared_clm_component True bool If set to `True` and then the `clm` land component is built as a shared lib. +sort_tests False bool If set to `True` then the TestScheduler will sort tests by runtime. +test_custom_project_machine melvin str Sets the machine name to use when testing a machine with no PROJECT. +test_mode cesm str Sets the testing mode, this changes various configuration for CIME's unit and system tests. +ufs_alternative_config False bool If set to `True` and UFS_DRIVER is set to `nems` then model config dir is set to `$CIMEROOT/../src/model/NEMS/cime/cime_config`. +use_kokkos False bool If set to `True` and CAM_TARGET is `preqx_kokkos`, `theta-l` or `theta-l_kokkos` then kokkos is built with the shared libs. +use_nems_comp_root_dir False bool If set to `True` then COMP_ROOT_DIR_CPL is set using UFS_DRIVER if defined. +use_testreporter_template True bool If set to `True` then the TestScheduler will create `testreporter` in $CIME_OUTPUT_ROOT. +verbose_run_phase False bool If set to `True` then after a SystemTests successful run phase the elapsed time is recorded to BASELINE_ROOT, on a failure the test is checked against the previous run and potential breaking merges are listed in the testlog. +xml_component_key COMP_ROOT_DIR_{} str The string template used as the key to query the XML system to find a components root directory e.g. the template `COMP_ROOT_DIR_{}` and component `LND` becomes `COMP_ROOT_DIR_LND`. +================================= ======================= ===== ================================================================================================================================================================================================================================ + +--------------------------- +CIME hooks +--------------------------- + +Available hooks and descriptions. + +======================================= ================================= +Function Description +======================================= ================================= +``save_build_provenance(case, lid)`` Called after the model is built. +``save_prerun_provenance(case, lid)`` Called before the model is run. +``save_postrun_provenance(case, lid)`` Called after the model is run. +======================================= ================================= diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-dir.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-dir.rst.txt new file mode 100644 index 00000000000..9bdb6540a63 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-dir.rst.txt @@ -0,0 +1,46 @@ +.. _cime-dir: + +****************** +Directory content +****************** + +If you use CIME as part of a climate model or standalone, the content of the **cime** directory is the same. + +If you are using it as part of a climate model, **cime** is usually one of the first subdirectories under the main directory. + +.. table:: **CIME directory in a climate model** + + ====================== =================================== + Directory or Filename Description + ====================== =================================== + README, etc. typical top-level directory content + components/ source code for active models + cime/ All of CIME code + ====================== =================================== + +CIME's content is split into several subdirectories. Users should start in the **scripts/** subdirectory. + +.. table:: **CIME directory content** + + ========================== ================================================================== + Directory or Filename Description + ========================== ================================================================== + **CIME/** **The main CIME source** + CIME/ParamGen Python tool for generating runtime params + CIME/Servers Scripts to interact with input data servers + CIME/SystemTests Scripts for create_test tests. + CIME/Tools Auxillary tools, scripts and functions. + CMakeLists.txt For building with CMake + CONTRIBUTING.md Guide for contributing to CIME + ChangeLog Developer-maintained record of changes to CIME + ChangeLog_template Template for an entry in ChangeLog + LICENSE.TXT The CIME license + MANIFEST.in + README.md README in markdown language + conftest.py + doc Documentation for CIME in rst format + docker Container for CIME testing + **scripts/** **The CIME user interface** + **tools/** **Standalone climate modeling tools** + utils/ Some Perl source code needed by some prognostic components + ========================== ================================================================== diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-internals.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-internals.rst.txt new file mode 100644 index 00000000000..3f31dd7cac6 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cime-internals.rst.txt @@ -0,0 +1,50 @@ +.. _cime-internals: + +======================== +Main Configuration File +======================== + +The file **$CIMEROOT/config/[cesm,e3sm]/config_files.xml** contains all model-specific information that CIME uses to determine compsets, compset component settings, model grids, machines, batch queue settings, and compiler settings. It contains the following xml nodes, which are discussed below or in subsequent sections of this guide. +:: + + compset definitions: + + + component specific compset settings: + + + + + + + + + + + + pe-settings: + + + grid definitions: + + + machine specific definitions: + + + + + + testing: + + + + + + archiving: + + + CIME components namelists definitions: + + + user-mods directories: + diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/cloning-a-case.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cloning-a-case.rst.txt new file mode 100644 index 00000000000..948628464e4 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/cloning-a-case.rst.txt @@ -0,0 +1,66 @@ +.. _cloning-a-case: + +************************** +Cloning a Case +************************** + +If you have access to a run that you want to clone, the +`create_clone <../Tools_user/create_clone.html>`_ command will create a new case and run `case.setup <../Tools_user/case.setup.html>`_ +while preserving local modifications to the case. + +Here is a simple example: +:: + + > cd $CIMEROOT/scripts + > create_clone --case $CASEROOT --clone $CLONEROOT + > cd $CASEROOT + > case.build + > case.submit + +The `create_clone <../Tools_user/create_clone.html>`_ script preserves any local namelist modifications +made in the **user_nl_xxxx** files as well as any source code +modifications in the **SourceMods/** directory tree. Otherwise, your **$CASEROOT** directory +directory will appear as if `create_newcase <../Tools_user/create_newcase.html>`_ had just been run. + +**Important**: Do not change anything in the **env_case.xml** file. + +See the **help** text for more usage information. + +:: + + > create_clone --help + +`create_clone <../Tools_user/create_clone.html>`_ has several useful optional arguments. To point to +the executable of the original case you are cloning from. + +:: + + > create_clone --case $CASEROOT --clone $CLONEROOT --keepexe + > cd $CASEROOT + > case.submit + +If the ``--keepexe`` optional argument is used, then no SourceMods +will be permitted in the cloned directory. A link will be made when +the cloned case is created pointing the cloned SourceMods/ directory +to the original case SourceMods directory. + +.. warning:: No changes should be made to ``env_build.xml`` or ``env_mach_pes.xml`` in the cloned directory. + +`create_clone <../Tools_user/create_clone.html>`_ also permits you to invoke the ``shell_commands`` + and ``user_nl_xxx`` files in a user_mods directory by calling: + +:: + + > create_clone --case $CASEROOT --clone $CLONEROOT --user-mods-dir USER_MODS_DIR [--keepexe] + +Note that an optional ``--keepexe`` flag can also be used in this case. + +.. warning:: If there is a ``shell_commands`` file, it should not have any changes to xml variables in either ``env_build.xml`` or ``env_mach_pes.xml``. + +Another approach to duplicating a case is to use the information in +the case's **README.case** and **CaseStatus** files to create a new +case and duplicate the relevant `xmlchange <../Tools_user/xmlchange.html>`_ commands that were +issued in the original case. This alternative will *not* preserve any +local modifications that were made to the original case, such as +source-code or build-script revisions; you will need to import those +changes manually. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/compsets.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/compsets.rst.txt new file mode 100644 index 00000000000..f57a3d9b65c --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/compsets.rst.txt @@ -0,0 +1,194 @@ +.. _compsets: + +=============== +Component sets +=============== + +In CIME, multiple components can define compsets that are targeted to their model development needs. + +Each component supports a set of compset longnames that are used in testing and supported in out of the box configurations. + +To determine if the compset name to `create_newcase <../Tools_user/create_newcase.html>`_ is a supported component, CIME looks in the **config_files.xml** file and parses the +the xml element ``COMPSETS_SPEC_FILE`` in order to determine which component is defining the compset. + +In the case of CESM, this xml element has the contents shown here, where ``$SRCROOT`` is the root of your CESM sandbox and contains ``$CIMEROOT`` as a subdirectory: + +:: + + + char + unset + + $SRCROOT/cime_config/config_compsets.xml + $CIMEROOT/src/drivers/mct/cime_config/config_compsets.xml + $SRCROOT/components/cam/cime_config/config_compsets.xml + $SRCROOT/components/cism/cime_config/config_compsets.xml + $SRCROOT/components/clm/cime_config/config_compsets.xml + $SRCROOT/components/cice/cime_config/config_compsets.xml + $SRCROOT/components/pop/cime_config/config_compsets.xml + + case_last + env_case.xml + file containing specification of all compsets for primary component (for documentation only - DO NOT EDIT) + $CIMEROOT/config/xml_schemas/config_compsets.xsd + + + +Every file listed in COMPSETS_SPEC_FILE will be searched for the compset specified in the call to create_newcase. + +CIME will note which component's config_compsets.xml had the matching compset name and that component will be treated as +the **primary component** As an example, the primary component for a compset that has a prognostic atmosphere, +land and cice (in prescribed mode) and a data ocean is the atmosphere component (for cesm this is CAM) because the compset +is defined, using the above example, in ``$SRCROOT/components/cam/cime_config/config_compsets.xml`` +In a compset where all components are prognostic, the primary component will be **allactive**. + +.. _defining-compsets: + +Compset longname +------------------- + +Each config_compsets.xml file has a list of allowed component sets in the form of a longname and an alias. + +A compset longname has this form:: + + TIME_ATM[%phys]_LND[%phys]_ICE[%phys]_OCN[%phys]_ROF[%phys]_GLC[%phys]_WAV[%phys]_ESP[_BGC%phys] + +Supported values for each element of the longname:: + + TIME = model time period (e.g. 1850, 2000, 20TR, SSP585...) + + CIME supports the following values for ATM,LND,ICE,OCN,ROF,GLC,WAV and ESP. + ATM = [DATM, SATM, XATM] + LND = [DLND, SLND, XLND] + ICE = [DICE, SICE, SICE] + OCN = [DOCN, SOCN, XOCN] + ROF = [DROF, SROF, XROF] + GLC = [SGLC, XGLC] + WAV = [SWAV, XWAV] + ESP = [SESP] + +A CIME-driven model may have other options available. Use `query_config <../Tools_user/query_config.html>`_ to determine the available options. + +The OPTIONAL %phys attributes specify sub-modes of the given system. +For example, DOCN%DOM is the DOCN data ocean (rather than slab-ocean) mode. +**All** the possible %phys choices for each component are listed by calling `query_config --compsets <../Tools_user/query_config.html>`_. +**All** data models have a %phys option that corresponds to the data model mode. + +.. _defining-component-specific-compset-settings: + +Component specific settings in a compset +----------------------------------------- + +Every model component also contains a **config_component.xml** file that has two functions: + +1. Specifying the component-specific definitions of what can appear after the ``%`` in the compset longname, (for example, ``DOM`` in ``DOCN%DOM``). + +2. Specifying the compset-specific ``$CASEROOT`` xml variables. + +CIME first parses the following nodes to identify appropriate **config_component.xml** files for the driver. There are two such files; one is model-independent and the other is model-specific. +:: + + + ... + $CIMEROOT/driver_cpl/cime_config/config_component.xml + .. + + + + $CIMEROOT/driver_cpl/cime_config/config_component_$MODEL.xml + + +CIME then parses each of the nodes listed below, using using the value of the *component* attribute to determine which xml files to use for the requested compset longname. +:: + + + + + + + + + + +As an example, the possible atmosphere components for CESM have the following associated xml files. +:: + + + char + unset + + $SRCROOT/components/cam/cime_config/config_component.xml + $CIMEROOT/components/data_comps/datm/cime_config/config_component.xml + $CIMEROOT/components/stub_comps/satm/cime_config/config_component.xml + $CIMEROOT/components/xcpl_comps/xatm/cime_config/config_component.xml + + case_last + env_case.xml + file containing specification of component specific definitions and values(for documentation only - DO NOT EDIT) + $CIMEROOT/cime_config/xml_schemas/entry_id.xsd + + +If the compset's atm component attribute is ``datm``, the file ``$CIMEROOT/components/data_comps/datm/cime_config/config_component.xml`` specifies all possible component settings for ``DATM``. + +The schema for every **config_component.xml** file has a ```` node that specifies all possible values that can follow the ``%`` character in the compset name. + +To list the possible values, use the `query_config --component datm <../Tools_user/query_config.html>`_ command. + +.. _creating-new-compsets: + +Creating New Compsets +----------------------- + +A description of how CIME interprets a compset name is given in the section :ref:`defining-compsets` . + +To create a new compset, you will at a minimum have to: + +1. edit the approprite ``config_components.xml`` file(s) to add your new requirements +2. edit associate ``namelist_definitions_xxx.xml`` in the associated ``cime_config`` directories. + (e.g. if a change is made to the the ``config_components.xml`` for ``DOCN`` then ``namelist_definitions_docn.xml`` file will also need to be modified). + +It is important to point out, that you will need expertise in the target component(s) you are trying to modify in order to add new compset functionality for that particular component. +We provide a few examples below that outline this process for a few simple cases. + + +Say you want to add a new mode, ``FOO``, to the data ocean model, ``DOCN``. Lets call this mode, ``FOO``. +This would imply when parsing the compset longname, CIME would need to be able to recognize the string ``_DOCN%FOO_``. +To enable this, you will need to do the following: + +1. edit ``$CIMEROOT/src/components/data_comps/docn/cime_config/config_component.xml`` (see the ``FOO`` additions below). + + * add an entry to the ```` block as shown below :: + + + DOCN + ... + new mode + .... + + + * add an entry to the ```` block as shown below:: + + + .... + + .... + prescribed + ... + + + * modify any of the other xml entries that need a new dependence on ``FOO`` + +2. edit ``$CIMEROOT/src/components/data_comps/docn/cime_config/namelist_definition_docn.xml`` (see the ``FOO`` additions below). + + * add an entry to the ``datamode`` block as shown below. :: + + + .... + ...FOO + ... + + + * add additional changes to ``namelist_definition_docn.xml`` for the new mode + + +.. todo:: Add additional examples for creating a case diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/create-a-case.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/create-a-case.rst.txt new file mode 100644 index 00000000000..3a74a0c87c2 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/create-a-case.rst.txt @@ -0,0 +1,229 @@ +.. _creating-a-case: + +********************************* +Creating a Case +********************************* + +This and following sections provide more detail about the basic commands of the CIME Case Control System: **create_newcase**, +**case.setup**, **case.build** and **case.submit**. On a supported system, you can configure, build and run many complex +climate model configurations with only these 4 commands. + +To see if your machine is supported try:: + + > query_config --machines + +If you are not on an out-of-the box CIME-supported platform, you will need to :ref:`port ` CIME to your system before proceeding. + +=================================== +Calling **create_newcase** +=================================== + +The first step in creating a CIME-based experiment is to use `create_newcase <../Tools_user/create_newcase.html>`_. + +See the options for `create_newcase <../Tools_user/create_newcase.html>`_ in the **help** text.:: + + > create_newcase --help + +The only required arguments to `create_newcase <../Tools_user/create_newcase.html>`_ are:: + + > create_newcase --case CASENAME --compset COMPSET --res GRID + +Creating a CIME experiment or *case* requires, at a minimum, specifying a compset and a model grid and a case directory. +CIME supports out-of-the-box *component sets*, *model grids* and *hardware platforms* (machines). + +.. warning:: + The ``--case`` argument must be a string and may not contain any of the following special characters + :: + > + * ? < > { } [ ] ~ ` @ : + +The ``--case`` argument is used to define the name of your case, a very important piece of +metadata that will be used in filenames, internal metadata and directory paths. The +``CASEROOT`` is a directory create_newcase will create with the same name as the +``CASENAME``. If ``CASENAME`` is simply a name (not a path), ``CASEROOT`` is created in +the directory where you execute create_newcase. If ``CASENAME`` is a relative or absolute +path, ``CASEROOT`` is created there, and the name of the case will be the last component +of the path. + +====================================== +Results of calling **create_newcase** +====================================== + +Suppose **create_newcase** was called as follows. +Here, $CIMEROOT is the full pathname of the root directory of the CIME distribution:: + + > cd $CIMEROOT/scripts + > create_newcase --case ~/cime/example1 --compset A --res f09_g16_rx1 + +In the example, the command creates a ``$CASEROOT`` directory: ``~/cime/example1``. +If that directory already exists, a warning is printed and the command aborts. + +In the argument to ``--case``, the case name is taken from the string after the last slash +--- so here the case name is ``example1``. + +The output from create_newcase includes information such as. + +- The compset longname is ``2000_DATM%NYF_SLND_DICE%SSMI_DOCN%DOM_DROF%NYF_SGLC_SWAV`` +- The grid set is ``a%0.9x1.25_l%0.9x1.25_oi%gx1v6_r%r05_m%gx1v6_g%null_w%null`` + +`create_newcase <../Tools_user/create_newcase.html>`_ installs files in ``$CASEROOT`` that will build and run the model and to optionally archive the case on the target platform. + +Running `create_newcase <../Tools_user/create_newcase.html>`_ creates the following scripts, files and directories in ``$CASEROOT``: + +**User Scripts** + +- `case.build <../Tools_user/case.build.html>`_ + Script to build component and utility libraries and model executable. + +- `case.cmpgen_namelist <../Tools_user/case.submit.html>`_ + Script to perform namelist baseline operations (compare, generate, or both)." + +- case.qstatus + Script to query the queue on any queue system. + +- `case.setup <../Tools_user/case.setup.html>`_ + Script used to set up the case (create the case.run script, Macros file and user_nl_xxx files). + +- `case.submit <../Tools_user/case.submit.html>`_ + Script to submit the case to run using the machine's batch queueing system. + +- `check_case <../Tools_user/check_case.html>`_ + Script to verify case is set up correctly. + +- `check_input_data <../Tools_user/check_input_data.html>`_ + Script for checking for various input data sets and moving them into place. + +- `pelayout <../Tools_user/pelayout.html>`_ + Script to query and modify the NTASKS, ROOTPE, and NTHRDS for each component model. + +- `preview_namelists <../Tools_user/preview_namelists.html>`_ + Script for users to see their component namelists in ``$CASEROOT/CaseDocs`` before running the model. + +- `preview_run <../Tools_user/preview_run.html>`_ + Script for users to see batch submit and mpirun command." + +- `xmlchange <../Tools_user/xmlchange.html>`_ + Script to modify values in the xml files. + +- `xmlquery <../Tools_user/xmlquery.html>`_ + Script to query values in the xml files. + + +**XML Files** + +- env_archive.xml + Defines patterns of files to be sent to the short-term archive. + You can edit this file at any time. You **CANNOT** use `xmlchange <../Tools_user/xmlchange.html>`_ to modify variables in this file." + +- env_batch.xml + Sets batch system settings such as wallclock time and queue name." + +- env_build.xml + Sets model build settings. This includes component resolutions and component compile-time configuration options. + You must run the case.build command after changing this file. + +- env_case.xml + Parameters set by create_newcase + +- env_mach_pes.xml + Sets component machine-specific processor layout (see changing pe layout ). + The settings in this are critical to a well-load-balanced simulation (see :ref:`load balancing `). + +- env_mach_specific.xml + Sets a number of machine-specific environment variables for building and/or running. + You **CANNOT** use `xmlchange <../Tools_user/xmlchange.html>`_ to modify variables in this file. + +- env_run.xml + Sets runtime settings such as length of run, frequency of restarts, output of coupler diagnostics, and short-term and long-term archiving. + This file can be edited at any time before a job starts. + +- env_workflow.xml + Sets paramateres for the runtime workflow. + +**User Source Mods Directory** + +- SourceMods + Top-level directory containing subdirectories for each compset component where you can place modified source code for that component. + You may also place modified buildnml and buildlib scripts here." + +**Provenance** + +- README.case + File detailing `create_newcase <../Tools_user/create_newcase.html>`_ usage. + This is a good place to keep track of runtime problems and changes." + +- CaseStatus + File containing a list of operations done in the current case. + + +**Non-modifiable work directories** + +- Buildconf, + Work directory containing scripts to generate component namelists and component and utility libraries (PIO or MCT, for example). You should never have to edit the contents of this directory. + +- LockedFiles/ + Work directory that holds copies of files that should not be changed. Certain xml files are *locked* after their variables have been used by should no longer be changed (see below). + +- Tools/ + Work directory containing support utility scripts. You should never need to edit the contents of this directory." + +=================================== +Locked files in your case directory +=================================== + +The ``$CASEROOT`` xml files are organized so that variables can be +locked at certain points after they have been resolved (used) in other +parts of the scripts system. + +CIME does this by *locking* a file in ``$CASEROOT/LockedFiles`` and +not permitting you to modify that file unless, depending on the file, +you call `case.setup --clean <../Tools_user/case.setup.html>`_ or +`case.build --clean <../Tools_user/case.build.html>`_ . + +CIME locks your ``$CASEROOT`` files according to the following rules: + +- Locks variables in **env_case.xml** after `create_newcase <../Tools_user/create_newcase.html>`_. + The **env_case.xml** file can never be unlocked. + +- Locks variables in **env_mach_pes.xml** after `case.setup <../Tools_user/case.setup.html>`_. + To unlock **env_mach_pes.xml**, run `case.setup --clean <../Tools_user/case.setup.html>`_. + +- Locks variables in **env_build.xml** after completion of `case.build <../Tools_user/case.build.html>`_. + To unlock **env_build.xml**, run `case.build --clean <../Tools_user/case.build.html>`_ + +- Variables in **env_run.xml**, **env_batch.xml** and **env_archive.xml** are never locked, and most can be changed at any time. + +- There are some exceptions in the **env_batch.xml** file. + +=================================== +Adding a --user-mods-dir argument to **create_newcase** +=================================== + +A user may want to customize a target case with a combination of +``user_nl_xxx`` file modifications and/or ``SourceMods`` for some +components and/or **xmlchange** commands. As an example, the user +might want to carry out a series of experiments based on a common set +of changes to the namelists, source code and/or case xml settings. +Rather than make these changes each time a new experimental +``CASEROOT`` is generated, the user can create a directory on local +disk with a set of changes that will be applied to each case. + +As an example, the directory could contain the following files: :: + + > user_nl_cpl + > shell_commands (this would contain ./xmlchange commands) + > SourceMods/src.cam/dyncomp.F90 + +It is important to note that the file containing the **xmlchange** +commands must be named ``shell_commands`` in order for it to be recognised +and run upon case creation. + +The structure of the component directories do not need to be the +same as in the component source code. As an example, should the user +want to modify the ``src/dynamics/eul/dyncomp.F90`` file within the +CAM source code, the modified file should be put into the directory +``SourceMods/src.cam`` directly. There is no need to mimic the source +code structure, such as ``SourceMods/src.cam/dynamics/eul``. + +When the user calls **create_newcase** with the ``--user-mods-dir`` pointing to the +full pathname of the directory containing these changes, then the ``CASEROOT`` will be +created with these changes applied. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/grids.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/grids.rst.txt new file mode 100644 index 00000000000..1ebe44f8171 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/grids.rst.txt @@ -0,0 +1,214 @@ +.. _grids: + +======================== +Model grids +======================== + +CIME looks at the xml node ``GRIDS_SPEC_FILE`` in **$CIMEROOT/config/$models/config_files.xml** file to identify supported out-of-the-box model grids for the target model. + +The node has the following contents: +:: + + + char + $CIMEROOT/cime_config/$MODEL/config_grids.xml + case_last + env_case.xml + file containing specification of all supported model grids, domains and mapping files (for documentation only - DO NOT EDIT) + $CIMEROOT/cime_config/xml_schemas/config_grids_v2.xsd + + +Grid longname +------------- + +CIME model grids generally are associated with a specific combination of atmosphere, land, land-ice, river-runoff and ocean/ice grids. The naming convention for these grids uses only atmosphere, land, and ocean/ice grid specifications. + +A model grid longname has the form:: + + a%name_l%name_oi%name_r%name_m%mask_g%name_w%name + +For reference:: + + a% = atmosphere grid + l% = land grid + oi% = ocean/sea-ice grid (must be the same) + r% = river grid + m% = ocean mask grid + g% = internal land-ice grid + w% = wave component grid + +The ocean mask grid determines land/ocean boundaries in the model. +On the ocean grid, a grid cell is assumed to be either all ocean or all land. +The land mask on the land grid is obtained by mapping the ocean mask +(using first-order conservative mapping) from the ocean grid to the land grid. + +From the point of view of model coupling, the glc grid is assumed to +be identical to the land grid. The internal land-ice grid can be different, +however, and is specified by the g% value. + +As an example, examine this actual grid longname:: + + a%ne30np4_l%ne30np4_oi%gx1v7_r%r05_m%gx1v7_g%null_w%null + +It refers to a model grid with a ne30np4 spectral element (approximately 1-degree) atmosphere and land grids, gx1v7 Greenland pole, 1-degree ocean and sea-ice grids, a 1/2 degree river routing grid, null wave and internal cism grids, and an gx1v7 ocean mask. +The alias for this grid is ne30_g16. + +CIME also permits users to introduce their own :ref:`user-defined grids `. + +Component grids are denoted by the following naming convention: + +- "[dlat]x[dlon]" are regular lon/lat finite volume grids where dlat and dlon are the approximate grid spacing. The shorthand convention is "fnn" where nn generally is a pair of numbers indicating the resolution. An example is 1.9x2.5 or f19 for the approximately "2-degree" finite-volume grid. Note that CAM uses an [nlat]x[nlon] naming convention internally for this grid. + +- "Tnn" are spectral lon/lat grids where nn is the spectral truncation value for the resolution. The shorthand name is identical. Example: T85. + +- "ne[X]np[Y]" are cubed sphere resolutions where X and Y are integers. The short name generally is ne[X]. Examples: ne30np4 or ne30. + +- "pt1" is a single grid point. + +- "gx[D]v[n]" is a POP displaced pole grid where D is the approximate resolution in degrees and n is the grid version. The short name generally is g[D][n]. An example is gx1v7 or g17 for a grid of approximately 1-degree resolution. +- "tx[D]v[n]" is a POP tripole grid where D is the approximate resolution in degrees and n is the grid version. + +- "oRSS[x]to[y]" is an MPAS grid with grid spacing from x to y kilometers. + +- "oEC[x]to[y]" is an MPAS grid with grid spacing from x to y kilometers. + +.. _adding-cases: + +Adding grids +------------- + +.. _adding-a-grid: + +CIME supports numerous out-of-the box model resolutions. To see the grids that are supported, call `query_config <../Tools_user/query_config.html>`_ as shown below. + :: + + > query_config --grids + +The most common resolutions have the atmosphere and land components on one grid and the ocean and ice on a second grid. The following overview assumes that this is the case. +The naming convention looks like *f19_g17*, where the f19 indicates that the atmosphere and land are on the 1.9x2.5 (finite volume dycore) grid while the g17 means the ocean and ice are on the gx1v6 one-degree displaced pole grid. + +CIME enables users to add their own component grid combinations. +The steps for adding a new component grid to the model system follow. This process can be simplified if the atmosphere and land are running on the same grid. + +1. The first step is to generate SCRIP grid files for the atmosphere, land, ocean, land-ice, river and wave component grids that will comprise your model grid. + If you are introducing just one new grid, you can leverage SCRIP grid files that are already in place for the other components. + There is no supported functionality for creating the SCRIP format file. + +2. Build the **check_map** utility by following the instructions in **$CIMEROOT/tools/mapping/check_maps/INSTALL**. Also confirm that the ESMF toolkit is installed on your machine. + + When you add new user-defined grid files, you also need to generate a set of mapping files so the coupler can send data from a component on one grid to a component on another grid. + There is an ESMF tool that tests the mapping file by comparing a mapping of a smooth function to its true value on the destination grid. + We have tweaked this utility to test a suite of smooth functions, as well as ensure conservation (when the map is conservative). + Before generating mapping functions it is *highly recommended* that you build this utility. + +3. Generate these mapping files: + :: + + atm <-> ocn + atm <-> wav + lnd <-> rof + lnd <-> glc + ocn <-> wav + rof -> ocn + + Using the SCRIP grid files from Step 1, generate a set of conservative (area-averaged) and non-conservative (patch and bilinear) mapping files. + + You can do this by calling **gen_cesm_maps.sh** in ``$CIMEROOT/tools/mapping/gen_mapping_files/``. + This script generates all the mapping files needed except ``rof -> ocn``, which is discussed below. + This script uses the ESMF offline weight generation utility, which you must build *prior* to running **gen_cesm_maps.sh**. + + The **README** file in the **gen_mapping_files/** directory describes how to run **gen_cesm_maps.sh**. The basic usage is shown here: + :: + + > cd $CIMEROOT/tools/mapping/gen_mapping_files + > ./gen_cesm_maps.sh \ + --fileocn \ + --fileatm \ + --filelnd \ + --filertm \ + --nameocn \ + --nameatm \ + --namelnd \ + --namertm + + This command generates the following mapping files: + :: + + map_atmname_TO_ocnname_aave.yymmdd.nc + map_atmname_TO_ocnname_blin.yymmdd.nc + map_atmname_TO_ocnname_patc.yymmdd.nc + map_ocnname_TO_atmname_aave.yymmdd.nc + map_ocnname_TO_atmname_blin.yymmdd.nc + map_atmname_TO_lndname_aave.yymmdd.nc + map_atmname_TO_lndname_blin.yymmdd.nc + map_lndname_TO_atmname_aave.yymmdd.nc + map_ocnname_TO_lndname_aave.yymmdd.nc + map_lndname_TO_rtmname_aave.yymmdd.nc + map_rtmname_TO_lndname_aave.yymmdd.nc + + .. note:: You do not need to specify all four grids. For example, if you are running with the atmosphere and land on the same grid, then you do not need to specify the land grid (and atm<->rtm maps will be generated). + If you also omit the runoff grid, then only the 5 atm<->ocn maps will be generated. + + .. note:: ESMF_RegridWeightGen runs in parallel, and the ``gen_cesm_maps.sh`` script has been written to run on yellowstone. + To run on any other machine, you may need to add some environment variables to ``$CIMEROOT/tools/mapping/gen_mapping_files/gen_ESMF_mapping_file/create_ESMF_map.sh`` -- search for hostname to see where to edit the file. + +4. Generate atmosphere, land and ocean / ice domain files. + + Using the conservative ocean to land and ocean to atmosphere mapping files created in the previous step, you can create domain files for the atmosphere, land, and ocean; these are basically grid files with consistent masks and fractions. + You make these files by calling **gen_domain** in **$CIMEROOT/tools/mapping/gen_domain_files**. + The **INSTALL** file in the **gen_domain_files/** directory describes how to build the **gen_domain** executable. The **README** file in the same directory explains how to use the tool. The basic usage is: + :: + + > ./gen_domain -m ../gen_mapping_files/map_ocnname_TO_lndname_aave.yymmdd.nc -o ocnname -l lndname + > ./gen_domain -m ../gen_mapping_files/map_ocnname_TO_atmname_aave.yymmdd.nc -o ocnname -l atmname + + These commands generate the following domain files: + :: + + domain.lnd.lndname_ocnname.yymmdd.nc + domain.ocn.lndname_ocnname.yymmdd.nc + domain.lnd.atmname_ocnname.yymmdd.nc + domain.ocn.atmname_ocnname.yymmdd.nc + domain.ocn.ocnname.yymmdd.nc + + .. note:: The input atmosphere grid is assumed to be unmasked (global). Land cells whose fraction is zero will have land mask = 0. + + .. note:: If the ocean and land grids *are identical* then the mapping file will simply be unity and the land fraction will be one minus the ocean fraction. + +5. If you are adding a new ocn or rtm grid, create a new rtm->ocn mapping file. (Otherwise you can skip this step.) + The process for mapping from the runoff grid to the ocean grid is currently undergoing many changes. + At this time, if you are running with a new ocean or runoff grid, please contact Michael Levy (mlevy_AT_ucar_DOT_edu) for assistance. If you are running with standard ocean and runoff grids, the mapping file should already exist and you do not need to generate it. + + +6. CESM specific: If you are adding a new atmosphere grid, this means you are also generating a new land grid, and you will need to create a new CLM surface dataset. (Otherwise you can skip this step). + You need to first generate mapping files for CLM surface dataset (since this is a non-standard grid). + :: + + > cd $CIMEROOT/../components/clm/tools/mkmapdata + > ./mkmapdata.sh --gridfile --res --gridtype global + + These mapping files are then used to generate CLM surface dataset. Below is an example for a current day surface dataset (model year 2000). + + :: + + > cd $CIMEROOT/../components/clm/tools/mksurfdata_map + > ./mksurfdata.pl -res usrspec -usr_gname -usr_gdate yymmdd -y 2000 + +7. Create grid file needed for create_newcase. + The next step is to add the necessary new entries in the appropriate ``config_grids.xml`` file. + You will need to modify ``$CIMEROOT/config/cesm/config_grids.xml`` or ``$CIMEROOT/config/e3sm/config_grids.xml`` depending on the value of ``$CIME_MODEL``. + You will need to: + + - add a single ```` entry + - add possibly multiple ```` entries for every new component grid that you have added + - add possibly multiple ```` entries for all the new component combinations that require new mapping files + +8. Test new grid. + + Below assume that the new grid is an atmosphere grid. + :: + + Test the new grid with all data components. + (write an example) + Test the new grid with CAM(newgrid), CLM(newgrid), DOCN(gx1v6), DICE(gx1v6) + (write an example) diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/index.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/index.rst.txt new file mode 100644 index 00000000000..c16896cdb28 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/index.rst.txt @@ -0,0 +1,54 @@ +.. on documentation master file, created by + sphinx-quickstart on Tue Jan 31 19:46:36 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +.. _users-guide1: + +####################################### +Using the Case Control System +####################################### + +.. toctree:: + :maxdepth: 2 + :numbered: + + introduction-and-overview.rst + create-a-case.rst + setting-up-a-case.rst + building-a-case.rst + running-a-case.rst + cloning-a-case.rst + cime-change-namelist.rst + cime-config.rst + cime-customize.rst + testing.rst + troubleshooting.rst + +.. _users-guide2: + +####################################################################################### +Configuring the Case Control System +####################################################################################### + +.. toctree:: + :maxdepth: 2 + :numbered: + + cime-internals.rst + compsets.rst + grids.rst + machine.rst + pes-threads.rst + porting-cime.rst + unit_testing.rst + multi-instance.rst + workflows.rst + cime-dir.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/introduction-and-overview.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/introduction-and-overview.rst.txt new file mode 100644 index 00000000000..4dbf673f2bf --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/introduction-and-overview.rst.txt @@ -0,0 +1,242 @@ +.. _introduction-and-overview: + +.. role:: red + + +************* +Introduction +************* + +Part 1 of this guide explains the basic commands in the CIME Case Control System +that are needed to get a model running. + +Prerequisites +============= + +Part 1 of this guide assumes that CIME or a CIME-driven model and the necessary input files +have been installed on the computer you are using. If that is not the case, see :ref:`Porting CIME`. + +Other prerequisites: + +- Familiarity with basic climate modeling concepts. + +- Familiarity with UNIX command line terminals and the UNIX development environment. + +- A correct version of the Python interpreter. + +CIME's commands are Python scripts and require a correct version of +the Python interpreter to be installed. The Python version must be +greater than 2.11. Determine which version you have +like this: +:: + + > python --version + +Consult your local documentation if you need to update your python version. + +Key Terms and concepts +====================== + +The following key terms and concepts are ingrained in the CCS and used frequently in this documentation. +See the :ref:`glossary` for a more complete list of terms. + +**components** + + In CIME, a coupled earth system model is made up of *components* that interact through a coupler and are all controlled by a driver. + + In the current version of CIME, there are 7 physical components allowed. They are: + + atmosphere, ocean, sea-ice, land surface, river, ice sheet, ocean waves + + Components are also referred to as "models". The choice of 7 is partly historical and partly determined by the physics of the + Earth system: these 7 components + occupy physically distinct domains in the Earth system and/or require different numerical grids for solving. + + +**component types** + + For each of the 7 physical components (models), there can be three different implementations in a CIME-driven coupled model. + + *active*: Solve a complex set of equations to describe the model's behavior. Also called *prognostic* or *full* models. + These can be full General Circulation Models. Multiple active models might be available (for example POP and MPAS-ocean to represent the global ocean) but only one ocean or atmosphere model at a time can be used in a component set. + + *data*: For some climate problems, it is necessary to reduce feedbacks within the system by replacing an active model with a + version that sends and receives the same variables to and from other models, but with the values read from files rather + than computed from the equations. The values received are ignored. These active-model substitutes are called *data models*. + + *stub*: For some configurations, no data model is needed and one instead uses a *stub* version that simply occupies the + required place in the driver and does not send or receive any data. For example, if you are setting up an aqua-planet case + you would only need a stub for the land model. + +**component set** or **compset**: + + The particular combination of active, data and stub versions of the 7 components is referred to + as a *component set* or *compset*. The Case Control System allows one to define + several possible compsets and configure and run them on supported platforms. + Here is an example of a component set *longname* from E3SM for a fully coupled active case: +:: + + 1850SOI_EAM%CMIP6_ELM%CNPRDCTCBCTOP_MPASSI_MPASO_MOSART_SGLC_SWAV + +See :ref:`Component Sets` for more information. "GLC" originally meant "glacier model" and is now an ice-sheet model but the GLC letters have stuck. + +**compset alias**: + + Typing a compset longname like the above can be exhausting so the CCS allows defining a shorter *compset alias* + which is a short string that substitutes for the longname. In E3SM, the above longname can be reffered to as "WCYCL1850". + +.. note:: + + Long ago, CESM established a convention for the first letter in a compset alias based + on the combination of active, data and stub components. + If you see mention of "B-case" or "F-case", it comes from these conventions. + They pre-date the introduction of a wave model as an option. + + === ======================================================================================== + A All data models + B All models fully active with stub glc + C Active ocean with data atm, river and sea ice. stub lnd, glc + D Active sea ice with data atm, ocean (slab) and river. stub lnd, glc + E Active atm, lnd, sea-ice, river, data ocean (slab), stub glc + F Active atm, lnd, river, sea-ice (thermodynamics only), data ocean (fixed SST), stub glc + G Active ocean and sea ice, data atmosphere and river, stub lnd and glc + H Active ocean and sea ice, data atmosphere, stub lnd, river and glc + I Active land and river model, data atmosphere, stub ocn, sea-ice, glc + IG Active land, river and ice-sheet, data atmosphere, stub ocn, sea-ice + S All stub models (for testing only) + X All x-compsets (2D sine waves for each component except stub glc; for testing only) + === ======================================================================================== +.. +**grid set**: + + Each active model must solve its equations on a numerical grid. CIME allows models within the system to have + different grids. The resulting set of all numerical grids is called the *grid set* or usually just the *grid*. Like + the compset longnamme, the CCS allows one to define an alias to represent a grid set. This alias is also referred to + as the *grid* or sometimes the *resolution*. + +**machine and compilers**: + The *machine* is the computer you are using to run CIME and build and run the climate model. It could be a workstation + or a national supercomputer. The exact name of *machine* is typically the UNIX hostname but it could be any string. A machine + may have one more more versions of Fortran, C and C++ *compilers* that are needed to compile the model's source code and CIME. + +**case**: + To build and execute a CIME-enabled climate model, you have to make choices of compset, model grid, + machine and compiler. The collection of these choices, and any additional + customizations you may make, is called the *case*. + +**out-of-the-box**: + Any case that can be defined by the coupled model's CIME configuration files and built with only basic commands in the + CIME Case Control System is an "out-of-the-box" case. Since CIME and its configuration files are kept with + the model source code and version-controlled together, its possible to match supported out-of-the-box cases with specific + versions of the model source code, promoting reproducibility and provenance. An out-of-the-box case is also called a *base case* + +CCS and your environment +========================= + +Before using any CCS commands, set the ``CIME_MODEL`` environment variable. In bash, use **export** as shown and replace +**** with the appropriate text. Current possibilities are "e3sm" or "cesm." +:: + + > export CIME_MODEL= + +There are a number of possible ways to set CIME variables. +For variables that can be set in more than one way, the order of precedence is: + +- variable appears in a command line argument to a CIME command + +- variable is set as an environment variable + +- variable is set in ``$HOME/.cime/config`` as explained further :ref:`here`. + +- variable is set in a ``$CASEROOT`` xml file + +Quick start +================== + +To see an example of how a case is created, configured, built and run with CIME, execute the following commands. (This assumes that CIME has been ported to your current machine). +:: + + > cd cime/scripts + > ./create_newcase --case mycase --compset X --res f19_g16 + > cd mycase + > ./case.setup + > ./case.build + > ./case.submit + +The output from each command is explained in the following sections. + +After you submit the case, you can follow the progress of your run by monitoring the **CaseStatus** file. + +:: + + > tail CaseStatus + +Repeat the command until you see the message ``case.run success``. + + +Discovering available pre-defined compsets with **query_config** +================================================= + +Your CIME-driven model likely has many compset and gridset aliases defined for cases that are widely used by the +model developers. + +Use the utility `query_config <../Tools_user/query_config.html>`_ to see which out-of-the-box compsets, components, grids and machines are available for your model. + +To see lists of available compsets, components, grids and machines, look at the **help** text:: + + > query_config --help + +To see all available component sets, try:: + + > query_config --compsets all + +**Usage examples** + +To run `query_config <../Tools_user/query_config.html>`_ for compset information, follow this example, where **drv** is the component name:: + + > query_config --compsets drv + +The output will be similar to this:: + + -------------------------------------- + Compset Short Name: Compset Long Name + -------------------------------------- + A : 2000_DATM%NYF_SLND_DICE%SSMI_DOCN%DOM_DROF%NYF_SGLC_SWAV + ADWAV : 2000_SATM_SLND_SICE_SOCN_SROF_SGLC_DWAV%CLIMO + S : 2000_SATM_SLND_SICE_SOCN_SROF_SGLC_SWAV_SESP + ADLND : 2000_SATM_DLND%SCPL_SICE_SOCN_SROF_SGLC_SWAV + ADESP_TEST : 2000_DATM%NYF_SLND_DICE%SSMI_DOCN%DOM_DROF%NYF_SGLC_SWAV_DESP%TEST + X : 2000_XATM_XLND_XICE_XOCN_XROF_XGLC_XWAV + ADESP : 2000_DATM%NYF_SLND_DICE%SSMI_DOCN%DOM_DROF%NYF_SGLC_SWAV_DESP + AIAF : 2000_DATM%IAF_SLND_DICE%IAF_DOCN%IAF_DROF%IAF_SGLC_SWAV + +Each model component specifies its own definitions of what can appear after the **%** modifier in the compset longname (for example, **DOM** in **DOCN%DOM**). + +To see what supported modifiers are for **DOCN**, run `query_config <../Tools_user/query_config.html>`_ as in this example:: + + > query_config --component docn + +The output will be similar to this:: + + ========================================= + DOCN naming conventions + ========================================= + + _DOCN%AQP1 : docn prescribed aquaplanet sst - option 1 + _DOCN%AQP10 : docn prescribed aquaplanet sst - option 10 + _DOCN%AQP2 : docn prescribed aquaplanet sst - option 2 + _DOCN%AQP3 : docn prescribed aquaplanet sst - option 3 + _DOCN%AQP4 : docn prescribed aquaplanet sst - option 4 + _DOCN%AQP5 : docn prescribed aquaplanet sst - option 5 + _DOCN%AQP6 : docn prescribed aquaplanet sst - option 6 + _DOCN%AQP7 : docn prescribed aquaplanet sst - option 7 + _DOCN%AQP8 : docn prescribed aquaplanet sst - option 8 + _DOCN%AQP9 : docn prescribed aquaplanet sst - option 9 + _DOCN%DOM : docn prescribed ocean mode + _DOCN%IAF : docn interannual mode + _DOCN%NULL : docn null mode + _DOCN%SOM : docn slab ocean mode + _DOCN%SOMAQP : docn aquaplanet slab ocean mode + _DOCN%SST_AQUAP : docn aquaplanet mode: + +For more details on how CIME determines the output for query_config, see :ref:`Component Sets`. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/machine.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/machine.rst.txt new file mode 100644 index 00000000000..b349c61f6b0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/machine.rst.txt @@ -0,0 +1,213 @@ +.. _machine: + +======================== +Defining the machine +======================== + +CIME looks at the xml node ``MACHINE_SPEC_FILE`` in the **config_files.xml** file to identify supported out-of-the-box machines for the target model. The node has the following contents: +:: + + + char + $CIMEROOT/cime_config/$MODEL/machines/config_machines.xml + case_last + env_case.xml + file containing machine specifications for target model primary component (for documentation only - DO NOT EDIT) + $CIMEROOT/cime_config/xml_schemas/config_machines.xsd + + +You can supplement what is in the MACHINES_SPEC_FILE by adding a config_machines.xml file to your CIME config directory. + +.. _machinefile: + +config_machines.xml - machine specific file +-------------------------------------------- + +Each ```` tag requires the following input: + +* ``DESC``: a text description of the machine +* ``NODENAME_REGEX``: a regular expression used to identify the machine. It must work on compute nodes as well as login nodes. + | Use the ``machine`` option for **create_test** or **create_newcase** if this flag is not available. +* ``OS``: the machine's operating system +* ``PROXY``: optional http proxy for access to the internet +* ``COMPILERS``: compilers supported on the machine, in comma-separated list, default first +* ``MPILIBS``: mpilibs supported on the machine, in comma-separated list, default first +* ``PROJECT``: a project or account number used for batch jobs; can be overridden in environment or in **$HOME/.cime/config** +* ``SAVE_TIMING_DIR``: (E3SM only) target directory for archiving timing output +* ``SAVE_TIMING_DIR_PROJECTS``: (E3SM only) projects whose jobs archive timing output +* ``CIME_OUTPUT_ROOT``: Base directory for case output; the **bld** and **run** directories are written below here +* ``DIN_LOC_ROOT``: location of the input data directory +* ``DIN_LOC_ROOT_CLMFORC``: optional input location for clm forcing data +* ``DOUT_S_ROOT``: root directory of short-term archive files +* ``DOUT_L_MSROOT``: root directory on mass store system for long-term archive files +* ``BASELINE_ROOT``: root directory for system test baseline files +* ``CCSM_CPRNC``: location of the cprnc tool, which compares model output in testing +* ``GMAKE``: gnu-compatible make tool; default is "gmake" +* ``GMAKE_J``: optional number of threads to pass to the gmake flag +* ``TESTS``: (E3SM only) list of tests to run on the machine +* ``BATCH_SYSTEM``: batch system used on this machine (none is okay) +* ``SUPPORTED_BY``: contact information for support for this system +* ``MAX_TASKS_PER_NODE``: maximum number of threads/tasks per shared memory node on the machine +* ``MAX_MPITASKS_PER_NODE``: number of physical PES per shared node on the machine. In practice the MPI tasks per node will not exceed this value. +* ``PROJECT_REQUIRED``: Does this machine require a project to be specified to the batch system? +* ``mpirun``: The mpi exec to start a job on this machine. + This is itself an element that has sub-elements that must be filled: + + * Must have a required ```` element + * May have optional attributes of ``compiler``, ``mpilib`` and/or ``threaded`` + * May have an optional ```` element which in turn contains one or more ```` elements. + These specify the arguments to the mpi executable and are dependent on your mpi library implementation. + * May have an optional ```` element which overrides the ``default_run_exe`` + * May have an optional ```` element which overrides the ``default_run_misc_suffix`` + * May have an optional ```` element which controls how CIME generates arguments when ```` contains ``aprun``. + + The ```` element can be one of the following. The default value is ``ignore``. + + * ``ignore`` will cause CIME to ignore it's aprun module and join the values found in ````. + * ``default`` will use CIME's aprun module to generate arguments. + * ``override`` behaves the same as ``default`` expect it will use ```` to mutate the generated arguments. When using this mode a ``position`` attribute can be placed on ```` tags to specify how it's used. + + The ``position`` attribute on ```` can take one of the following values. The default value is ``per``. + + * ``global`` causes the value of the ```` element to be used as a global argument for ``aprun``. + * ``per`` causes the value of the ```` element to be appended to each separate binaries arguments. + + Example using ``override``: + :: + + aprun + override + + -e DEBUG=true + -j 20 + + + Sample command output: + :: + + aprun -e DEBUG=true ... -j 20 e3sm.exe : ... -j 20 e3sm.exe + +* ``module_system``: How and what modules to load on this system. Module systems allow you to easily load multiple compiler environments on a machine. CIME provides support for two types of module tools: `module `_ and `soft `_. If neither of these is available on your machine, simply set ````. + +* ``environment_variables``: environment_variables to set on the system + This contains sub-elements ```` with the ``name`` attribute specifying the environment variable name, and the element value specifying the corresponding environment variable value. If the element value is not set, the corresponding environment variable will be unset in your shell. + + For example, the following sets the environment variable ``OMP_STACKSIZE`` to 256M: + :: + + 256M + + The following unsets this environment variable in the shell: + :: + + + + .. note:: These changes are **ONLY** activated for the CIME build and run environment, **BUT NOT** for your login shell. To activate them for your login shell, source either **$CASEROOT/.env_mach_specific.sh** or **$CASEROOT/.env_mach_specific.csh**, depending on your shell. + + + +Batch system definition +----------------------- + +CIME looks at the xml node ``BATCH_SPEC_FILE`` in the **config_files.xml** file to identify supported out-of-the-box batch system details for the target model. The node has the following contents: +:: + + + char + $CIMEROOT/cime_config/$MODEL/machines/config_batch.xml + case_last + env_case.xml + file containing batch system details for target system (for documentation only - DO NOT EDIT) + $CIMEROOT/cime_config/xml_schemas/config_batch.xsd + + +.. _batchfile: + +config_batch.xml - batch directives +------------------------------------------------- + +The **config_batch.xml** schema is defined in **$CIMEROOT/config/xml_schemas/config_batch.xsd**. + +CIME supports these batch systems: pbs, cobalt, lsf and slurm. + +The entries in **config_batch.xml** are hierarchical. + +#. General configurations for each system are provided at the top of the file. + +#. Specific modifications for a given machine are provided below. In particular each machine should define its own queues. + +#. Following is a machine-specific queue section. This section details the parameters for each queue on the target machine. + +#. The last section describes several things: + + - each job that will be submitted to the queue for a CIME workflow, + + - the template file that will be used to generate that job, + + - the prerequisites that must be met before the job is submitted, and + + - the dependencies that must be satisfied before the job is run. + +By default the CIME workflow consists of two jobs (**case.run**, **case.st_archive**). + +In addition, there is **case.test** job that is used by the CIME system test workflow. + + +.. _defining-compiler-settings: + +Compiler settings +----------------- + +CIME looks at the xml element ``CMAKE_MACROS_DIR`` in the **config_files.xml** file to identify supported out-of-the-box compiler details for the target model. The node has the following contents: +:: + + + char + $CIMEROOT/config/$MODEL/machines/cmake_macros + case_last + env_case.xml + Directory containing cmake macros (for documentation only - DO NOT EDIT) + + +Additional compilers are made avilable by adding cmake macros files to the directory pointed to by CMAKE_MACROS_DIR or to your $HOME/.cime directory. + +.. _compilerfile: + +config_compilers.xml - compiler paths and options **DEPRECATED use cmake_macros** +------------------------------------------------- +The **config_compilers.xml** file defines compiler flags for building CIME (and also CESM and E3SM prognostic CIME-driven components). + +#. General compiler flags (e.g., for the gnu compiler) that are machine- and componen-independent are listed first. + +#. Compiler flags specific to a particular operating system are listed next. + +#. Compiler flags that are specific to particular machines are listed next. + +#. Compiler flags that are specific to particular CIME-driven components are listed last. + +The order of listing is a convention and not a requirement. + +The possible elements and attributes that can exist in the file are documented in **$CIME/config/xml_schemas/config_compilers_v2.xsd**. + +To clarify several conventions: + +- The ```` element implies that any previous definition of that element's parent will be appended with the new element value. + As an example, the following entry in **config_compilers.xml** would append the value of ``CPPDEFS`` with ``-D $OS`` where ``$OS`` is the environment value of ``OS``. + + :: + + + + -DOS + + + +- The ```` element overwrites its parent element's value. For example, the following entry would overwrite the ``CONFIG_ARGS`` for machine ``melvin`` with a ``gnu`` compiler to be ``--host=Linux``. + + :: + + + + --host=Linux + + diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/multi-instance.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/multi-instance.rst.txt new file mode 100644 index 00000000000..747e578f533 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/multi-instance.rst.txt @@ -0,0 +1,110 @@ +.. _multi-instance: + +Multi-instance component functionality +====================================== + +The CIME coupling infrastructure is capable of running multiple +component instances (ensembles) under one model executable. There are +two modes of ensemble capability, single driver in which all component +instances are handled by a single driver/coupler component or +multi-driver in which each instance includes a separate driver/coupler +component. In the multi-driver mode the entire model is duplicated +for each instance while in the single driver mode only active +components need be duplicated. In most cases the multi-driver mode +will give better performance and should be used. + +The primary motivation for this development was to be able to run an +ensemble Kalman-Filter for data assimilation and parameter estimation +(UQ, for example). However, it also provides the ability to run a set +of experiments within a single model executable where each instance +can have a different namelist, and to have all the output go to one +directory. + +An F compset is used in the following example. Using the +multiple-instance code involves the following steps: + +1. Create the case. +:: + + > create_newcase --case Fmulti --compset F2000_DEV --res f19_f19_mg17 + > cd Fmulti + +2. Assume this is the out-of-the-box pe-layout: +:: + + Comp NTASKS NTHRDS ROOTPE + CPL : 144/ 1; 0 + ATM : 144/ 1; 0 + LND : 144/ 1; 0 + ICE : 144/ 1; 0 + OCN : 144/ 1; 0 + ROF : 144/ 1; 0 + GLC : 144/ 1; 0 + WAV : 144/ 1; 0 + ESP : 1/ 1; 0 + +The atm, lnd, rof and glc are active components in this compset. The ocn is +a prescribed data component, cice is a mixed prescribed/active +component (ice-coverage is prescribed), and wav and esp are stub +components. + +Let's say we want to run two instances of CAM in this experiment. We +will also have to run two instances of CLM, CICE, RTM and GLC. However, we +can run either one or two instances of DOCN, and we can ignore the +stub components since they do not do anything in this compset. + +To run two instances of CAM, CLM, CICE, RTM, GLC and DOCN, invoke the following :ref: `xmlchange` commands in your **$CASEROOT** directory: +:: + + > ./xmlchange NINST_ATM=2 + > ./xmlchange NINST_LND=2 + > ./xmlchange NINST_ICE=2 + > ./xmlchange NINST_ROF=2 + > ./xmlchange NINST_GLC=2 + > ./xmlchange NINST_OCN=2 + +As a result, you will have two instances of CAM, CLM and CICE (prescribed), RTM, GLC, and DOCN, each running concurrently on 72 MPI tasks and all using the same driver/coupler component. In this single driver/coupler mode the number of tasks for each component instance is NTASKS_COMPONENT/NINST_COMPONENT and the total number of tasks is the same as for the single instance case. + +Now consider the multi driver model. +To use this mode change +:: + + > ./xmlchange MULTI_DRIVER=TRUE + +This configuration will run each component instance on the original 144 tasks but will generate two copies of the model (in the same executable) for a total of 288 tasks. + +3. Set up the case +:: + + > ./case.setup + +A new **user_nl_xxx_NNNN** file is generated for each component instance when case.setup is called (where xxx is the component type and NNNN is the number of the component instance). +When calling **case.setup** with the **env_mach_pes.xml** file specifically, these files are created in **$CASEROOT**: +:: + + user_nl_cam_0001 user_nl_clm_0001 user_nl_docn_0001 user_nl_cice_0001 + user_nl_cism_0001 user_nl_mosart_0001 + user_nl_cam_0002 user_nl_clm_0002 user_nl_docn_0002 user_nl_cice_0002 + user_nl_cism_0002 user_nl_mosart_0002 + user_nl_cpl + +The namelist for each component instance can be modified by changing the corresponding **user_nl_xxx_NNNN** file. +Modifying **user_nl_cam_0002** will result in your namelist changes being active ONLY for the second instance of CAM. +To change the DOCN stream txt file instance 0002, copy **docn.streams.txt.prescribed_0002** to your **$CASEROOT** directory with the name **user_docn.streams.txt.prescribed_0002** and modify it accordlingly. + +Also keep these important points in mind: + +#. Note that these changes can be made at create_newcase time with option --ninst # where # is a positive integer, use the additional logical option --multi-driver to invoke the multi-driver mode. + +#. **Multiple component instances can differ ONLY in namelist settings; they ALL use the same model executable.** + +#. Calling **case.setup** with ``--clean`` *DOES NOT* remove the **user_nl_xxx_NN** (where xxx is the component name) files created by **case.setup**. + +#. A special variable NINST_LAYOUT is provided for some experimental compsets, its value should be + 'concurrent' for all but a few special cases and it cannot be used if MULTI_DRIVER=TRUE. + +#. In **create_test** these options can be invoked with testname modifiers _N# for the single driver mode and _C# for the multi-driver mode. These are mutually exclusive options, they cannot be combined. + +#. In create_newcase you may use --ninst # to set the number of instances and --multi-driver for multi-driver mode. + +#. In multi-driver mode you will always get 1 instance of each component for each driver/coupler, if you change a case using xmlchange MULTI_COUPLER=TRUE you will get a number of driver/couplers equal to the maximum NINST value over all components. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/pes-threads.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/pes-threads.rst.txt new file mode 100644 index 00000000000..43642840ac0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/pes-threads.rst.txt @@ -0,0 +1,286 @@ +.. _pesthreads: + +================================== +Controlling processors and threads +================================== + +Once a compset and resolution for a case has been defined, CIME +provides ways to define the processor layout the case will use. + +CIME cases have significant flexibility with respect to the layout of +components across different hardware processors. There are up to eight +unique models (atm, lnd, rof, ocn, ice, glc, wav, cpl) that are +managed independently by the CIME driver, each with a unique MPI +communicator. In addition, the driver runs on the union of all +processors and controls the sequencing and hardware partitioning. + +.. _defining-pes: + +pe-settings for a case +------------------------- + +CIME looks at the xml element ``PES_SPEC_FILE`` in the **$CIMEROOT/config/$model/config_files.xml** file to determine where +to find the supported out-of-the-box model pe-settings for the primary component (See :ref:`Compsets` for definition of primary component.) + +When your run `create_newcase <../Tools_user/create_newcase.html>`_, CIME identifies the primary component and the setting of the ``PES_SPEC_FILE`` in the standard output. + +By default, each primary component has a **config_pes.xml** file in +its **cime_config** directory. That file specifies out-of-the-box +pe-layout for compsets that the primary component defines. Currently, +the pe-layout can have dependencies on the compset, the model grid and +the target machine. Finally, there might be more than one +out-of-the-box pe-layout that could be used for a compset/grid/machine +combination: one for a low processor setting and one for a high +processor setting. + +A typical entry in a **config_pes.xml** looks like this: + +:: + + + + + ....... + + + + +Currently, the pesize can have values of ``[any,S,M,L,X1,X2]``. + +Given the various dependencies, CIME uses an order of precedence to determine the optimal match. This order is as follows: + +1. grid match + + | CIME first searches the grid nodes for a grid match in **config_grids.xml**. + | The search is based on a regular expression match for the grid longname. + | All grid matches are then used in the subsequent search. + | If there is no grid match, all nodes that have ```` are used in the subsequent search. + +2. machine match + + | CIME next uses the list of nodes obtained in the grid match to search for the machine name using the ```` nodes. + | If there is no machine match, then all nodes with ```` are used in the subsequent search. + +3. pesize and compset match + + | CIME next uses the list of nodes obtained in the machine match to search for pesize and compset using the ```` nodes. + | If there is no match, the node with ```` is used. + +When `create_newcase <../Tools_user/create_newcase.html>`_ is called, it outputs the matches that are found in determining the best out-of-the-box pe-layout. + +Setting the PE layout +--------------------- + +Optimizing the throughput and efficiency of a CIME experiment often +involves customizing the processor (PE) layout. (See :ref:`load +balancing `.) CIME provides significant +flexibility with respect to the layout of components across different +hardware processors. In general, the CIME components -- atm, lnd, +ocn, and so on -- can run on overlapping or mutually unique +processors. While each component is associated with a unique MPI +communicator, the CIME driver runs on the union of all processors and +controls the sequencing and hardware partitioning. + +The pe-layout settings are controlled by the ``$CASEROOT`` file +**env_mach_pes.xml** file. Variables in this file determine the number +of MPI tasks and OpenMP threads for each component, the number of +instances of each component and the layout of the components across +the hardware processors. The entries in **env_mach_pes.xml** have the +following meanings: + +.. list-table:: Entries in **env_mach_pes.xml** + :widths: 10 40 + :header-rows: 1 + + * - XML variable + - Description + * - MAX_MPITASKS_PER_NODE + - The maximum number of MPI tasks per node. This is defined in **config_machines.xml** and therefore given a default setting, but can be user modified. + * - MAX_TASKS_PER_NODE + - The total number of (MPI tasks) * (OpenMP threads) allowed on a node. This is defined in **config_machines.xml** and therefore given a default setting, but can be user modified. Some computational platforms use a special software customized for the target hardware called symmetric multi-threading (SMT). This allows for over-subscription of the hardware cores. In cases where this is beneficial to model performance, the variable ``MAX_TASKS_PER_NODE`` will be greater than the hardware cores per node as specified by ``MAX_MPITASKS_PER_NODE``. + * - NTASKS + - Total number of MPI tasks. A negative value indicates nodes rather than tasks, where *MAX_MPITASKS_PER_NODE \* -NTASKS* equals the number of MPI tasks. + * - NTHRDS + - Number of OpenMP threads per MPI task. ``NTHRDS`` must be greater than or equal to 1. If ``NTHRDS`` = 1, this generally means threading parallelization will be off for the given component. + * - ROOTPE + - The global MPI task of the component root task; if negative, indicates nodes rather than tasks. The root processor for each component is set relative to the MPI global communicator. + * - PSTRID + - The stride of MPI tasks across the global set of pes (for now set to 1). This variable is currently not used and is a placeholder for future development. + * - NINST + - The number of component instances, which are spread evenly across NTASKS. + * - COST_PER_NODE + - The numbers of cores/node used for accounting purposes. The user should not normally need to set this - but it is useful for understanding how you will be charged. + +Each CIME component has corresponding entries for ``NTASKS``, ``NTHRDS``, ``ROOTPE`` and ``NINST`` in the **env_mach_pes.xml** file. The layout of components on processors has no impact on the science. +If all components have identical ``NTASKS``, ``NTHRDS``, and ``ROOTPE`` settings, all components will exectute sequentially on the same hardware processors. + +.. hint:: To view the current settings, use the `pelayout <../Tools_user/pelayout.html>`_ tool + +The time sequencing is hardwired into the driver. Changing +processor layouts does not change intrinsic coupling lags or coupling +sequencing. + +The coupler component has its own processor set for doing +computations such as mapping, merging, diagnostics, and flux +calculation. This is distinct from the driver, which always +runs on the union of all processors to manage model concurrency and +sequencing. + +For a **fully active configuration**, the atmosphere component is +hardwired in the driver to never run concurrently with the land or ice +component. Performance improvements associated with processor layout +concurrency therefore are constrained in this case such that there is +never a performance reason not to overlap the atmosphere component +with the land and ice components. Beyond that constraint, the land, +ice, coupler and ocean models can run concurrently, and the ocean +model can also run concurrently with the atmosphere model. + +.. note:: if **env_mach_pes.xml** is modified after `case.setup <../Tools_user/case.setup.html>`_ has been called, then you must run `case.setup --reset <../Tools_user/case.setup.html>`_ and the call `case.build <../Tools_user/case.build.html>`_. **case.build** will only recompile any source code that depends on values in **env_mach_pes.xml** + +Case Resource Allocation +------------------------ + +Resources for your case will be allocated according to the following logic. + +* ``NTASKS`` * ``NTHRDS`` is the total number of hardware processors allocated to a component. + +* The total number of cores that are allocated will be based on the product of (1) and (2) below where + + 1. ``MAX(ROOTPE(comp) + NTASKS(comp))`` across all components + 2. ``MAX(NTHRDS)`` across all components + +In the following example, the atmosphere and ocean will run concurrently. The atmosphere will use 16 MPI tasks each with 4 threads per task for a total of 64 cores. The ocean will use 16 MPI tasks with 1 thread per task. BUT since the atmosphere has 4 threads, the ocean will use 64 total cores. The total number of cores will be 128. The atmosphere will run on MPI tasks 0-15 and the ocean will run on MPI tasks 16-31 in the global MPI communicators. + + :: + + NTASKS_ATM=16 NTHRDS_ATM=4 ROOTPE_ATM=0 + NTASKS_OCN=16 NTHRDS_OCN=1 ROOTPE_OCN=16 + +CIME ensures that the batch submission script (`case.submit +<../Tools_user/case.submit.html>`_ ) will automatically requests 128 +hardware processors, and the first 16 MPI tasks will be laid out on +the first 64 hardware processors with a stride of 4. The next 16 MPI +tasks are laid out on the second set of 64 hardware processors in the +same manner, even though the ocean is not threaded. If you had set +``ROOTPE_OCN`` to 64 in this example, a total of 312 processors would +be requested, the atmosphere would be laid out on the first 64 +hardware processors in 16x4 fashion, and the ocean model would be laid +out on hardware processors 255-311. Hardware processors 64-254 would +be allocated but completely idle. + +We strongly encourage you to use the `preview_run +<../Tools_user/preview_run.html>`_ script to review the environment +and job submit commands for your case. + +.. _optimizing-processor-layout: + +Optimizing processor layout +---------------------------- + +Load balancing is the practice of specifying a processor layout for a given model configuration +(compset, grid, and so on) to maximize simulation speed while minimizing processor idle time. +For a fixed total number of processors, the goal of this optimization is to achieve maximum throughput. +For a set of processor counts, the purpose is to find several "sweet spots" where +the model is minimally idle, cost is relatively low, and the throughput is relatively high. + +As with most models, increasing total processors normally results in both increased throughput +and increased cost. +If models scaled linearly, the cost would remain constant across different processor counts, +but models generally don't scale linearly and the cost increases as processor count increases. + +Performing a load-balancing exercise on a proposed case before +undertaking a long production run is recommended practice. Load +balancing requires you to consider a number of factors, such as which +components are run; their absolute and relative resolution; cost, +scaling and processor count sweet spots for each component; and +internal load imbalance within a component. + +It is often best to load balance a system with all significant +run-time I/O turned off because it occurs infrequently, typically just +one timestep per simulated month. It is best treated as a separate cost as it +can otherwise bias interpretation of the overall balance. Also, the +use of OpenMP threading in some or all of the components is dependent +on the hardware/OS support as well as whether the system supports +running all MPI and mixed MPI/OpenMP on overlapping processors for +different components. + +Finally, decide whether components should run sequentially, concurrently, or in some combination. + +Typically, a series of short test runs with the desired production +configuration can establish a reasonable load balance setup for the +production job. The timing output can be used to compare test runs to +help determine the optimal load balance. + +Changing the pe layout of the model has NO IMPACT on the scientific +results. The basic order of operations and calling sequence are +hardwired into the driver and do not change with the pe +layout. However, both CESM and E3SM do impose some contraints in the +tempororal evolution of the components. For example, the prognostic +atmosphere model always run sequentially with the ice and land models +for scientific reasons. As a result, running the atmosphere +concurrently with the ice and land will result in idle processors at +some point in the timestepping sequence. + +.. hint:: If you need to load balance a fully coupled case, use the :ref:`Load Balancing Tool` + +**One approach to load balancing** + +Carry out a :ref:`PFS test `. This test is by default a +20-day model run with restarts and history output turned off. This +should help you find the layout that has the best load balance for the +targeted number of processors. This provides a reasonable performance +estimate for the production run for most of the runtime. + +Seasonal variation and spin-up costs can change performance over time, +so even after a production run has started, review the timing output +occasionally to see if any layout changes might improve throughput or +decrease cost. + +In determining an optimal load balance for a specific configuration, +two pieces of information are useful. + +* Which components are most expensive. + +* How individual components scale. Do they run faster with all MPI or + mixed MPI/OpenMP decomposition strategies? What are their optimal + decompositions at each processor count? If the cost and scaling of + the components are unknown, several short tests with arbitrary + component pe counts can help establish component scaling and sweet + spots. + +**Determining an optimal load balance** + +* Start with the most expensive component and a fixed optimal processor count and decomposition for that component. + +* Vary the concurrency and pe counts of the other components. + +* Identify a few potential load balance configurations, then run each a few times to establish run-to-run variability and determine the best layout. + +In all cases, review the component run times in the timing output file for both overall throughput and independent component timings. Identify idle processors by considering the component concurrency in conjunction with the component timing. + +In general, a few component layout options are most reasonable: + +* fully sequential, +* fully sequential except the ocean running concurrently, +* fully concurrent except the atmosphere running sequentially with the ice, rof, and land components. + +The concurrency is limited in part by hardwired sequencing in the +driver. The sequencing is set by scientific constraints, although +there may be some addition flexibility with respect to concurrency +when running with mixed active and data models. + +**Some general rules for finding optimal configurations** + +- Make sure you have set a processor layout where each hardware processor is assigned to at least one component. There is rarely a reason to have completely idle processors. + +- Make sure your cheapest components keep up with your most expensive components. In other words, a component that runs on 1024 processors should not be waiting on a component running on 16 processors. + +- Before running the job, make sure the batch queue settings are set correctly for your run. Review the account numbers, queue names and time limits. The ideal time limit, queue and run length are dependent on each other and on the current model throughput. + +- Take full advantage of the hardware resources. If you are charged by the 32-way node, you might as well target a total processor count that is a multiple of 32. + +- Keep a single component on a single node, if possible, to minimize internal component communication cost. + +- Assume that hardware performance can vary due to contention on the interconnect, file systems, or other areas. If you are unsure of a timing result, run cases multiple times. + +The pe-layout and the associated timings are found in the :ref:`timing files ` generated for your run. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/porting-cime.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/porting-cime.rst.txt new file mode 100644 index 00000000000..1e9236a646b --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/porting-cime.rst.txt @@ -0,0 +1,198 @@ +.. _porting: + +============================================== +Porting and validating CIME on a new platform +============================================== + +One of the first steps for many users is getting CIME-based models running on their local machine. +This section describes that process. + +Required libraries/packages +--------------------------- + +The machine needs to have: + +- a functioning MPI environment (unless you plan to run on a single core with the CIME mpi-serial library). +- build tools gmake and cmake, +- a netcdf library version 4.3 or newer built with the same compiler you will use for CIME. + +A pnetcdf library is optional. + +If you are using MPI, make sure you can run a basic MPI parallel program on your machine before you attempt a CIME port. You can use this :ref:`MPI example ` to check. + +.. _mpi-example: + +An MPI example +--------------- + +It is usually very helpful to assure that you can run a basic mpi parallel program on your machine prior to attempting a CIME port. +Understanding how to compile and run the program fhello_world_mpi.F90 shown here could potentially save many hours of frustration. +:: + + program fhello_world_mpi.F90 + use mpi + implicit none + integer ( kind = 4 ) error + integer ( kind = 4 ) id + integer p + character(len=MPI_MAX_PROCESSOR_NAME) :: name + integer clen + integer, allocatable :: mype(:) + real ( kind = 8 ) wtime + + call MPI_Init ( error ) + call MPI_Comm_size ( MPI_COMM_WORLD, p, error ) + call MPI_Comm_rank ( MPI_COMM_WORLD, id, error ) + if ( id == 0 ) then + wtime = MPI_Wtime ( ) + + write ( *, '(a)' ) ' ' + write ( *, '(a)' ) 'HELLO_MPI - Master process:' + write ( *, '(a)' ) ' FORTRAN90/MPI version' + write ( *, '(a)' ) ' ' + write ( *, '(a)' ) ' An MPI test program.' + write ( *, '(a)' ) ' ' + write ( *, '(a,i8)' ) ' The number of processes is ', p + write ( *, '(a)' ) ' ' + end if + call MPI_GET_PROCESSOR_NAME(NAME, CLEN, ERROR) + write ( *, '(a)' ) ' ' + write ( *, '(a,i8,a,a)' ) ' Process ', id, ' says "Hello, world!" ',name(1:clen) + + call MPI_Finalize ( error ) + end program + +As an example, on a MAC with 2 cores that has mpich with gnu fortran you would issue the following two commands: + +:: + + > mpif90 fhello_world_mpi.F90 -o hello_world + > mpirun -np 2 ./hello_world + +CESM Linux and Mac Support +--------------------------- + +The distribution of CESM includes machines called **homebrew** and **centos7-linux** in the file **$CIMEROOT/config/cesm/machines/config_machines.xml**. +Please see the instructions in the file to create the directory structure and use these generic machine definitions. + +Steps for porting +--------------------------- + +Porting CIME involves several steps. The first step is to define your machine. You can do this in one of two ways: + +1. You can edit **$CIMEROOT/config/$model/machines/config_machines.xml** and add an appropriate section for your machine. + +2. You can use your **$HOME/.cime** directory (see :ref:`customizing-cime`). + In particular, you can create a **$HOME/.cime/config_machines.xml** file with the definition for your machine. + A template to create this definition is provided in **$CIMEROOT/config/xml_schemas/config_machines_template.xml**. More details are provided in the template file. + In addition, if you have a batch system, you will also need to add a **config_batch.xml** file to your **$HOME/.cime** directory. + All files in **$HOME/.cime/** are appended to the xml objects that are read into memory from the **$CIME/config/$model**, where **$model** is either ``e3sm`` or ``cesm``. + + .. note:: If you use method (2), you can download CIME updates without affecting your machine definitions in **$HOME/.cime**. + + .. note:: If you will be supporting many users on your new machine, then we recommend using method (1) and issuing a GitHub pull request with your machine updates. + +In what follows we outline the process for method (2) above: + +- Create a **$HOME/.cime** directory and create a **config_machines.xml** file in that directory. + + This file contains all the information you must set in order to configure a new machine to be CIME-compliant. + + Fill in the contents of **$HOME/.cime/config_machines.xml** that are specific to your machine. For more details see :ref:`the config_machines.xml file `. + + Check to ensure that your **config_machines.xml** file conforms to the CIME schema definition by doing the following: + :: + + xmllint --noout --schema $CIME/config/xml_schemas/config_machines.xsd $HOME/.cime/config_machines.xml + +- If you find that you need to introduce compiler settings specific to your machine, create a **$HOME/.cime/*.cmake** file. + The default compiler settings are defined in **$CIME/config/$model/machines/cmake_macros/**. + +- If you have a batch system, you may also need to create a **$HOME/.cime/config_batch.xml** file. + Out-of-the-box batch settings are set in **$CIME/config/$model/machines/config_batch.xml**. + +- Once you have defined a basic configuration for your machine in your **$HOME/.cime** xml files, run **scripts_regression_test.py** interactively. This test is found and must be run in the directory **$CIMEROOT/scripts/tests/**. + This performs a number of basic unit tests starting from the simplest and working toward more complicated ones. If you have problems running **scripts_regression_tests.py**, see :ref:`scripts_regression_tests`. + +After running those steps correctly, you are ready to try a case at your target compset and resolution. + +Validating a CESM port with prognostic components +------------------------------------------------- + +The following port validation is recommended for any new machine. +Carrying out these steps does not guarantee the model is running +properly in all cases nor that the model is scientifically valid on +the new machine. + +In addition to these tests, detailed validation should be carried out +for any new production run. That means verifying that model restarts +are bit-for-bit identical with a baseline run, that the model is +bit-for-bit reproducible when identical cases are run for several +months, and that production cases are monitored carefully as they +integrate forward to identify any potential problems as early as +possible. + +Users are responsible for their own validation process, +especially with respect to science validation. + +These are the recommended steps for validating a port for the CESM model: + +1. Verify basic functionality of your port by performing the cheyenne "prealpha" tests on your machine. This can be done by issuing the following command: + + :: + + ./create_test --xml-category prealpha --xml-machine cheyenne --xml-compiler intel --machine --compiler + + This command will run the prealpha tests *defined* for cheyenne with the intel compiler, but will run them on *your* machine with *your* compiler. + These tests will be run in the **$CIME_OUTPUT_ROOT**. To see the results of tests, you need to do the following: + + :: + + > $CIME_OUTPUT_ROOT/cs.status.[testid] + + where testid was indicated in the output when calling `create_test <../Tools_user/create_test.html>`_ + +2. Carry out ensemble consistency tests: + + This is described in **$CIMEROOT/tools/statistical_ensemble_test/README**. + The CESM-ECT (CESM Ensemble Consistency Test) determines whether a new simulation set up (new machine, compiler, etc.) is statistically distinguishable from an accepted ensemble. + The ECT process involves comparing several runs (3) generated with the new scenario to an ensemble built on a trusted machine (currently cheyenne). + The python ECT tools are located in the pyCECT subdirectory **$CIMEROOT/tools/statistical_ensemble_test/pyCECT. + + The verification tools in the CESM-ECT suite are: + + ``CAM-ECT``: detects issues in CAM and CLM (12 month runs) + + ``UF-CAM-ECT``: detects issues in CAM and CLM (9 time step runs) + + ``POP-ECT``: detects issues in POP and CICE (12 month runs) + + Follow the instructions in the **README** file to generate three ensemble runs for any of the above tests that are most relevant to your port. + Then please go to the `CESM2 ensemble verification website `_, where you can upload your files and subsequently obtain a quick response as to the success or failure of your verification. + +Performance tuning of a CESM port +------------------------------------------------- + +Once you have performed the verification that your port is successful, +you will want to determine the optimal pe-layout for your target +configurations (i.e. compset/resolution combinations). See the file +**$CIMEROOT/tools/load_balancing_tools/README** to understand how to +utilize the load balancing utilty. This utility finds reasonable PE +layouts for CIME-driven models. It will find these from timing files +you provide or from runs done by the tool. + +Once you are happy with the PE-layout for your target configuration, +you can it to the relevant **config_pes.xml** file for the component +that is responsible for generating the PE-layout for the target +configuration (this is normally referred to as the "primary" +component). + +Timing summaries for every successful case run, are located in the +case subdirectory **$CASEROOT/timing**. In addition, every +**cpl.log.timestamp** output file contains diagnostic timing +information. Search for ``tStamp`` in this file to see this +information. The timing information is useful for tracking down +temporal variability in model cost due to either inherent model +variability cost (I/O, spin-up, seasonal, and so on) or hardware. The +model daily cost generally is pretty constant unless I/O is written +intermittently, such as at the end of the month. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/running-a-case.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/running-a-case.rst.txt new file mode 100644 index 00000000000..b8366775716 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/running-a-case.rst.txt @@ -0,0 +1,616 @@ +.. _running-a-case: + +*************** +Running a Case +*************** + +.. _case-submit: + +======================== +Calling **case.submit** +======================== + +The script `case.submit <../Tools_user/case.submit.html>`_ will submit your run to the batch queueing system on your machine. +If you do not have a batch queueing system, `case.submit <../Tools_user/case.submit.html>`_ will start the job interactively, given that you have a proper MPI environment defined. +Running `case.submit <../Tools_user/case.submit.html>`_ is the **ONLY** way you should start a job. + +To see the options to `case.submit <../Tools_user/case.submit.html>`_, issue the command +:: + + > ./case.submit --help + +A good way to see what `case.submit <../Tools_user/case.submit.html>`_ will do, is to first call `preview_run <../Tools_user/preview_run.html>`_ +:: + + > ./preview_run + +which will output the environment for your run along with the batch submit and mpirun commands. +As an example, on the NCAR machine, cheyenne, for an A compset at the f19_g17_rx1 resolution, the following is output from `preview_run <../Tools_user/preview_run.html>`_: +:: + + CASE INFO: + nodes: 1 + total tasks: 36 + tasks per node: 36 + thread count: 1 + + BATCH INFO: + FOR JOB: case.run + ENV: + module command is /glade/u/apps/ch/opt/lmod/7.5.3/lmod/lmod/libexec/lmod python purge + module command is /glade/u/apps/ch/opt/lmod/7.5.3/lmod/lmod/libexec/lmod python load ncarenv/1.2 intel/17.0.1 esmf_libs mkl esmf-7.0.0-defio-mpi-O mpt/2.16 netcdf-mpi/4.5.0 pnetcdf/1.9.0 ncarcompilers/0.4.1 + Setting Environment OMP_STACKSIZE=256M + Setting Environment TMPDIR=/glade/scratch/mvertens + Setting Environment MPI_TYPE_DEPTH=16 + SUBMIT CMD: + qsub -q regular -l walltime=12:00:00 -A P93300606 .case.run + + FOR JOB: case.st_archive + ENV: + module command is /glade/u/apps/ch/opt/lmod/7.5.3/lmod/lmod/libexec/lmod python purge + module command is /glade/u/apps/ch/opt/lmod/7.5.3/lmod/lmod/libexec/lmod python load ncarenv/1.2 intel/17.0.1 esmf_libs mkl esmf-7.0.0-defio-mpi-O mpt/2.16 netcdf-mpi/4.5.0 pnetcdf/1.9.0 ncarcompilers/0.4.1 + Setting Environment OMP_STACKSIZE=256M + Setting Environment TMPDIR=/glade/scratch/mvertens + Setting Environment MPI_TYPE_DEPTH=16 + Setting Environment TMPDIR=/glade/scratch/mvertens + Setting Environment MPI_USE_ARRAY=false + SUBMIT CMD: + qsub -q share -l walltime=0:20:00 -A P93300606 -W depend=afterok:0 case.st_archive + + MPIRUN: + mpiexec_mpt -np 36 -p "%g:" omplace -tm open64 /glade/scratch/mvertens/jim/bld/cesm.exe >> cesm.log.$LID 2>&1 + +Each of the above sections is defined in the various **$CASEROOT** xml files and the associated variables can be modified using the +`xmlchange <../Tools_user/xmlchange.html>`_ command (or in the case of tasks and threads, this can also be done with the `pelayout <../Tools_user/pelayout.html>`_ command). + +- The PE layout is set by the xml variables **NTASKS**, **NTHRDS** and **ROOTPE**. To see the exact settings for each component, issue the command + :: + + ./xmlquery NTASKS,NTHRDS,ROOTPE + + To change all of the **NTASKS** settings to say 30 and all of the **NTHRDS** to 4, you can call + :: + + ./xmlchange NTASKS=30,NTHRDS=4 + + To change JUST the ATM NTASKS to 8, you can call + :: + + ./xmlchange NTASKS_ATM=8 + +- Submit parameters are set by the xml variables in the file **env_batch.xml**. This file is special in certain xml variables can appear in more than one group. + NOTE: The groups are the list of jobs that are submittable for a case. + Normally, the minimum set of groups are **case.run** and **case.st_archive**. + We will illustrate how to change an xml variable in **env_batch.xml** using the xml variable ``JOB_WALLCLOCK_TIME``. + + - To change ``JOB_WALLCLOCK_TIME`` for all groups to 2 hours for cheyenne, use + :: + + ./xmlchange JOB_WALLCLOCK_TIME=02:00:00 + + - To change ``JOB_WALLCLOCK_TIME`` to 20 minutes for cheyenne for just **case.run**, use + :: + + ./xmlchange JOB_WALLCLOCK_TIME=00:20:00 --subgroup case.run + + +Before you submit the case using `case.submit <../Tools_user/case.submit.html>`_, make sure the batch queue variables are set correctly for your run +In particular, make sure that you have appropriate account numbers (``PROJECT``), time limits (``JOB_WALLCLOCK_TIME``), and queue (``JOB_QUEUE``). + +Also modify **$CASEROOT/env_run.xml** for your case using **xmlchange**. + +Once you have executed `case.setup <../Tools_user/case.setup.html>`_ and `case.build <../Tools_user/case.build.html>`_ , call `case.submit <../Tools_user/case.submit.html>`_ +to submit the run to your machine's batch queue system. +:: + + > cd $CASEROOT + > ./case.submit + +--------------------------------- +Result of running case.submit +--------------------------------- + +When called, the `case.submit <../Tools_user/case.submit.html>`_ script will: + +- Load the necessary environment. + +- Confirm that locked files are consistent with the current xml files. + +- Run `preview_namelist <../Tools_user/preview_namelist.html>`_, which in turn will run each component's **cime_config/buildnml** script. + +- Run :ref:`check_input_data` to verify that the required data are present. + +- Submit the job to the batch queue. which in turn will run the `case.run <../Tools_user/case.run.html>`_ script. + +Upon successful completion of the run, `case.run <../Tools_user/case.run.html>`_ will: + +- Put timing information in **$CASEROOT/timing**. + See :ref:`model timing data` for details. + +- Submit the short-term archiver script `case.st_archive <../Tools_user/case.st_archive.html>`_ to the batch queue if ``$DOUT_S`` is TRUE. + Short-term archiving will copy and move component history, log, diagnostic, and restart files from ``$RUNDIR`` to the short-term archive directory ``$DOUT_S_ROOT``. + +- Resubmit `case.run <../Tools_user/case.run.html>`_ if ``$RESUBMIT`` > 0. + + +--------------------------------- +Monitoring case job statuses +--------------------------------- + +The **$CASEROOT/CaseStatus** file contains a log of all the job states and `xmlchange <../Tools_user/xmlchange.html>`_ commands in chronological order. +Below is an example of status messages: +:: + + 2017-02-14 15:29:50: case.setup starting + --------------------------------------------------- + 2017-02-14 15:29:54: case.setup success + --------------------------------------------------- + 2017-02-14 15:30:58: xmlchange success ./xmlchange STOP_N=2,STOP_OPTION=nmonths + --------------------------------------------------- + 2017-02-14 15:31:26: xmlchange success ./xmlchange STOP_N=1 + --------------------------------------------------- + 2017-02-14 15:33:51: case.build starting + --------------------------------------------------- + 2017-02-14 15:53:34: case.build success + --------------------------------------------------- + 2017-02-14 16:02:35: case.run starting + --------------------------------------------------- + 2017-02-14 16:20:31: case.run success + --------------------------------------------------- + 2017-02-14 16:20:45: st_archive starting + --------------------------------------------------- + 2017-02-14 16:20:58: st_archive success + --------------------------------------------------- + +.. note:: + After a successful first run, set the **env_run.xml** variable ``$CONTINUE_RUN`` to ``TRUE`` before resubmitting or the job will not + progress. + + You may also need to modify the **env_run.xml** variables + ``$STOP_OPTION``, ``$STOP_N`` and/or ``$STOP_DATE`` as well as + ``$REST_OPTION``, ``$REST_N`` and/or ``$REST_DATE``, and ``$RESUBMIT`` + before resubmitting. + +See the :ref:`basic example` for a complete example of how to run a case. + +--------------------------------- +Troubleshooting a job that fails +--------------------------------- + +There are several places to look for information if a job fails. +Start with the **STDOUT** and **STDERR** file(s) in **$CASEROOT**. +If you don't find an obvious error message there, the +**$RUNDIR/$model.log.$datestamp** files will probably give you a +hint. + +First, check **cpl.log.$datestamp**, which will often tell you +*when* the model failed. Then check the rest of the component log +files. See :ref:`troubleshooting run-time problems` for more information. + +.. _input_data: + +==================================================== +Input data +==================================================== + +The **check_input_data** script determines if the required data files +for your case exist on local disk in the appropriate subdirectory of +``$DIN_LOC_ROOT``. It automatically downloads missing data required for your simulation. + +.. note:: It is recommended that users on a given system share a common ``$DIN_LOC_ROOT`` directory to avoid duplication on + disk of large amounts of input data. You may need to talk to your system administrator in order to set this up. + +The required input data sets needed for each component are found in the +**$CASEROOT/Buildconf** directory. These files are generated by a call +to **preview_namlists** and are in turn created by each component's +**buildnml** script. For example, for compsets consisting only of data +models (i.e. ``A`` compsets), the following files are created: +:: + + cpl.input_data_list + datm.input_data_list + dice.input_data_list + docn.input_data_list + drof.input_data_list + +You can independently verify the presence of the required data by +using the following commands: +:: + + > cd $CASEROOT + > ./check_input_data --help + > ./check_input_data + +If data sets are missing, obtain them from the input data server(s) via the commands: +:: + + > cd $CASEROOT + > ./check_input_data --download + +``check_input_data`` is automatically called by the case control +system, when the case is built and submitted. So manual usage of this +script is optional. + +----------------------------------- +Distributed Input Data Repositories +----------------------------------- + +CIME has the ability to utilize multiple input data repositories, with +potentially different protocols. The repositories are defined in the +file **$CIMEROOT/config/$model/config_inputdata.xml**. The currently +supported server protocols are: ``gridftp``, ``subversion``, ``ftp`` and +``wget``. These protocols may not all be supported on your machine, +depending on software configuration. + +.. note:: You now have the ability to create your own input data + repository and add it to the **config_inputdata.xml**. This + will permit you to easily collaborate by sharing your + required inputdata with others. + + +.. _controlling-start-stop-restart: + +==================================================== +Starting, Stopping and Restarting a Run +==================================================== + +The file **env_run.xml** contains variables that may be modified at +initialization or any time during the course of a model run. Among +other features, the variables comprise coupler namelist settings for +the model stop time, restart frequency, coupler history frequency, and +a flag to determine if the run should be flagged as a continuation run. + +At a minimum, you will need to set the variables ``$STOP_OPTION`` and +``$STOP_N``. Other driver namelist settings then will have consistent and +reasonable default values. The default settings guarantee that +restart files are produced at the end of the model run. + +By default, the stop time settings are: +:: + + STOP_OPTION = ndays + STOP_N = 5 + STOP_DATE = -999 + +The default settings are appropriate only for initial testing. Before +starting a longer run, update the stop times based on the case +throughput and batch queue limits. For example, if the model runs 5 +model years/day, set ``RESUBMIT=30, STOP_OPTION= nyears, and STOP_N= +5``. The model will then run in five-year increments and stop after +30 submissions. + +.. _run-type-init: + +--------------------------------------------------- +Run-type initialization +--------------------------------------------------- + +The case initialization type is set using the ``$RUN_TYPE`` variable in +**env_run.xml**. A CIME run can be initialized in one of three ways: + +``startup`` + + In a startup run (the default), all components are initialized using + baseline states. These states are set independently by each component + and can include the use of restart files, initial files, external + observed data files, or internal initialization (that is, a "cold start"). + In a startup run, the coupler sends the start date to the components + at initialization. In addition, the coupler does not need an input data file. + In a startup initialization, the ocean model does not start until the second + ocean coupling step. + +``branch`` + + In a branch run, all components are initialized using a consistent + set of restart files from a previous run (determined by the + ``$RUN_REFCASE`` and ``$RUN_REFDATE`` variables in **env_run.xml**). + The case name generally is changed for a branch run, but it + does not have to be. In a branch run, the ``$RUN_STARTDATE`` setting is + ignored because the model components obtain the start date from + their restart data sets. Therefore, the start date cannot be changed + for a branch run. This is the same mechanism that is used for + performing a restart run (where ``$CONTINUE_RUN`` is set to TRUE in + the **env_run.xml** file). Branch runs typically are used when + sensitivity or parameter studies are required, or when settings for + history file output streams need to be modified while still + maintaining bit-for-bit reproducibility. Under this scenario, the + new case is able to produce an exact bit-for-bit restart in the same + manner as a continuation run if no source code or component namelist + inputs are modified. All models use restart files to perform this + type of run. ``$RUN_REFCASE`` and ``$RUN_REFDATE`` are required for + branch runs. To set up a branch run, locate the restart tar file or + restart directory for ``$RUN_REFCASE`` and ``$RUN_REFDATE`` from a + previous run, then place those files in the ``$RUNDIR`` directory. + See :ref:`Starting from a reference case`. + +``hybrid`` + + A hybrid run is initialized like a startup but it uses + initialization data sets from a previous case. It is similar + to a branch run with relaxed restart constraints. + A hybrid run allows users to bring together + combinations of initial/restart files from a previous case + (specified by ``$RUN_REFCASE``) at a given model output date + (specified by ``$RUN_REFDATE``). Unlike a branch run, the starting + date of a hybrid run (specified by ``$RUN_STARTDATE``) can be + modified relative to the reference case. In a hybrid run, the model + does not continue in a bit-for-bit fashion with respect to the + reference case. The resulting climate, however, should be + continuous provided that no model source code or namelists are + changed in the hybrid run. In a hybrid initialization, the ocean + model does not start until the second ocean coupling step, and the + coupler does a "cold start" without a restart file. + +The variable ``$RUN_TYPE`` determines the initialization type. This +setting is only important for the initial production run when +the ``$CONTINUE_RUN`` variable is set to FALSE. After the initial +run, the ``$CONTINUE_RUN`` variable is set to TRUE, and the model +restarts exactly using input files in a case, date, and bit-for-bit +continuous fashion. + +The variable ``$RUN_STARTDATE`` is the start date (in yyyy-mm-dd format) +for either a startup run or a hybrid run. If the run is targeted to be +a hybrid or branch run, you must specify values for ``$RUN_REFCASE`` and +``$RUN_REFDATE``. + +.. _starting_from_a_refcase: + +---------------------------------------- +Starting from a reference case (REFCASE) +---------------------------------------- + +There are several xml variables that control how either a branch or a hybrid case can start up from another case. +The initial/restart files needed to start up a run from another case are required to be in ``$RUNDIR``. +The xml variable ``$GET_REFCASE`` is a flag that if set will automatically prestaging the refcase restart data. + +- If ``$GET_REFCASE`` is ``TRUE``, then the the values set by ``$RUN_REFDIR``, ``$RUN_REFCASE``, ``$RUN_REFDATE`` and ``$RUN_TOD`` are + used to prestage the data by symbolic links to the appropriate path. + + The location of the necessary data to start up from another case is controlled by the xml variable ``$RUN_REFDIR``. + + - If ``$RUN_REFDIR`` is an absolute pathname, then it is expected that initial/restart files needed to start up a model run are in ``$RUN_REFDIR``. + + - If ``$RUN_REFDIR`` is a relative pathname, then it is expected that initial/restart files needed to start up a model run are in a path relative to ``$DIN_LOC_ROOT`` with the absolute pathname ``$DIN_LOC_ROOT/$RUN_REFDIR/$RUN_REFCASE/$RUN_REFDATE``. + + - If ``$RUN_REFDIR`` is a relative pathname AND is not available in ``$DIN_LOC_ROOT`` then CIME will attempt to download the data from the input data repositories. + + +- If ``$GET_REFCASE`` is ``FALSE`` then the data is assumed to already exist in ``$RUNDIR``. + +.. _controlling-output-data: + +========================= +Controlling output data +========================= + +During a model run, each model component produces its own output +data sets in ``$RUNDIR`` consisting of history, initial, restart, diagnostics, output +log and rpointer files. Component history files and restart files are +in netCDF format. Restart files are used to either restart the same +model or to serve as initial conditions for other model cases. The +rpointer files are ascii text files that list the component history and +restart files that are required for restart. + +Archiving (referred to as short-term archiving here) is the phase of a model run when output data are +moved from ``$RUNDIR`` to a local disk area (short-term archiving). +It has no impact on the production run except to clean up disk space +in the ``$RUNDIR`` which can help manage user disk quotas. + +Several variables in **env_run.xml** control the behavior of +short-term archiving. This is an example of how to control the +data output flow with two variable settings: +:: + + DOUT_S = TRUE + DOUT_S_ROOT = /$SCRATCH/$user/$CASE/archive + + +The first setting above is the default, so short-term archiving is enabled. The second sets where to move files at the end of a successful run. + +Also: + +- All output data is initially written to ``$RUNDIR``. + +- Unless you explicitly turn off short-term archiving, files are + moved to ``$DOUT_S_ROOT`` at the end of a successful model run. + +- Users generally should turn off short-term archiving when developing new code. + +Standard output generated from each component is saved in ``$RUNDIR`` +in a *log file*. Each time the model is run, a single coordinated datestamp +is incorporated into the filename of each output log file. +The run script generates the datestamp in the form YYMMDD-hhmmss, indicating +the year, month, day, hour, minute and second that the run began +(ocn.log.040526-082714, for example). + +By default, each component also periodically writes history files +(usually monthly) in netCDF format and also writes netCDF or binary +restart files in the ``$RUNDIR`` directory. The history and log files +are controlled independently by each component. History output control +(for example, output fields and frequency) is set in each component's namelists. + +The raw history data does not lend itself well to easy time-series +analysis. For example, CAM writes one or more large netCDF history +file(s) at each requested output period. While this behavior is +optimal for model execution, it makes it difficult to analyze time +series of individual variables without having to access the entire +data volume. Thus, the raw data from major model integrations usually +is post-processed into more user-friendly configurations, such as +single files containing long time-series of each output fields, and +made available to the community. + +For CESM, refer to the `CESM2 Output Filename Conventions +`_ +for a description of output data filenames. + +.. _restarting-a-run: + +====================== +Restarting a run +====================== + +Active components (and some data components) write restart files +at intervals that are dictated by the driver via the setting of the +``$REST_OPTION`` and ``$REST_N`` variables in **env_run.xml**. Restart +files allow the model to stop and then start again with bit-for-bit +exact capability; the model output is exactly the same as if the model +had not stopped. The driver coordinates the writing of restart +files as well as the time evolution of the model. + +Runs that are initialized as branch or hybrid runs require +restart/initial files from previous model runs (as specified by the +variables ``$RUN_REFCASE`` and ``$RUN_REFDATE``). Pre-stage these files +to the case ``$RUNDIR`` (normally ``$EXEROOT/../run``) before the model +run starts. Normally this is done by copying the contents of the +relevant **$RUN_REFCASE/rest/$RUN_REFDATE.00000** directory. + +Whenever a component writes a restart file, it also writes a restart +pointer file in the format **rpointer.$component**. Upon a restart, each +component reads the pointer file to determine which file to read in +order to continue the run. These are examples of pointer files created +for a component set using full active model components. +:: + + - rpointer.atm + - rpointer.drv + - rpointer.ice + - rpointer.lnd + - rpointer.rof + - rpointer.cism + - rpointer.ocn.ovf + - rpointer.ocn.restart + + +If short-term archiving is turned on, the model archives the +component restart data sets and pointer files into +**$DOUT_S_ROOT/rest/yyyy-mm-dd-sssss**, where yyyy-mm-dd-sssss is the +model date at the time of the restart. (See below for more details.) + +--------------------------------- +Backing up to a previous restart +--------------------------------- + +If a run encounters problems and crashes, you will normally have to +back up to a previous restart. If short-term archiving is enabled, +find the latest **$DOUT_S_ROOT/rest/yyyy-mm-dd-ssss/** directory +and copy its contents into your run directory (``$RUNDIR``). + +Make sure that the new restart pointer files overwrite older files in +in ``$RUNDIR`` or the job may not restart in the correct place. You can +then continue the run using the new restarts. + +Occasionally, when a run has problems restarting, it is because the +pointer and restart files are out of sync. The pointer files +are text files that can be edited to match the correct dates +of the restart and history files. All of the restart files should +have the same date. + +============================ +Archiving model output data +============================ + +The output data flow from a successful run depends on whether or not +short-term archiving is enabled, as it is by default. + +------------- +No archiving +------------- + +If no short-term archiving is performed, model output data remains +remain in the run directory as specified by ``$RUNDIR``. + +--------------------- +Short-term archiving +--------------------- + +If short-term archiving is enabled, component output files are moved +to the short-term archiving area on local disk, as specified by +``$DOUT_S_ROOT``. The directory normally is **$EXEROOT/../../archive/$CASE.** +and has the following directory structure: :: + + rest/yyyy-mm-dd-sssss/ + logs/ + atm/hist/ + cpl/hist + glc/hist + ice/hist + lnd/hist + ocn/hist + rof/hist + wav/hist + .... + +The **logs/** subdirectory contains component log files that were +created during the run. Log files are also copied to the short-term +archiving directory and therefore are available for long-term archiving. + +The **rest/** subdirectory contains a subset of directories that each contains +a *consistent* set of restart files, initial files and rpointer +files. Each subdirectory has a unique name corresponding to the model +year, month, day and seconds into the day when the files were created. +The contents of any restart directory can be used to create a branch run +or a hybrid run or to back up to a previous restart date. + +--------------------- +Long-term archiving +--------------------- + +Users may choose to follow their institution's preferred method for long-term +archiving of model output. Previous releases of CESM provided an external +long-term archiver tool that supported mass tape storage and HPSS systems. +However, with the industry migration away from tape archives, it is no longer +feasible for CIME to support all the possible archival schemes available. + +================================================ +Data Assimilation and other External Processing +================================================ + +CIME provides a capability to run a task on the compute nodes either +before or after the model run. CIME also provides a data assimilation +capability which will cycle the model and then a user defined task for +a user determined number of cycles. + + +------------------------- +Pre and Post run scripts +------------------------- + +Variables ``PRERUN_SCRIPT`` and ``POSTRUN_SCRIPT`` can each be used to name +a script which should be exectuted immediately prior starting or +following completion of the CESM executable within the batch +environment. The script is expected to be found in the case directory +and will recieve one argument which is the full path to that +directory. If the script is written in python and contains a +subroutine with the same name as the script, it will be called as a +subroutine rather than as an external shell script. + +------------------------- +Data Assimilation scripts +------------------------- + +Variables ``DATA_ASSIMILATION``, ``DATA_ASSIMILATION_SCRIPT``, and +``DATA_ASSIMILATION_CYCLES`` may also be used to externally control +model evolution. If ``DATA_ASSIMILATION`` is true after the model +completes the ``DATA_ASSIMILATION_SCRIPT`` will be run and then the +model will be started again ``DATA_ASSIMILATION_CYCLES`` times. The +script is expected to be found in the case directory and will recieve +two arguments, the full path to that directory and the cycle number. +If the script is written in python and contains a subroutine with the +same name as the script, it will be called as a subroutine rather than +as an external shell script. + +..: A simple example pre run script. + +:: + + #!/usr/bin/env python3 + import sys + from CIME.case import Case + + def myprerun(caseroot): + with Case(caseroot) as case: + print ("rundir is ",case.get_value("RUNDIR")) + + if __name__ == "__main__": + caseroot = sys.argv[1] + myprerun(caseroot) diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/setting-up-a-case.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/setting-up-a-case.rst.txt new file mode 100644 index 00000000000..2ffc473fafd --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/setting-up-a-case.rst.txt @@ -0,0 +1,83 @@ +.. _setting-up-a-case: + +********************************* +Setting up a Case +********************************* + +After creating a case, some aspects of the case are fixed (any variables in env_case.xml). Changing the pe-layout +(see :ref:`Changing Pes`) or some aspects of the batch system you may be using must be modified before running +**case.setup**. + +=================================== +Calling **case.setup** +=================================== + +After creating a case or changing aspects of a case, such as the pe-layout, call the `case.setup <../Tools_user/case.setup.html>`_ command from ``$CASEROOT``. +This creates the following additional files and directories in ``$CASEROOT``: + + ============================= =============================================================================================================================== + .case.run A (hidden) file with the commands that will be used to run the model (such as “mpirun”) + + and any batch directives needed. The directive values are generated using the contents + + of **env_mach_pes.xml**. Running `case.setup --clean <../Tools_user/case.setup.html>`_ + + will remove this file. This file should not be edited directly and instead controlled + + through XML variables in **env_batch.xml**. It should also *never* be run directly. + + CaseStatus File containing a list of operations done in the current case. + + case.st_archive Script to perform short term archiving to disk for your case + + output. Note that this script is run automatically by the normal CIME workflow. + + Depends.* Lists of source code files that needs special build options. + + Macros.cmake File containing machine-specific makefile directives for your target platform/compiler. + + This file is created if it does not already exist. + + The user can modify the file to change certain aspects of the build, such as compiler flags. + + Running `case.setup --clean <../Tools_user/case.setup.html>`_ will not remove the file once it has been created. + However. if you remove or rename the Macros.make file, running + + `case.setup <../Tools_user/case.setup.html>`_ recreates it. + + user_nl_xxx[_NNNN] Files where all user modifications to component namelists are made. + + **xxx** is any one of the set of components targeted for the case. + + For example, for a full active CESM compset, **xxx** is cam, clm or rtm, and so on. + + NNNN goes from 0001 to the number of instances of that component. + (See :ref:`multiple instances`) + + For a case with 1 instance of each component (default), NNNN will not appear + in the user_nl file names. + + A user_nl file of a given name is created only once. + + Calling `case.setup --clean <../Tools_user/case.setup.html>`_ will *not remove* any user_nl files. + + Changing the number of instances in the **env_mach_pes.xml** file will cause only + + new user_nl files to be added to ``$CASEROOT``. + + CaseDocs/ Directory that contains all the component namelists for the run. + + This is for reference only and files in this directory SHOULD NOT BE EDITED since they will + + be overwritten at build time and runtime. + + .env_mach_specific.* Files summarizing the **module load** commands and environment variables that are set when + + the scripts in ``$CASEROOT`` are called. These files are not used by the case but can be + + useful for debugging **module load** and environment settings. + + software_environment.txt This file records some aspects of the computing system on which the case is built, + + such as the shell environment. + ============================= =============================================================================================================================== diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/testing.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/testing.rst.txt new file mode 100644 index 00000000000..32aec880ffe --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/testing.rst.txt @@ -0,0 +1,656 @@ +.. _testing: + +************** +Testing Cases +************** + +`create_test <../Tools_user/create_test.html>`_ +is a powerful system testing capability provided by the CIME Case Control System. +create_test can, in one command, create a case, setup, build and run the case +according to the test type and return a PASS or FAIL for the test result. + +.. _individual: + +An individual test can be run as:: + + $CIMEROOT/scripts/create_test $test_name + +For example:: + + $CIMEROOT/scripts/create_test ERP_ne4pg2_oQU480.F2010 + +Everything the test will do is controlled by parsing the test name. The elements of the test name are +explained next. + +================= +Testname syntax +================= +.. _`Test naming`: + +Tests must be named with the following forms, [ ]=optional:: + + TESTTYPE[_MODIFIERS].GRID.COMPSET[.MACHINE_COMPILER][.GROUP-TESTMODS] + +================= ===================================================================================== +NAME PART +================= ===================================================================================== +TESTTYPE_ the general type of test, e.g. SMS. Options are listed in the following table and config_tests.xml. +MODIFIERS_ Changes to the default settings for the test type. + See the following table and test_scheduler.py. +GRID The grid set (usually a grid alias). +COMPSET The compset, Can be a longname but usually a compset alias +MACHINE This is optional; if this value is not supplied, `create_test <../Tools_user/create_test.html>`_ + will probe the underlying machine. +COMPILER If this value is not supplied, use the default compiler for MACHINE. +GROUP-TESTMODS_ This is optional. This points to a directory with ``user_nl_xxx`` files or a ``shell_commands`` + that can be used to make namelist and other modifications prior to running a test. +================= ===================================================================================== + +.. _TESTTYPE: + +------------- +TESTTYPE +------------- +The test types in CIME are all system tests: they compile all the code needed in a case, They test +functionality of the model such as restart capability, invariance with MPI task count, and short +term archiving. At this time, they do not test for scientific correctness. + +The currently supported test types are: + +============ ===================================================================================== +TESTTYPE Description +============ ===================================================================================== + ERS Exact restart from startup (default 6 days + 5 days) + | Do an 11 day initial test - write a restart at day 6. (file suffix: base) + | Do a 5 day restart test, starting from restart at day 6. (file suffix: rest) + | Compare component history files '.base' and '.rest' at day 11 with cprnc + | PASS if they are identical. + + ERS2 Exact restart from startup (default 6 days + 5 days). + + | Do an 11 day initial test without making restarts. (file suffix: base) + | Do an 11 day restart test stopping at day 6 with a restart, + then resuming from restart at day 6. (file suffix: rest) + | Compare component history files ".base" and ".rest" at day 11. + + ERT Longer version of ERS. Exact restart from startup, default 2 month + 1 month (ERS with info DBUG = 1). + + IRT Exact restart from startup, (default 4 days + 7 days) with restart from interim file. + + ERIO Exact restart from startup with different IO file types, (default 6 days + 5 days). + + ERR Exact restart from startup with resubmit, (default 4 days + 3 days). + + ERRI Exact restart from startup with resubmit, (default 4 days + 3 days). Tests incomplete logs option for st_archive. + + ERI hybrid/branch/exact restart test, default (by default STOP_N is 22 days) + ref1case + Do an initial run for 3 days writing restarts at day 3. + ref1case is a clone of the main case. + Short term archiving is on. + ref2case (Suffix hybrid) + Do a hybrid run for default 19 days running with ref1 restarts from day 3, + and writing restarts at day 10. + ref2case is a clone of the main case. + Short term archiving is on. + case + Do a branch run, starting from restarts written in ref2case, + for 9 days and writing restarts at day 5. + Short term archiving is off. + case (Suffix base) + Do a restart run from the branch run restarts for 4 days. + Compare component history files '.base' and '.hybrid' at day 19. + Short term archiving is off. + + ERP PES counts hybrid (OPENMP/MPI) restart bit for bit test from startup, (default 6 days + 5 days). + Initial PES set up out of the box + Do an 11 day initial test - write a restart at day 6. (file suffix base) + Half the number of tasks and threads for each component. + Do a 5 day restart test starting from restart at day 6. (file suffix rest) + Compare component history files '.base' and '.rest' at day 11. + This is just like an ERS test but the tasks/threading counts are modified on restart + + PEA Single PE bit for bit test (default 5 days) + Do an initial run on 1 PE with mpi library. (file suffix: base) + Do the same run on 1 PE with mpiserial library. (file suffix: mpiserial) + Compare base and mpiserial. + + PEM Modified PE counts for MPI(NTASKS) bit for bit test (default 5 days) + Do an initial run with default PE layout (file suffix: base) + Do another initial run with modified PE layout (NTASKS_XXX => NTASKS_XXX/2) (file suffix: modpes) + Compare base and modpes + + PET Modified threading OPENMP bit for bit test (default 5 days) + Do an initial run where all components are threaded by default. (file suffix: base) + Do another initial run with NTHRDS=1 for all components. (file suffix: single_thread) + Compare base and single_thread. + + PFS Performance test setup. History and restart output is turned off. (default 20 days) + + ICP CICE performance test. + + OCP POP performance test. (default 10 days) + + MCC Multi-driver validation vs single-driver (both multi-instance). (default 5 days) + + NCK Multi-instance validation vs single instance - sequential PE for instances (default length) + Do an initial run test with NINST 1. (file suffix: base) + Do an initial run test with NINST 2. (file suffix: multiinst for both _0001 and _0002) + Compare base and _0001 and _0002. + + REP Reproducibility: Two identical initial runs are bit for bit. (default 5 days) + + SBN Smoke build-namelist test (just run preview_namelist and check_input_data). + + SMS Smoke test (default 5 days) + Do a 5 day initial test that runs to completing without error. (file suffix: base) + + SEQ Different sequencing bit for bit test. (default 10 days) + Do an initial run test with out-of-box PE-layout. (file suffix: base) + Do a second run where all root pes are at pe-0. (file suffix: seq) + Compare base and seq. + + DAE Data assimilation test, default 1 day, two DA cycles, no data modification. + + PRE Pause-resume test: by default a bit for bit test of pause-resume cycling. + Default 5 hours, five pause/resume cycles, no data modification. + | + +============ ===================================================================================== + +The tests run for a default length indicated above, will use default pelayouts for the case +on the machine the test runs on and its default coupler and MPI library. Its possible to modify +elements of the test through a test type modifier. + +.. _MODIFIERS: + +------------------- +Testtype Modifiers +------------------- + +============ ===================================================================================== +MODIFIERS Description +============ ===================================================================================== + _C# Set number of instances to # and use the multi driver (can't use with _N). + + _CG CALENDAR set to "GREGORIAN" + + _D XML variable DEBUG set to "TRUE" + + _I Marker to distinguish tests with same name - ignored. + + _Lo# Run length set by o (STOP_OPTION) and # (STOP_N). + | o = {"y":"nyears", "m":"nmonths", "d":"ndays", + | \ "h":"nhours", "s":"nseconds", "n":"nsteps"} + + _Mx Set MPI library to x. + + _N# Set number of instances to # and use a single driver (can't use with _C). + + _Px Set create_newcase's ``--pecount`` to x, which is usually N (tasks) or NxM (tasks x threads per task). + + _R For testing in PTS_MODE or Single Column Model (SCM) mode. + For PTS_MODE, compile with mpi-serial. + + _Vx Set driver to x. + | + +============ ===================================================================================== + +For example, this will run the ERP test with debugging turned on during compilation:: + + CIMEROOT/scripts/create_test ERP_D.ne4pg2_oQU480.F2010 + +This will run the ERP test for 3 days instead of the default 11 days:: + + CIMEROOT/scripts/create_test ERP_Ld3.ne4pg2_oQU480.F2010 + +You can combine testtype modifiers:: + + CIMEROOT/scripts/create_test ERP_D_Ld3.ne4pg2_oQU480.F2010 + +------------------- +Test Case Modifiers +------------------- + +.. _GROUP-TESTMODS: + +create_test runs with out-of-the-box compsets and grid sets. Sometimes you may want to run a test with +modification to a namelist or other setting without creating an entire compset. CCS provides the testmods +capability for this situation. + +A testmod is a string at the end of the full testname (including machine and compiler) +with the form GROUP-TESTMODS which are parsed by create_test as follows: + + +============ ===================================================================================== +TESTMOD Description +============ ===================================================================================== +GROUP Define the subdirectory of testmods_dirs and the parent directory of various testmods. + +TESTMODS A subdirectory of GROUP containing files which set non-default values + of the set-up and run-time variables via namelists or xml_change commands. + Example: + + | GROUP-TESTMODS = cam-outfrq9s points to + | $cesm/components/cam/cime_config/testdefs/testmods_dirs/cam/outfrq9s + | while allactive-defaultio points to + | $cesm/cime_config/testmods_dirs/allactive/defaultio + +============ ===================================================================================== + +For example, the ERP test for an E3SM F-case can be modified to use a different radiation scheme:: + + CIMEROOT/scripts/create_test ERP_D_Ld3.ne4pg2_oQU480.F2010.pm-cpu_intel.eam-rrtmgp + +This tells create_test to look in $e3sm/components/eam/cime_config/testdefs/testmods_dirs/eam/rrtmpg +where it finds the following lines in the shell_commands file:: + + #!/bin/bash + ./xmlchange --append CAM_CONFIG_OPTS='-rad rrtmgp' + +These commands are applied after the testcase is created and case.setup is called. + +The contents of each testmods directory can include +:: + + user_nl_$components namelist variable=value pairs + shell_commands xmlchange commands + user_mods a list of other GROUP-TESTMODS which should be imported + but at a lower precedence than the local testmods. + +eam/cime_config/testdefs/testmods_dirs/eam contains modifications for eam in an F-case test. You +might make a directory called eam/cime_config/testdefs/testmods_dirs/elm to modify the land model +in an F-case test. + +The "rrtmpg" directory contains the actual testmods to apply. +Note; do not use '-' in the testmods directory name because it has a special meaning to create_test. + +======================== +Test progress and output +======================== + +Each test run by `create_test <../Tools_user/create_test.html>`_ includes the following mandatory steps: + +* CREATE_NEWCASE: creating the create +* XML: xml changes to case based on test settings +* SETUP: setup case (case.setup) +* SHAREDLIB_BUILD: build sharedlibs +* MODEL_BUILD: build module (case.build) +* SUBMIT: submit test (case.submit) +* RUN: run test test + +And the following optional phases: + +* NLCOMP: Compare case namelists against baselines +* THROUGHPUT: Compare throughput against baseline throughput +* MEMCOMP: Compare memory usage against baseline memory usage +* MEMLEAK: Check for memleak +* COMPARE: Used to track test-specific comparions, for example, an ERS test would have a COMPARE_base_rest phase representing the check that the base result matched the restart result. +* GENERATE: Generate baseline results +* BASELINE: Compare results against baselines + +Each phase within the test may be in one of the following states: + +* PASS: The phase was executed successfully +* FAIL: We attempted to execute this phase, but it failed. If this phase is mandatory, no further progress will be made on this test. A detailed explanation of the failure should be in TestStatus.log. +* PEND: This phase will be run or is currently running but not complete + +====================================================== +Running multiple tests and other command line examples +====================================================== + +Multiple tests can be run by listing all of the test names on the command line:: + + $CIMEROOT/scripts/create_test $test_name $test_name2 + +or by putting the test names into a file, one name per line:: + + $CIMEROOT/scripts/create_test -f $file_of_test_names + +To run a test with a non-default compiler:: + + ./create_test SMS.f19_f19.A --compiler intel + +To run a test with baseline comparisons against baseline name 'master':: + + ./create_test SMS.f19_f19.A -c -b master + +To run a test and update baselines with baseline name 'master':: + + ./create_test SMS.f19_f19.A -g -b master + +To run a test with a non-default test-id:: + + ./create_test SMS.f19_f19.A -t my_test_id + +To run a test and use a non-default test-root for your case dir:: + + ./create_test SMS.f19_f19.A -t $test_root + +To run a test and use and put case, build, and run dirs all in the same root:: + + ./create_test SMS.f19_f19.A --output-root $output_root + +To run a test and force it to go into a certain batch queue:: + + ./create_test SMS.f19_f19.A -q myqueue + +The Case Control System supports more sophisticated ways to specify a suite of tests and +how they should be run. One approach uses XML files and the other uses python dictionaries. + +=========================== +Test control with XML files +=========================== +.. _query_testlists: + +A pre-defined suite of tests can by run using the ``--xml`` options to create_test, +which harvest test names from testlist*.xml files. +As described in https://github.com/ESCOMP/ctsm/wiki/System-Testing-Guide, +to determine what pre-defined test suites are available and what tests they contain, +you can run query_testlists_. + +Test suites are retrieved in create_test via 3 selection attributes:: + + --xml-category your_category The test category. + --xml-machine your_machine The machine. + --xml-compiler your_compiler The compiler. + +| If none of these 3 are used, the default values are 'none'. +| If any of them are used, the default for the unused options is 'all'. +| Existing values of these attributes can be seen by running query_testlists_. + +The search for test names can be restricted to a single test list using:: + + --xml-testlist your_testlist + +Omitting this results in searching all testlists listed in:: + + cime/config/{cesm,e3sm}/config_files.xml + +**$CIMEROOT/scripts/query_testlists** gathers descriptions of the tests and testlists available +in the XML format, the components, and projects. + +The ``--xml-{compiler,machine,category,testlist}`` arguments can be used +as in create_test (above) to focus the search. +The 'category' descriptor of a test can be used to run a group of associated tests at the same time. +The available categories, with the tests they encompass, can be listed by:: + + ./query_testlists --define-testtypes + +The ``--show-options`` argument does the same, but displays the 'options' defined for the tests, +such as queue, walltime, etc.. + +Adding a test requires first deciding which compset will be tested +and then finding the appropriate testlist_$component.xml file:: + + components/$component/cime_config/testdefs/ + testlist_$component.xml + testmods_dirs/$component/{TESTMODS1,TESTMODS2,...} + cime_config/ + testlist_allactive.xml + testmods_dirs/allactive/{defaultio,...} + +You can optionally add testmods for that test in the testmods_dirs. +Testlists and testmods live in different paths for cime, drv, and components. + +If this test will only be run as a single test, you can now create a test name +and follow the individual_ test instructions for create_test. + +===================================== +Test control with python dictionaries +===================================== +.. _`python dict testing`: + +One can also define suites of tests in a file called tests.py typically located in $MODEL/cime_config/tests.py + +To run a test suite called e3sm_developer:: + + ./create_test e3sm_developer + +One can exclude a specific test from a suite:: + + ./create_test e3sm_developer ^SMS.f19_f19.A + +See create_test -h for the full list of options +` + +To add a test, open the MODEL/cime_config/tests.py file, you'll see a python dict at the top +of the file called _TESTS, find the test category you want to +change in this dict and add your testcase to the list. Note the +comment at the top of this file indicating that you add a test with +this format: test>.., and then there is a second +argument for mods. Machine and compiler are added later depending on where +create_test is invoked and its arguments. + +Existing tests can be listed using the cime/CIME/Tools/list_e3sm_tests script. + +For example:: + + /list_e3sm_tests -t compsets e3sm_developer + +Will list all the compsets tested in the e3sm_developer test suite. + +============================ +Create_test output +============================ + +Interpreting test output is pretty easy. Looking at an example:: + + % ./create_test SMS.f19_f19.A + + Creating test directory /home/jgfouca/e3sm/scratch/SMS.f19_f19.A.melvin_gnu.20170504_163152_31aahy + RUNNING TESTS: + SMS.f19_f19.A.melvin_gnu + Starting CREATE_NEWCASE for test SMS.f19_f19.A.melvin_gnu with 1 procs + Finished CREATE_NEWCASE for test SMS.f19_f19.A.melvin_gnu in 4.170537 seconds (PASS) + Starting XML for test SMS.f19_f19.A.melvin_gnu with 1 procs + Finished XML for test SMS.f19_f19.A.melvin_gnu in 0.735993 seconds (PASS) + Starting SETUP for test SMS.f19_f19.A.melvin_gnu with 1 procs + Finished SETUP for test SMS.f19_f19.A.melvin_gnu in 11.544286 seconds (PASS) + Starting SHAREDLIB_BUILD for test SMS.f19_f19.A.melvin_gnu with 1 procs + Finished SHAREDLIB_BUILD for test SMS.f19_f19.A.melvin_gnu in 82.670667 seconds (PASS) + Starting MODEL_BUILD for test SMS.f19_f19.A.melvin_gnu with 4 procs + Finished MODEL_BUILD for test SMS.f19_f19.A.melvin_gnu in 18.613263 seconds (PASS) + Starting RUN for test SMS.f19_f19.A.melvin_gnu with 64 procs + Finished RUN for test SMS.f19_f19.A.melvin_gnu in 35.068546 seconds (PASS). [COMPLETED 1 of 1] + At test-scheduler close, state is: + PASS SMS.f19_f19.A.melvin_gnu RUN + Case dir: /home/jgfouca/e3sm/scratch/SMS.f19_f19.A.melvin_gnu.20170504_163152_31aahy + test-scheduler took 154.780044079 seconds + +You can see that `create_test <../Tools_user/create_test.html>`_ informs the user of the case directory and of the progress and duration +of the various test phases. + +The $CASEDIR for the test will be created in $CIME_OUTPUT_ROOT. The name will be of the form:: + + TESTTYPE[_MODIFIERS].GRID.COMPSET.MACHINE_COMPILER[.GROUP-TESTMODS].YYYYMMDD_HHMMSS_hash + +If MODIFIERS or GROUP-TESTMODS are used, those will be included in the test output directory name. THe +extra string with YYYYMMDD_HHMMSS_hash is the testid and used to distinquish mulitple runs of the +same test. That string +can be replaced with the --test-id argument to create_test. + +For a test, the $CASEDIR will have $EXEROOT and $RUNDIR as subdirectories. + +The current state of a test is represented in the file $CASEDIR/TestStatus. Example output:: + + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel CREATE_NEWCASE + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel XML + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel SETUP + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel SHAREDLIB_BUILD time=277 + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel MODEL_BUILD time=572 + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel SUBMIT + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel RUN time=208 + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel COMPARE_base_rest + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel MEMLEAK insufficient data for memleak test + PASS ERP_D_Ld3.ne4pg2_oQU480.F2010.chrysalis_intel SHORT_TERM_ARCHIVER + +All other stdout output from the CIME case control system produced by running this test will +be put in the file $CASEDIR/TestStatus.log + +A cs.status.$testid script will also be put in the test root. This script will allow you to see the + +============================== +Baselines and Baseline Testing +============================== +.. _`Baselines`: + +A big part of testing is managing your baselines (sometimes called gold results) and doing additional tests against +the baseline. The baseline for a test will be copy of the (history) files created in the run of the test. + +create_test can +be asked to perform bit-for-bit comparisons between the files generated by the current run of the test and +the files stored in the baseline. They must be bit-for-bit identical for the baseline test to pass. + +baseline testing adds an additional +test criteria to the one that comes from the test type and is used as a way to guard against unintentionaly +changing the results from a determinstic climate model. + +------------------- +Creating a baseline +------------------- +.. _`Creating a baseline`: + +A baseline can be generated by passing ``-g`` to `create_test <../Tools_user/create_test.html>`_. There +are additional options to control generating baselines.:: + + ./scripts/create_test -b master -g SMS.ne30_f19_g16_rx1.A + +-------------------- +Comparing a baseline +-------------------- +.. _`Comparing a baseline`: + +Comparing the output of a test to a baseline is achieved by passing ``-c`` to `create_test <../Tools_user/create_test.html>`_.:: + + ./scripts/create_test -b master -c SMS.ne30_f19_g16_rx1.A + +Suppose you accidentally changed something in the source code that does not cause the model to crash but +does cause it to change the answers it produces. In this case, the SMS test would pass (it still runs) but the +comparison with baselines would FAIL (answers are not bit-for-bit identical to the baseline) and so the test +as a whole would FAIL. + +------------------ +Managing baselines +------------------ +.. _`Managing baselines`: + +If you intended to change the answers, you need to update the baseline with new files. This is referred to +as "blessing" the test. +This is done with the `bless_test_results <../Tools_user/bless_test_results.html>`_ tool. The tool provides the ability to bless different features of the baseline. The currently supported features are namelist files, history files, and performance metrics. The performance metrics are separated into throughput and memory usage. + +The following command can be used to compare a test to a baseline and bless an update to the history file.:: + + ./CIME/Tools/bless_test_results -b master --hist-only SMS.ne30_f19_g16_rx1.A + +The `compare_test_results <../Tools_user/compare_test_results.html>_` tool can be used to quickly compare tests to baselines and report any `diffs`.:: + + ./CIME/Tools/compare_test_results -b master SMS.ne30_f19_g16_rx1.A + +--------------------- +Performance baselines +--------------------- +.. _`Performance baselines`: +By default performance baselines are generated by parsing the coupler log and comparing the throughput in SYPD (Simulated Years Per Day) and the memory usage high water. + +This can be customized by creating a python module under ``$DRIVER_ROOT/cime_config/customize``. There are four hooks that can be used to customize the generation and comparison. + +- perf_get_throughput +- perf_get_memory +- perf_compare_throughput_baseline +- perf_compare_memory_baseline + +.. + TODO need to add api docs and link +The following pseudo code is an example of this customization.:: + + # $DRIVER/cime_config/customize/perf_baseline.py + + def perf_get_throughput(case): + """ + Parameters + ---------- + case : CIME.case.case.Case + Current case object. + + Returns + ------- + str + Storing throughput value. + str + Open baseline file for writing. + """ + current = analyze_throughput(...) + + return json.dumps(current), "w" + + def perf_get_memory(case): + """ + Parameters + ---------- + case : CIME.case.case.Case + Current case object. + + Returns + ------- + str + Storing memory value. + str + Open baseline file for writing. + """ + current = analyze_memory(case) + + return json.dumps(current), "w" + + def perf_compare_throughput_baseline(case, baseline, tolerance): + """ + Parameters + ---------- + case : CIME.case.case.Case + Current case object. + baseline : str + Baseline throughput value. + tolerance : float + Allowed difference tolerance. + + Returns + ------- + bool + Whether throughput diff is below tolerance. + str + Comments about the results. + """ + current = analyze_throughput(case) + + baseline = json.loads(baseline) + + diff, comments = generate_diff(...) + + return diff, comments + + def perf_compare_memory_baseline(case, baseline, tolerance): + """ + Parameters + ---------- + case : CIME.case.case.Case + Current case object. + baseline : str + Baseline memory value. + tolerance : float + Allowed difference tolerance. + + Returns + ------- + bool + Whether memory diff is below tolerance. + str + Comments about the results. + """ + current = analyze_memory(case) + + baseline = json.loads(baseline) + + diff, comments = generate_diff(...) + + return diff, comments diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/timers.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/timers.rst.txt new file mode 100644 index 00000000000..3614d4f4c87 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/timers.rst.txt @@ -0,0 +1,180 @@ +.. _timers: + +=================== +Timers and timing +=================== + +CIME includes a copy of the General Purpose Timing Library (GPTL) and timers are placed throughout the CIME driver. CIME-driven models typically +also have GPTL timers in their code and very detailed timing information can be obtained. + +.. _model-timing-data: + +Model timing data +------------------ + +Every model run produces three types of timing output that you can examine: + +1. **$CASEROOT/timing/$model_timing.$CASE.$datestamp** + + This is the most useful way to quickly determine timing summaries across components + The following describes the most important parts of this timing file: + + An example timing file of this type is: + + :: + + ---------------- TIMING PROFILE --------------------- + Case : b.e20.BHIST.f09_g17.20thC.297_02 + LID : 9459679.chadmin1.180517-114852 + Machine : cheyenne + Caseroot : /glade/p/cesmdata/cseg/runs/cesm2_0/b.e20.BHIST.f09_g17.20thC.297_02 + Timeroot : /glade/p/cesmdata/cseg/runs/cesm2_0/b.e20.BHIST.f09_g17.20thC.297_02/Tools + User : hannay + Curr Date : Thu May 17 12:42:27 2018 + grid : a%0.9x1.25_l%0.9x1.25_oi%gx1v7_r%r05_g%gland4_w%ww3a_m%gx1v7 + compset : HIST_CAM60_CLM50%BGC-CROP_CICE_POP2%ECO_MOSART_CISM2%NOEVOLVE_WW3_BGC%BDRD + run_type : hybrid, continue_run = FALSE (inittype = TRUE) + stop_option : nyears, stop_n = 1 + run_length : 365 days (364.958333333 for ocean) + + component comp_pes root_pe tasks x threads instances (stride) + --------- ------ ------- ------ ------ --------- ------ + cpl = cpl 3456 0 1152 x 3 1 (1 ) + atm = cam 3456 0 1152 x 3 1 (1 ) + lnd = clm 2592 0 864 x 3 1 (1 ) + ice = cice 864 864 288 x 3 1 (1 ) + ocn = pop 768 1152 256 x 3 1 (1 ) + rof = mosart 2592 0 864 x 3 1 (1 ) + glc = cism 3456 0 1152 x 3 1 (1 ) + wav = ww 96 1408 32 x 3 1 (1 ) + esp = sesp 1 0 1 x 1 1 (1 ) + + total pes active : 12960 + mpi tasks per node : 36 + pe count for cost estimate : 4320 + + Overall Metrics: + Model Cost: 3541.30 pe-hrs/simulated_year + Model Throughput: 29.28 simulated_years/day + + Init Time : 242.045 seconds + Run Time : 2951.082 seconds 8.085 seconds/day + Final Time : 0.008 seconds + + Actual Ocn Init Wait Time : 768.737 seconds + Estimated Ocn Init Run Time : 0.248 seconds + Estimated Run Time Correction : 0.000 seconds + (This correction has been applied to the ocean and total run times) + + Runs Time in total seconds, seconds/model-day, and model-years/wall-day + CPL Run Time represents time in CPL pes alone, not including time associated with data exchange with other components + + TOT Run Time: 2951.082 seconds 8.085 seconds/mday 29.28 myears/wday + CPL Run Time: 248.696 seconds 0.681 seconds/mday 347.41 myears/wday + ATM Run Time: 2097.788 seconds 5.747 seconds/mday 41.19 myears/wday + LND Run Time: 545.991 seconds 1.496 seconds/mday 158.24 myears/wday + ICE Run Time: 389.173 seconds 1.066 seconds/mday 222.01 myears/wday + OCN Run Time: 2169.399 seconds 5.944 seconds/mday 39.83 myears/wday + ROF Run Time: 42.241 seconds 0.116 seconds/mday 2045.41 myears/wday + GLC Run Time: 1.049 seconds 0.003 seconds/mday 82364.16 myears/wday + WAV Run Time: 517.414 seconds 1.418 seconds/mday 166.98 myears/wday + ESP Run Time: 0.000 seconds 0.000 seconds/mday 0.00 myears/wday + CPL COMM Time: 2464.660 seconds 6.752 seconds/mday 35.06 myears/wday + + ---------------- DRIVER TIMING FLOWCHART --------------------- + ............. + + + TIMING PROFILE is the first section in the timing output. It + summarizes general timing information for the run. The total run + time and cost are given in several metrics to facilitate analysis + and comparisons with other runs. These metrics includ pe-hrs per + simulated year (cost), simulated years per wall day (thoughput), + seconds, and seconds per model day. The total run time for each + component and the time for initialization of the model also are + provided. These times are the aggregate over the total run and do + not take into account any temporal or processor load imbalances. + + DRIVER TIMING FLOWCHART is the second section in the timing + output. It provides timing information for the driver in + sequential order and indicates which processors are involved in + the cost. Finally, the timings for the coupler are broken out at + the bottom of the timing output file. + + +2. **$CASEROOT/timing/$model_timing_stats.$date** + + Provides an overall detailed timing summary for each component, including the minimum and maximum of all the model timers. + +3. **cpl.log.$datestamp** + + Contains the run time for each model day during the run and is + output during the run. You can search for ``tStamp`` in the cpl.log + file to see the information, which is useful for tracking down + temporal variability in cost due to inherent model variability or + to hardware. The model daily cost generally is pretty constant + unless I/O is written intermittently, such as at the end of the + month. This file will appear either in **$RUNDIR** or in + **DOUT_S_ROOT/logs** for your run. + +The xml variable ``CHECK_TIMING``, if set to ``TRUE`` (the default) will produce the timing files in the **$CASEROOT/timing** directory. + + +Controlling timers +------------------ + +User customization of timers is done via the xml variables ``TIMER_LEVEL`` and ``TIMER_DETAIL``. + +* ``TIMER_LEVEL``: + + This is the maximum code stack depth of enabled timers. + +* ``TIMER_DETAIL``: + + This is an integer indicating maximum detail level to profile. This + xml variable is used to set the namelist variable timing_detail_limit. + This namelist variable is used by perf_mod (in + $CIMEROOT/src/share/timing/perf_mod.F90) to turn timers off and on + depending on calls to the routine t_adj_detailf. If in the code a + statement appears like t_adj_detailf(+1), then the current timer + detail level is incremented by 1 and compared to the time_detail_limit + obtained from the namelist. If the limit is exceeded then the timer + is turned off. + +Further control of timers is then done via modifications of the **prof_inparm namelists** in the file **drv_in**. This is done +via keyword-value settings in user_nl_cpl. As an example, if you want to set the namelist variable ``profile_barriers`` to ``.true.``, +add the following line in your **$CASEROOT/user_nl_cpl**: + +:: + + profile_barriers = .true. + + +Advice on setting your wallclock time +------------------------------------- + +When you look at the **$model_timing.$CASE.$datestamp** file for "Model Throughput", you will find output like this: + :: + + Overall Metrics: + Model Cost: 327.14 pe-hrs/simulated_year (scale= 0.50) + Model Throughput: 4.70 simulated_years/day + +The model throughput is the estimated number of model years that you +can run in a wallclock day. Based on this, you can maximize your queue +limit and change ``$STOP_OPTION`` and ``$STOP_N``. + +For example, say a model's throughput is 4.7 simulated_years/day, and +the maximum runtime limit on your machine is 12 hours. 4.7 model +years/24 hours * 12 hours = 2.35 years. On the massively parallel +computers, there is always some variability in how long it will take +a job to run. On some machines, you may need to leave as much as 20% +buffer time in your run to guarantee that jobs finish reliably before +the time limit. For that reason, set your model to run only one model +year/job. In this example, set your wallclock at 12 hours and invoke +`xmlchange <../Tools_user/xmlchange.html>`_ in ``CASEROOT`` as shown here: :: + + >./xmlchange STOP_OPTION=nyears + >./xmlchange STOP_N=1 + >./xmlchange REST_OPTION=nyears + >./xmlchange REST_N=1 diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/troubleshooting.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/troubleshooting.rst.txt new file mode 100644 index 00000000000..77ef823d9c0 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/troubleshooting.rst.txt @@ -0,0 +1,126 @@ +.. _troubleshooting: + +Troubleshooting +=============== + +Troubleshooting case creation +----------------------------- + +Generally, `create_newcase <../Tools_user/create_newcase.html>`_ errors are reported to the terminal and should provide some guidance about what caused them. + +If `create_newcase <../Tools_user/create_newcase.html>`_ fails on a relatively generic error, first check to make sure the command-line arguments match the interface's specification. See the help text to review usage. +:: + + > create_newcase --help + +Troubleshooting problems in cime scripts +---------------------------------------- + +If any of the python-based cime scripts are dying in a mysterious way, more information can be obtained by rerunning the script with the ``--debug`` option. + +Troubleshooting job submission +------------------------------- + +Most problems associated with submission or launch are site-specific. +The batch and run aspects of the `case.submit <../Tools_user/case.submit.html>`_ script are created by parsing the variables in **$CASEROOT/env_batch.xml** file. + +Take these steps to check for problems: + +1. Review the batch submission options in **$CASEROOT/env_batch.xml**. Confirm that they are consistent with the site-specific batch environment, and that the queue names, time limits, and hardware processor request make sense and are consistent with the case. + +2. Make sure that `case.submit <../Tools_user/case.submit.html>`_ uses the correct batch job tool for submitting the `case.submit <../Tools_user/case.submit.html>`_ script. Depending on the batch environment, it might be **bsub**, **qsub** or another command. Also confirm if a redirection "<" character is required. The information for how **case.submit** submits jobs appears at the end of the standard output stream. + +Troubleshooting runtime problems +--------------------------------- + +To see if a run completed successfully, check the last several lines of the **cpl.log** file for a string like ``SUCCESSFUL TERMINATION``. A successful job also usually copies the log files to the **$CASEROOT/logs** directory. + +Check these things first when a job fails: + +- Did the model time out? + +- Was a disk quota limit hit? + +- Did a machine go down? + +- Did a file system become full? + +If any of those things happened, take appropriate corrective action (see suggestions below) and resubmit the job. + +If it is not clear that any of the above caused a case to fail, there are several places to look for error messages. + +- Check component log files in your run directory (``$RUNDIR``). + This directory is set in the **env_run.xml** file. + Each component writes its own log file, and there should be log files for every component in this format: **cpl.log.yymmdd-hhmmss**. + Check each log file for an error message, especially at or near the end. + +- Check for a standard out and/or standard error file in ``$CASEROOT``. + The standard out/err file often captures a significant amount of extra model output and also often contains significant system output when a job terminates. + Useful error messages sometimes are found well above the bottom of a large standard out/err file. Backtrack from the bottom in search of an error message. + +- Check for core files in your run directory and review them using an appropriate tool. + +- Check any automated email from the job about why a job failed. Some sites' batch schedulers send these. + +- Check the archive directory: **$DOUT_S_ROOT/$CASE**. If a case failed, the log files + or data may still have been archived. + +**Common errors** + +One common error is for a job to time out, which often produces minimal error messages. +Review the daily model date stamps in the **cpl.log** file and the timestamps of files in your run directory to deduce the start and stop time of a run. +If the model was running fine, but the wallclock limit was reached, either reduce the run length or increase the wallclock setting. + +If the model hangs and then times out, that usually indicates an MPI or file system problem or possibly a model problem. If you suspect an intermittent system problem, try resubmitting the job. Also send a help request to local site consultants to provide them with feedback about system problems and to get help. + +Another error that can cause a timeout is a slow or intermittently slow node. +The **cpl.log** file normally outputs the time used for every model simulation day. To review that data, grep the **cpl.log** file for the string ``tStamp`` as shown here: +:: + + > grep tStamp cpl.log.* | more + +The output looks like this: +:: + + tStamp_write: model date = 10120 0 wall clock = 2009-09-28 09:10:46 avg dt = 58.58 dt = 58.18 + tStamp_write: model date = 10121 0 wall clock = 2009-09-28 09:12:32 avg dt = 60.10 dt = 105.90 + + +Review the run times at the end of each line for each model day. +The "avg dt =" is the average time to simulate a model day and "dt = " is the time needed to simulate the latest model day. + +The model date is printed in YYYYMMDD format and the wallclock is the local date and time. +In the example, 10120 is Jan 20, 0001, and the model took 58 seconds to run that day. +The next day, Jan 21, took 105.90 seconds. + +A wide variation in the simulation time for typical mid-month model days suggests a system problem. However, there are variations in the cost of the model over time. +For instance, on the last day of every simulated month, the model typically writes netcdf files, which can be a significant intermittent cost. +Also, some model configurations read data mid-month or run physics intermittently at a timestep longer than one day. +In those cases, some variability is expected. The time variation typically is quite erratic and unpredictable if the problem is system performance variability. + +Sometimes when a job times out or overflows disk space, the restart files will get mangled. +With the exception of the CAM and CLM history files, all the restart files have consistent sizes. + +Compare the restart files against the sizes of a previous restart. If they don't match, remove them and move the previous restart into place before resubmitting the job. +See `Restarting a run `_. + +It is not uncommon for nodes to fail on HPC systems or for access to large file systems to hang. Before you file a bug report, make sure a case fails consistently in the same place. + +**Rerunning with additional debugging information** + +There are a few changes you can make to your case to get additional information that aids in debugging: + +- Increase the value of the run-time xml variable ``INFO_DBUG``: ``./xmlchange INFO_DBUG=2``. + This adds more information to the cpl.log file that can be useful if you can't tell what component is aborting the run, or where bad coupling fields are originating. + (This does NOT require rebuilding.) + +- Try rebuilding and rerunning with the build-time xml variable ``DEBUG`` set to ``TRUE``: ``./xmlchange DEBUG=TRUE``. + + - This adds various runtime checks that trap conditions such as out-of-bounds array indexing, divide by 0, and other floating point exceptions (the exact conditions checked depend on flags set in macros defined in the cmake_macros subdirectory of the caseroot). + + - The best way to do this is often to create a new case and run ``./xmlchange DEBUG=TRUE`` before running ``./case.build``. + However, if it is hard for you to recreate your case, then you can run that xmlchange command from your existing case; then you must run ``./case.build --clean-all`` before rerunning ``./case.build``. + + - Note that the model will run significantly slower in this mode, so this may not be feasible if the model has to run a long time before producing the error. + (Sometimes it works well to run the model until shortly before the error in non-debug mode, have it write restart files, then restart after rebuilding in debug mode.) + Also note that answers will change slightly, so if the error arises from a rare condition, then it may not show up in this mode. diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/unit_testing.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/unit_testing.rst.txt new file mode 100644 index 00000000000..af8025a6f44 --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/unit_testing.rst.txt @@ -0,0 +1,421 @@ +.. _unit-testing: + +Fortran Unit Testing +==================== + +Introduction +------------ + +What is a unit test? +~~~~~~~~~~~~~~~~~~~~ + +A unit test is a fast, self-verifying test of a small piece of code. +A single unit test typically covers 10s to 100s of lines of code; a single function or small module, for example. +It typically runs in milliseconds and produces a simple pass/fail result. + +Unit tests: + +* Ensure that code remains correct as it is modified. In this respect, unit tests complement the CIME system tests. + +* Ensure that new code is correct. + +* Can help guide development, via test-driven development (TDD). + +* Provide executable documentation of the intended behavior of a piece of code. + +* Support development on your desktop machine. + +Overview of unit test support in CIME +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +CIME comes with a set of tools to support building and running unit tests. +These consist of: + +#. CMake tools to support building and running tests via CMake and CTest. + +#. A Python script that provides a simple front end for the CMake-based tests. + +The Fortran unit tests use `pFUnit `_, which is a Fortran testing framework that follows conventions of other xUnit frameworks. CIME's support for pFUnit requires pFUnit version 4 or greater. + +.. _running_unit_tests: + +Running CIME's Fortran unit tests +--------------------------------- + +These instructions assume that you are using a machine that already has pFUnit installed, along with the necessary support in CIME. +If that is not the case, see :ref:`adding_machine_support`. + +From the top-level CIME directory, you can run all of CIME's Fortran unit tests by running: + +.. code-block:: shell + + > scripts/fortran_unit_testing/run_tests.py --build-dir MY_BUILD_DIR + +You can replace ``MY_BUILD_DIR`` with a path to the directory where you would like the unit test build files to be placed. +To ensure a completely clean build, use: + +.. code-block:: shell + + > scripts/fortran_unit_testing/run_tests.py --build-dir `mktemp -d ./unit_tests.XXXXXXXX` + +Once you have built the unit tests (whether the build was successful or not), you can reuse the same build directory later to speed up the rebuild. +There are a number of useful arguments to **run_tests.py**. For full usage information, run: + +.. code-block:: shell + + > scripts/fortran_unit_testing/run_tests.py --help + +If your build is successful, you will get a message like this: + +.. code-block:: none + + ================================================== + Running CTest tests for __command_line_test__/__command_line_test__. + ================================================== + +This will be followed by a list of tests, with a Pass/Fail message for each, like these examples: + +.. code-block:: none + + Test project /Users/sacks/cime/unit_tests.0XHUkfqL/__command_line_test__/__command_line_test__ + Start 1: avect_wrapper + 1/17 Test #1: avect_wrapper .................... Passed 0.02 sec + Start 2: seq_map + 2/17 Test #2: seq_map .......................... Passed 0.01 sec + Start 3: glc_elevclass + 3/17 Test #3: glc_elevclass .................... Passed 0.01 sec + +You will also see a final message like this: + +.. code-block:: none + + 100% tests passed, 0 tests failed out of 17 + +These unit tests are run automatically as part of **scripts_regression_tests** on machines that have a serial build of pFUnit available for the default compiler. + +.. _adding_machine_support: + +How to add unit testing support on your machine +----------------------------------------------- + +The following instructions assume that you have ported CIME to your +machine by following the instructions in +:doc:`/users_guide/porting-cime`. If you have done that, you can add +unit testing support by building pFUnit on your machine and then +pointing to the build in your ** *MACH*_*COMPILER*.cmake** file. Those +processes are described in the following sections. + +Building pFUnit +~~~~~~~~~~~~~~~ + +Follow the instructions below to build pFUnit using the default compiler on your machine. +That is the default for **run_tests.py** and that is required for **scripts_regression_tests.py** to run the unit tests on your machine. +For the CMake step, we typically build with ``-DSKIP_MPI=YES``, ``-DSKIP_OPENMP=YES`` and ``-DCMAKE_INSTALL_PREFIX`` set to the directory where you want pFUnit to be installed. +(At this time, no unit tests require parallel support, so we build without MPI support to keep things simple.) +Optionally, you can also provide pFUnit builds with other supported compilers on your machine. + +#. Obtain pFUnit from https://github.com/Goddard-Fortran-Ecosystem/pFUnit (see + https://github.com/Goddard-Fortran-Ecosystem/pFUnit#obtaining-pfunit for details) + +#. Create a directory for the build and cd to that directory: + + .. code-block:: shell + + > mkdir build-dir + > cd build-dir + +#. Set up your environment to be similar to the environment used in CIME system builds. + For example, load the appropriate compilers into your path. + An easy way to achieve this is to run the following with an optional compiler argument: + + .. code-block:: shell + + > $CIMEROOT/CIME/scripts/configure --mpilib mpi-serial + + Then source either **./.env_mach_specific.sh** or **./.env_mach_specific.csh**, depending on your shell. + + On some systems, you may need to explicitly set the ``FC`` and ``CC`` environment + variables so that pFUnit's CMake build picks up the correct compilers, e.g., with: + + .. code-block:: shell + + > export FC=ifort + > export CC=icc + +#. For convenience, set the ``PFUNIT`` environment variable to point to the location where you want to install pFUnit. For example (in bash): + + .. code-block:: shell + + > export PFUNIT=$CESMDATAROOT/tools/pFUnit/pFUnit4.7.0_cheyenne_Intel19.1.1_noMPI_noOpenMP + +#. Configure and build pFUnit: + + .. code-block:: shell + + > cmake -DSKIP_MPI=YES -DSKIP_OPENMP=YES -DCMAKE_INSTALL_PREFIX=$PFUNIT .. + > make -j 8 + +#. Run pFUnit's self-tests: + + .. code-block:: shell + + > make tests + +#. Install pFUnit in the directory you specified earlier: + + .. code-block:: shell + + > make install + +You can repeat this process with different compiler environments. +Make sure to choose a different installation directory for each build by setting the ``PFUNIT`` variable differently. + +Adding to the appropriate cmake file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +After you build pFUnit, tell CIME about your build or builds. +To do this, specify the appropriate path using the ``PFUNIT_PATH`` CMake variable in the ** *MACH*_*COMPILER*.cmake** file. +For a build with no MPI or openMP support (as recommended above), the block should look like this (with the actual path replaced with the PFUNIT path you specified when doing the build): + + .. code-block:: cmake + + if (MPILIB STREQUAL mpi-serial AND NOT compile_threaded) + set(PFUNIT_PATH "$ENV{CESMDATAROOT}/tools/pFUnit/pFUnit4.7.0_cheyenne_Intel19.1.1_noMPI_noOpenMP") + endif() + +Once you have specified the path for your build(s), you should be able to run the unit tests by following the instructions in :ref:`running_unit_tests`. + +How to write a new unit test +---------------------------- + +.. todo:: Need to write this section. This will draw on some of the information in sections 3 and 4 of https://github.com/NCAR/cesm_unit_test_tutorial (though without the clm and cam stuff). + +It should also introduce the role of .pf files, which are referenced several paragraphs later as if already explained. + +General guidelines for writing unit tests +----------------------------------------- + +Unit tests typically test a small piece of code, on the order of 10-100 lines, as in a single function or small class. + +Good unit tests are **"FIRST"**: +(https://pragprog.com/magazines/2012-01/unit-tests-are-first): + +* **Fast** (milliseconds or less). This means that, generally, they should not do any file i/o. Also, if you are testing a complex function, test it with a simple set of inputs rather than a 10,000-element array that will require a few seconds of runtime to process. + +* **Independent**. This means that test Y shouldn't depend on some global variable that text X created. Such dependencies cause problems if the tests run in a different order, if one test is dropped, and so on. + +* **Repeatable**. This means, for example, that you shouldn't generate random numbers in your tests. + +* **Self-verifying**. Don't write a test that writes out its answers for manual comparison. Tests should generate an automatic pass/fail result. + +* **Timely**. Write the tests *before* the production code (TDD) or immediately afterwards - not six months later when it's time to finally merge your changes onto the trunk and you have forgotten the details. Much of the benefit of unit tests comes from developing them concurrently with the production code. + +Good unit tests test a single, well-defined condition. This generally means that +you make a single call to the function or subroutine that you're testing, with a +single set of inputs. Usually you need to run multiple tests in order to test +all of the unit's possible behaviors. + +Testing a single condition in each test makes pinpointing problems easier when a test fails. +This also makes it easier to read and understand the tests, allowing them to serve as useful +documentation of how the code should operate. + +A good unit test has four distinct pieces: + +#. **Setup**: For example, creating variables that will be needed for the routine you're testing. For simple tests, this piece may be empty. + +#. **Exercise**: Calling the routine you're testing. + +#. **Verify**: Calling assertion methods (next section) to ensure that the results match what you expected. + +#. **Teardown**: For example, deallocating variables. For simple tests, this piece may be empty. If it is needed, however, it is best done in the special tearDown routine discussed in `Defining a test class in order to define setUp and tearDown methods`_ and `More on test teardown`_.** + +If you have many tests of the same subroutine, you may find quite a +lot of duplication. It's good practice to extract major areas of duplication to their own +subroutines in the **.pf** file, which your tests can call. This aids the understandability +and maintainability of your tests. pFUnit knows which subroutines are tests and which are +"helper" routines because of the ``@Test`` directives: You only add a ``@Test`` directive +for your tests, not for your helper routines. + +More details on writing pFUnit-based unit tests +----------------------------------------------- + +Assertion methods +~~~~~~~~~~~~~~~~~ + +pFUnit provides many assertion methods that you can use in the Verify step. +Here are some of the most useful: + +================================================= =================================================================== + +``@assertEqual(expected, actual)`` Ensures that expected == actual. + Accepts an optional ``tolerance`` argument giving the tolerance for + real-valued comparisons. + +``@assertLessThan(expected, actual)`` Ensures that expected < actual. + +``@assertGreaterThan(expected, actual)`` Ensures that expected > actual. + +``@assertLessThanOrEqual(expected, actual)`` + +``@assertGreaterThanOrEqual(expected, actual)`` + +``@assertTrue(condition)`` It is better to use the two-valued assertions above, if possible. + They provide more information if a test fails. + +``@assertFalse(condition)`` + +``@assertIsFinite(value)`` Ensures that the result is not NaN or infinity. + +``@assertIsNan(value)`` This can be useful for failure checking - for example, when your + function returns NaN to signal an error. + +================================================= =================================================================== + +Comparison assertions accept an optional ``tolerance`` argument, which gives the +tolerance for real-valued comparisons. + +All of the assertion methods also accept an optional ``message`` argument, which prints +a string if the assertion fails. If no message is provided, you will be pointed to the +file and line number of the failed assertion. + +Defining a test class in order to define setUp and tearDown methods +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +As noted in the comments in **test_circle.pf**, defining a test class is optional. +However, defining a minimal test class as shown here with ``TestCircle`` allows you +use some pFUnit features such as the setUp and tearDown methods. + +.. code-block:: none + + @TestCase + type, extends(TestCase) :: TestCircle + contains + procedure :: setUp + procedure :: tearDown + end type TestCircle + +If you define this test class, you also need to: + +* Define *setUp* and *tearDown* subroutines. These can start out empty: + + .. code-block:: Fortran + + subroutine setUp(this) + class(TestCircle), intent(inout) :: this + end subroutine setUp + + subroutine tearDown(this) + class(TestCircle), intent(inout) :: this + end subroutine tearDown + +* Add an argument to each subroutine of the class. By convention, this argument is named ``this``. + +Code in the setUp method is executed before each test. This is convenient +if you need to do some setup that is the same for every test. + +Code in the tearDown method is executed after each test. This is often used +to deallocate memory. See `More on test teardown`_ for details. + +You can add any data or procedures to the test class. Adding data is +particularly useful, as this can be a way for the setUp and tearDown methods to +interact with your tests: The setUp method can fill a class variable with data, +which your tests can then use (accessed via ``this%somedata``). Conversely, if +you want the tearDown method to deallocate a variable, the variable cannot be local +to your test subroutine. Instead, you make the variable a member of the class, so +that the tearDown method can access it. + +Here is an example. Say you have this variable in your test class: + +.. code-block:: Fortran + + real(r8), pointer :: somedata(:) + +The setUp method can create ``somedata`` if it needs to be the same +for every test. + +Alternatively, it can be created in each test routine that needs it if it +differs from test to test. (Some tests don't need it at all.) In that situation, +create it like this: + +.. code-block:: Fortran + + allocate(this%somedata(5)) + this%somedata(:) = [1,2,3,4,5] + +Your tearDown method then can have code like this: + +.. code-block:: Fortran + + if (associated(this%somedata)) then + deallocate(this%somedata) + end if + +More on test teardown +~~~~~~~~~~~~~~~~~~~~~ + +As stated in `Defining a test class in order to define setUp and tearDown methods`_, +code in the tearDown method is executed after each test, often to do cleanup operations. + +Using the tearDown method is recommended because tests abort if an assertion fails. +The tearDown method is still called, however, so teardown that needs to be done +still gets done, regardless of pass/fail status. Teardown code might otherwise be +skipped, which can lead other tests to fail or give unexpected results. + +All of the tests in a single test executable run one after another. For CIME, this +means all of the tests that are defined in all **.pf** files in a single test directory. + +As a result, tests can interact with each other if you don't clean up after yourself. +In the best case, you might get a memory leak. In the worst case, the pass/fail status of tests +depends on which other tests have run previously, making your unit tests unrepeatable +and unreliable. + +**To avoid this:** + +* Deallocate any pointers that your test allocates. +* Reset any global variables to some known, initial state. +* Do other, similar cleanup for resources that are shared by multiple tests. + +In Fortran2003, allocatable variables are deallocated automatically when they go +out of scope, but pointers are not. Explicitly deallocate any pointers that have +been allocated, either in test setup or in the execution of the routine +you are testing. + +You might need to move some variables from subroutine-local to the class. This is +because the tearDown method can access class instance variables, but not subroutine-local +variables. + +CIME makes extensive use of global variables that may be used directly or +indirectly by a routine you are testing. If your test has allocated or modified +any global variables, it is important to reset them to their initial state in the +teardown portion of the test. + +Finding more documentation and examples +--------------------------------------- + +More detailed examples in CIME +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are many examples of unit tests in CIME, some simple and some quite complex. +You can find them by looking for files with the ".pf" extension: + +.. code-block:: shell + + > find . --name '*.pf' + +You can also see examples of the unit test build scripts by viewing the +**CMakeLists.txt** files throughout the source tree. + +Other pFUnit documentation sources +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Unfortunately, the documentation inside the pFUnit repository (in the documentation and Examples directories) is out-of-date (at least as of April, 2023): much of this documentation refers to version 3 of pFUnit, which differs in some ways from version 4. However, some working examples are provided in https://github.com/Goddard-Fortran-Ecosystem/pFUnit_demos. + +Documentation of the unit test build system +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The CMake build infrastructure is in **$CIMEROOT/CIME/non_py/src/CMake**. + +The infrastructure for building and running tests with **run_tests.py** is in +**$CIMEROOT/scripts/fortran_unit_testing**. That directory also contains general +documentation about how to use the CIME unit test infrastructure (in the +**README** file) and examples (in the **Examples** directory). diff --git a/branch/rljacob/docs/update-testing/html/_sources/users_guide/workflows.rst.txt b/branch/rljacob/docs/update-testing/html/_sources/users_guide/workflows.rst.txt new file mode 100644 index 00000000000..c23af1fc4af --- /dev/null +++ b/branch/rljacob/docs/update-testing/html/_sources/users_guide/workflows.rst.txt @@ -0,0 +1,101 @@ +.. _workflows: + +********* +Workflows +********* + +Currently, there are three kinds of workflow controls available in CIME. + +1. Multiple jobs workflow + + The file, **$CIMEROOT/config/$model/machines/config_batch.xml**, contains a section called ```` which defines the submit script templates and the pre-requisites for running them. + As an example, in cesm, the default ```` section is the following, with an explanation give by the NOTES additions. + + :: + + + + + + $BUILD_COMPLETE and not $TEST + + + + $BUILD_COMPLETE and $TEST + + + + 1 + 0:20:00 + + case.run or case.test + $DOUT_S + + + + The elements that can be contained in the ```` section are: + + * : the name of the batch job. + + Batch jobs can contain one or more jobs, and each job has the following elements: + + *