11. Workflows¶
Currently, there are three kinds of workflow controls available in CIME.
Multiple jobs workflow
The file, $CIMEROOT/config/$model/machines/config_batch.xml, contains a section called
<batch_jobs>
which defines the submit script templates and the pre-requisites for running them. As an example, in cesm, the default<batch_jobs>
section is the following, with an explanation give by the NOTES additions.<batch_jobs> <!-- order matters, with no-batch jobs will be run in the order listed here --> <job name="case.run"> <template>template.case.run</template> <prereq>$BUILD_COMPLETE and not $TEST</prereq> </job> <job name="case.test"> <template>template.case.test</template> <prereq>$BUILD_COMPLETE and $TEST</prereq> </job> <job name="case.st_archive"> <template>template.st_archive</template> <task_count>1</task_count> <walltime>0:20:00</walltime> <!-- If DOUT_S is true and case.run (or case.test) exits successfully then run st_archive--> <dependency>case.run or case.test</dependency> <prereq>$DOUT_S</prereq> </job> </batch_jobs>
The elements that can be contained in the
<batch_jobs>
section are:<job name=”NAME”> : the name of the batch job.
Batch jobs can contain one or more jobs, and each job has the following elements:
<template> : required, the associated template that is used to create the job.
<prepreq> : required, the pre-requiste settings of xml variables that determine whether the job will be run.
<task_count> : optional, the number of tasks the job should use.
<walltime> : optional, the maximum walltime the job should require.
<dependency> : optional, the previous job expected to complete before this job can start.
In the above the scripts for each
<job>
entry, i.e.case.run
,case.test
andcase.st_archive
are created from their respective templates the corresponding<template>
entry. The templates are located in the $CIMEROOT/config/$model/machines directory.Furthermore, in the above
case.run
will be run if the xml variablesBUILD_COMPLETE
is true andTEST
is false. On the other hand, ifBUILD_COMPLETE
is true andTEST
is true thencase.test
will be run. In addition, ifDOUT_S
is true, thencase.st_archive
will be run after eithercase.run
orcase.test
successfully completes. Also note thatcase.st_archive
is a separate job that only requests a single task.Users can extend the above workflow with their own custom needs.
Pre-run and post-run script
CIME provides the ability to execute user-defined scripts during the execution of
case.run
. These user-defined scripts can be invoked either before and/or after the model is run. The xml variables that controls this capability are:PRERUN_SCRIPT
: points to an external script to be run before model execution.POSTRUN_SCRIPT
: points to an external script to be run after successful model completion.
Note, that when these scripts are called, the full processor allocation for the job will be used - even if only 1 processor actually is invoked for the external script.
Data assimilation controls
CIME provides the ability to hook in a data assimilation utility via a set of xml variables:
DATA_ASSIMILATION_SCRIPT
: points to an external script to be run after model completion
DATA_ASSIMILATION_CYCLES
: integer that controls the number of data assimilation cycles. The run script will loop over these number of data assimilation cycles and for each cycle will run the model and subsequently run the data assimilation script.
DATA_ASSIMILATION
: if set to TRUE for a given component, then a resume signal will be sent to that component at initialization. If set, the component will execute special post data assimilation logic on initialization. See the component documentation for details. This flag is a bit subtle in that it is a per-component flag, not a model wide flag.To see what the component flags are call > ./xmlquery DATA_ASSIMILATION The output will look like > DATA_ASSIMILATION: ['CPL:FALSE', 'ATM:TRUE', 'LND:FALSE', 'ICE:FALSE', 'OCN:FALSE', 'ROF:FALSE', 'GLC:FALSE', 'WAV:FALSE'] To change the LND value to TRUE issue > ./xmlchange DATA_ASSIMILATION_LND=TRUE