Description
The rnr-refresh software needs to reproduce at least some of the base functionality of the UFS-RNR software to be able to launch a Cylc workflow (in v8, previously called a "suite" in Cylc v7). A minimum viable product (MVP) of the launch task to demonstrate how rnr-refresh will work constitutes being able to accomplish the launch task on at least 2 platforms: 1 HPC system (Hera), and 1 Parallel Works cloud (Azure). This issue is to capture the decision-making process of what we will include in the new launch task as we compare and work off of the UFS-RNR version.
Background
In UFS-RNR, the main python runscript is called with an experiment YAML input, and the launch task itself is accomplished across several files. The main runscript (via the run
function in the CylcRun
class) does the following:
- collects CLI args
- collects vars from YAML
- "builds" cylc suite
- launches cylc suite (via a call to the
launch_cylc
function, which in turn calls the run
function in cyclutil.cylc_interface.CylcLauncher
)
The cylcutil
Class is imported from ush
by the main runscript. The run
function in CylcLauncher
does the following:
- calls
register_suite
function, which
- adds to log and error files in specific directories
- sends a bash command via subprocess that calls the
cylc_app
class to register the cylc suite with the YAML object for the experiment, the suite path, and run dir
- calls the
run_suite
function, which
- adds to the same log and error files
- sends another bash command via subprocess that calls
cylc_app
again with the run command and the YAML experiment object
Those Cylc commands in turn initiate the Cylc suite(s) including the runtime suite (where the launch task is actually defined), which then:
- initiates a bash script for the job, which then
- runs a python script for the job, which then
- creates a launcher from
ufs_rnr.launcher.Launcher
function
- calls the run function for the
Launcher
The actual Launcher
Class run
function then calls other functions to:
- build directories for the experiment
- create a json file for other tasks to reference
- calls
run
function from the class UFSRNRCylcStatus
, which then does some more Singularity-related tasks (not including a full list here)
Relevant files in UFS-RNR
These links are stored here as a reference for mapping out the Launch task functionality present in UFS-RNR, and to help facilitate decisions about what to bring forward (and how).
Starting
The launch task is a core task that is used in all runs of UFS-RNR, thus the best path to follow is starting from a baseline experiment. The experiments are initiated by the runscript with a YAML path input. The configuration files and the runscript can be found in the cylc directory as follows:
Python cylcutil
Class
The cylcutil
class is imported by the main run script, which launches the cylc suite.
Cylc Suite Files
Several Cylc suites are relevant because there is a main suite for the experiment combined with other general runtime suites.
Environment Files
Environment files that are used in the bash job are platform-specific, even for the task itself.
Job Files
Python ufs_rnr
Class
Looking Forward
Basically, the question how much do we want to reproduce and/or bring forward?