Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP Switch to data time cycling to support multiple models and multiple case studies or trials #765

Open
wants to merge 90 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 89 commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
35b9dd1
Add multiple models to rose edit configuration
jfrost-mo Jul 29, 2024
c987f80
Add model name to rose edit conf
jfrost-mo Aug 9, 2024
302b1f8
Change how data is fetched to work on data time
jfrost-mo Aug 2, 2024
d8f3042
Modify data fetching in workflow to fetch per model
jfrost-mo Aug 5, 2024
2816af6
Change recipe format to just use steps, and update infra for running …
jfrost-mo Aug 6, 2024
7ec7031
Add cycling for trials
jfrost-mo Aug 9, 2024
18f8ae5
Thread model name through to output
jfrost-mo Aug 9, 2024
c0827cf
Remove unneeded recipes
jfrost-mo Aug 20, 2024
e3ad967
Replace dots with p in task names, to support floats
jfrost-mo Aug 20, 2024
f3f89a4
Convert domain_mean_time_series include file
jfrost-mo Aug 20, 2024
2fe51c8
Convert domain mean time series recipe
jfrost-mo Aug 20, 2024
4ec94c3
Only pass WEB_DIR to tasks that need it
jfrost-mo Aug 20, 2024
baa5400
Remove install_local_cset task from workflow
jfrost-mo Aug 20, 2024
c656815
Differentiate output directories for different case dates
jfrost-mo Aug 20, 2024
37e0b35
Remove duplicated include file
jfrost-mo Aug 20, 2024
8ae9b99
Convert more recipes and include files
jfrost-mo Aug 20, 2024
7b764f9
Convert recipe and include file
jfrost-mo Aug 20, 2024
a87ed7e
Convert more recipes
jfrost-mo Aug 20, 2024
39b9816
Split rose metadata into multiple files
jfrost-mo Aug 22, 2024
d216635
Convert pressure-level recipes
jfrost-mo Aug 22, 2024
3855fd7
Squeeze scalar coords, and explain LFRic callbacks
jfrost-mo Aug 22, 2024
9f7ad76
Convert more recipes and include files
jfrost-mo Aug 22, 2024
928390c
Ajust metadata sort and remove unhelpful help
jfrost-mo Aug 22, 2024
adea843
Move model level plots under quicklook
jfrost-mo Aug 22, 2024
6f440c3
Cast to string before sanitising cylc task names
jfrost-mo Aug 22, 2024
1e4c235
Rename parallel to steps in recipes
jfrost-mo Aug 22, 2024
1cc5866
Correct level coordinate read in recipe
jfrost-mo Aug 22, 2024
cc7d393
Return CubeList from scatter plot operator
jfrost-mo Aug 23, 2024
4d46c7d
Convert transect recipe
jfrost-mo Aug 23, 2024
6e16af2
Fix CLI tests
jfrost-mo Aug 23, 2024
41443f0
Fix common and operator runner tests
jfrost-mo Aug 23, 2024
553ab60
Fix run_cset_recipe tests
jfrost-mo Aug 23, 2024
3ec2c85
Cover error case in cset graph
jfrost-mo Aug 23, 2024
840ec57
Add some more tests
jfrost-mo Aug 23, 2024
d7c997b
Convert some references to parallel to steps
jfrost-mo Aug 23, 2024
1948f05
Make recipe validation tests more specific
jfrost-mo Aug 23, 2024
1c2328e
Remove old version of fetch_data
jfrost-mo Aug 23, 2024
76ba149
Add fetch_data tests
jfrost-mo Aug 23, 2024
f56e8d5
Reference UTC timezone as datetime.timezone.utc
jfrost-mo Aug 23, 2024
e8d8117
Add workaround for old python not supporting ISO 8601 datetimes
jfrost-mo Aug 23, 2024
4ed6841
Test a few corner cases of fetch_data
jfrost-mo Aug 23, 2024
9900aa1
Test area constraint edge case
jfrost-mo Aug 23, 2024
1915b61
Fix typo in rose metadata
jfrost-mo Aug 27, 2024
d1f8302
Handle missing DATA_PERIOD for initiation time
jfrost-mo Aug 27, 2024
68bdfd9
Finish website on compute platform
jfrost-mo Aug 27, 2024
6790771
Remove outdated comment
jfrost-mo Aug 27, 2024
eb36acc
Update cset bake CLI reference
jfrost-mo Aug 27, 2024
3063f32
Remove parallel and collate steps
jfrost-mo Aug 27, 2024
34a1069
Update documentation to reflect changes
jfrost-mo Aug 27, 2024
7e75674
Open HTML output in tutorial
jfrost-mo Aug 27, 2024
40e54ef
Make additional fields compulsory
jfrost-mo Aug 27, 2024
1f3a941
Update example rose-suite.conf
jfrost-mo Aug 27, 2024
322066b
Update rose-meta.conf
Sylviabohnenstengel Aug 30, 2024
2276c9f
Update documentation.rst
Sylviabohnenstengel Aug 30, 2024
018126b
Change datetime examples to use YYYYMMDDThhmmZ format
jfrost-mo Sep 3, 2024
0279838
Clarify help for CSET_CASE_DATES
jfrost-mo Sep 3, 2024
5442b92
Clarify that CSET_ANALYSIS_OFFSET
jfrost-mo Sep 3, 2024
29d5204
Improve definitions of lead time and validity time
jfrost-mo Sep 3, 2024
026baa3
Number models from 0 to allow directly using as index
jfrost-mo Sep 3, 2024
30f83a0
Add assert message to disambiguate asserts
jfrost-mo Sep 3, 2024
e72e40f
Rename FileRetriever to show it's an ABC
jfrost-mo Sep 3, 2024
cade4fc
Clarify point being relative to the data CRS
jfrost-mo Sep 3, 2024
c24ecc6
Clarify STASH code format
jfrost-mo Sep 3, 2024
330eb59
Remove useless help text
jfrost-mo Sep 3, 2024
5c68f5e
Clarify help text around rose edit quoting
jfrost-mo Sep 3, 2024
7a715d6
Fix off-by-one error in model numbering
jfrost-mo Sep 11, 2024
48ba325
Do full range of models
jfrost-mo Sep 11, 2024
c30c3cc
Fix off-by-one vetween rose-suite.conf and list of models
jfrost-mo Sep 11, 2024
39c9650
Clarify coordinates that are in the model's CRS
jfrost-mo Sep 16, 2024
7669e5e
Default to False when setting doesn't exist
jfrost-mo Sep 16, 2024
ab490eb
Make runahead limit an optional configuration
jfrost-mo Sep 16, 2024
d51a952
Add some comments to flow.cylc
jfrost-mo Sep 16, 2024
8404892
Indent jinja code for readability
jfrost-mo Sep 16, 2024
c1be5f4
Note that preprocessing is not yet implemented
jfrost-mo Sep 16, 2024
f101c97
Put all fetch_fcst options directly into rose-app.conf
jfrost-mo Sep 16, 2024
1ce5f15
Move HTTPFileRetriever into fetch_data module
jfrost-mo Sep 16, 2024
acc401c
Fix HTTPFileRetriever
jfrost-mo Sep 16, 2024
a0aff82
Simplify type signature
jfrost-mo Sep 16, 2024
e77ab07
Add a timeout to HTTP retriever
jfrost-mo Sep 16, 2024
671d58f
Test handling of missing data period env var
jfrost-mo Sep 17, 2024
725e388
Use httpbin.org as the MO website just blocks the response
jfrost-mo Sep 17, 2024
32b0952
Use ROSE_DATAC to locate per-cycle data dir
jfrost-mo Sep 17, 2024
86a7406
Remove extraneous )
jfrost-mo Sep 17, 2024
b565a04
Clarify model name should be reasonably short
jfrost-mo Sep 17, 2024
f50ddfe
Bundle recipes and example data into documentation
jfrost-mo Sep 17, 2024
d2d305b
Remove preprocessing settings
jfrost-mo Sep 17, 2024
7d94c59
Set ROSE_DATAC in data_directory test
jfrost-mo Sep 17, 2024
a1bc3ce
Make area constraint much stricter, and handle date line
jfrost-mo Sep 17, 2024
638f018
Test invalid arguments to area constraint
jfrost-mo Sep 17, 2024
f18255b
Make fetch-data-http.py executable
jfrost-mo Sep 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
Expand Down
3 changes: 0 additions & 3 deletions cset-workflow/Jinja2Globals/glob.py

This file was deleted.

3 changes: 0 additions & 3 deletions cset-workflow/Jinja2Globals/zip.py

This file was deleted.

6 changes: 3 additions & 3 deletions cset-workflow/app/fetch_fcst/bin/fetch-data-filesystem.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#! /usr/bin/env python3

"""Retrieve the files from the filesystem for the current cycle point."""
"""Retrieve files from the filesystem."""

import CSET._workflow_utils.fetch_data_filesystem
from CSET._workflow_utils.fetch_data import FilesystemFileRetriever, fetch_data

CSET._workflow_utils.fetch_data_filesystem.run()
fetch_data(FilesystemFileRetriever)
7 changes: 7 additions & 0 deletions cset-workflow/app/fetch_fcst/bin/fetch-data-http.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#! /usr/bin/env python3

"""Retrieve files via HTTP."""

from CSET._workflow_utils.fetch_data import HTTPFileRetriever, fetch_data

fetch_data(HTTPFileRetriever)
2 changes: 0 additions & 2 deletions cset-workflow/app/fetch_fcst/opt/rose-app-filesystem.conf

This file was deleted.

2 changes: 0 additions & 2 deletions cset-workflow/app/fetch_fcst/opt/rose-app-mass.conf

This file was deleted.

5 changes: 4 additions & 1 deletion cset-workflow/app/fetch_fcst/rose-app.conf
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
[command]
default=echo "Please set FETCH_FCST_OPT_CONF to your storage system."; false
default=echo "Please set ROSE_APP_COMMAND_KEY to your storage system."; false
filesystem=app_env_wrapper fetch-data-filesystem.py
http=app_env_wrapper fetch-data-http.py
mass=app_env_wrapper restricted-fetch-data-mass.py
172 changes: 95 additions & 77 deletions cset-workflow/flow.cylc
Original file line number Diff line number Diff line change
Expand Up @@ -4,138 +4,156 @@ title = CSET
description = Workflow for running CSET.
URL = https://metoffice.github.io/CSET

[scheduler]
UTC mode = True
# Import all of our Jinja utilities for use in the workflow.
{% from "jinja_utils" import get_models, glob, max, min, zip, restructure_field_list, sanitise_task_name %}
# Load a list a model detail dictionaries.
{% set models = get_models(ROSE_SUITE_VARIABLES) %}


[scheduling]
runahead limit = P{{CSET_RUNAHEAD_LIMIT}}
initial cycle point = {{CSET_INITIAL_CYCLE_POINT}}
final cycle point = {{CSET_FINAL_CYCLE_POINT}}
# There is rarely a reason to manually set the runahead limit, as we will
# usually be limited by number of concurrent jobs.
{% if CSET_RUNAHEAD_LIMIT|default(False) %}
runahead limit = P{{CSET_RUNAHEAD_LIMIT}}
{% endif %}

# Initial and final cycle points cover the entire period of interest.
{% if CSET_CYCLING_MODE == "case_study" %}
initial cycle point = {{ min(CSET_CASE_DATES) }}
final cycle point = {{ max(CSET_CASE_DATES) }}
{% elif CSET_CYCLING_MODE == "trial" %}
initial cycle point = {{CSET_TRIAL_START_DATE}}
# End date can be blank.
{% if CSET_TRIAL_END_DATE|default(False) %}
final cycle point = {{CSET_TRIAL_END_DATE}}
{% endif %}
{% endif %}

[[graph]]
# Only runs on the first cycle.
R1/^ = """
build_conda & install_website_skeleton => FETCH_DATA
"""

# Only runs on the final cycle.
R1/$ = """
process_finish => COLLATE:succeed-all =>
finish_website => send_email => housekeeping_full
build_conda => install_website_skeleton => setup_complete
"""

# Runs every cycle to process the data in parallel.
{{CSET_CYCLE_PERIOD}} = """
install_website_skeleton[^] & build_conda[^] =>
FETCH_DATA:succeed-all => PARALLEL:succeed-all =>
process_finish => housekeeping_raw

# Intercycle dependence with this task ensures the collate step waits for
# the required data.
process_finish[-{{CSET_CYCLE_PERIOD}}] => process_finish
"""
{% if CSET_CYCLING_MODE == "case_study" %}
# Runs for every forecast initiation time to process the data in parallel.
{% for date in CSET_CASE_DATES %}
R1/{{date}} = """
setup_complete[^] => FETCH_DATA:succeed-all => fetch_complete
fetch_complete => PROCESS:finish-all => housekeeping_raw
"""
{% endfor %}
{% elif CSET_CYCLING_MODE == "trial" %}
# Analyse from each forecast.
{{CSET_TRIAL_CYCLE_PERIOD}} = """
setup_complete[^] => FETCH_DATA:succeed-all => fetch_complete
fetch_complete => PROCESS:finish-all => housekeeping_raw
"""
{% endif %}

{% if CSET_INCREMENTAL_OUTPUT %}
# Runs every so often to update output plots during runtime.
{{CSET_INCREMENTAL_OUTPUT_PERIOD}} = """
COLLATE[-{{CSET_INCREMENTAL_OUTPUT_PERIOD}}]:finish-all &
process_finish => COLLATE
"""
# Can only run tasks on final cycle point if it exists, so skip for
# continuous trials.
{% if CSET_CYCLING_MODE != "trial" or CSET_TRIAL_END_DATE|default(False) %}
# Only runs on the final cycle.
R1/$ = """
housekeeping_raw => finish_website => send_email
housekeeping_raw => housekeeping_full
"""
{% endif %}


[runtime]
[[root]]
script = rose task-run -v
execution time limit = PT15M
[[[environment]]]
CSET_ENV_USE_MODULES = {{CSET_ENV_USE_MODULES}}
{% if CSET_ENV_USE_MODULES %}
MODULES_LIST = {{MODULES_LIST}}
MODULES_PURGE = {{MODULES_PURGE}}
# As these variables are used in the environment script, they must be
# defined.
CSET_ENV_USE_MODULES = {{CSET_ENV_USE_MODULES|default(False)}}
{% if CSET_ENV_USE_MODULES|default(False) %}
MODULES_LIST = {{MODULES_LIST}}
MODULES_PURGE = {{MODULES_PURGE}}
{% endif %}

CSET_ENV_USE_CONDA = {{CSET_ENV_USE_CONDA}}
{% if CSET_ENV_USE_CONDA %}
CONDA_PATH = {{CONDA_PATH}}
CONDA_VENV_LOCATION = {{CONDA_VENV_LOCATION}}
CSET_ENV_USE_CONDA = {{CSET_ENV_USE_CONDA|default(False)}}
{% if CSET_ENV_USE_CONDA|default(False) %}
CONDA_PATH = {{CONDA_PATH}}
CONDA_VENV_LOCATION = {{CONDA_VENV_LOCATION}}
{% endif %}

CSET_ENV_SEPARATE_MET = {{CSET_ENV_SEPARATE_MET}}
{% if CSET_ENV_SEPARATE_MET %}
CONDA_METPLUS_VENV_LOCATION = {{CONDA_METPLUS_VENV_LOCATION}}
MET_INSTALL_DIR = {{MET_INSTALL_DIR}}
MET_BUILD_BASE = {{MET_BUILD_BASE}}
METPLUS_BASE = {{METPLUS_BASE}}
MET_LIBRARIES = {{MET_LIBRARIES}}
CSET_ENV_SEPARATE_MET = {{CSET_ENV_SEPARATE_MET|default(False)}}
{% if CSET_ENV_SEPARATE_MET|default(False) %}
CONDA_METPLUS_VENV_LOCATION = {{CONDA_METPLUS_VENV_LOCATION}}
MET_INSTALL_DIR = {{MET_INSTALL_DIR}}
MET_BUILD_BASE = {{MET_BUILD_BASE}}
METPLUS_BASE = {{METPLUS_BASE}}
MET_LIBRARIES = {{MET_LIBRARIES}}
{% endif %}

LOGLEVEL = {{LOGLEVEL}}
WEB_DIR = {{WEB_DIR}}
COLORBAR_FILE = {{COLORBAR_FILE}}
PLOT_RESOLUTION = {{PLOT_RESOLUTION}}
PLOT_RESOLUTION = {{PLOT_RESOLUTION|default(100)}}

[[PARALLEL]]
[[PROCESS]]
script = rose task-run -v --app-key=run_cset_recipe
[[[environment]]]
CSET_BAKE_MODE = parallel

[[COLLATE]]
script = rose task-run -v --app-key=run_cset_recipe
[[[environment]]]
CSET_BAKE_MODE = collate
execution time limit = PT1H

[[FETCH_DATA]]
script = rose task-run -v --app-key=fetch_fcst
execution time limit = PT1H
[[[environment]]]
CSET_ANALYSIS_OFFSET = {{CSET_ANALYSIS_OFFSET}}
CSET_ANALYSIS_PERIOD = {{CSET_ANALYSIS_PERIOD}}

[[METPLUS]]
[[[environment]]]
{% if METPLUS_GRID_STAT %}
{% if METPLUS_GRID_STAT|default(False) %}
METPLUS_ANA_DIR = {{METPLUS_ANA_DIR}}
METPLUS_FCST_DIR = {{METPLUS_FCST_DIR}}
METPLUS_OBS_DIR = {{METPLUS_OBS_DIR}}
ROSE_APP_OPT_CONF_KEYS = {{METPLUS_OPT_CONFIG_KEYS}}
{% endif %}
{% endif %}

# Dummy tasks needed for workflow scheduling.
[[process_finish]]
[[DUMMY_TASK]]
script = true
platform = localhost
execution time limit = PT1M

[[dummy_collate]]
inherit = COLLATE
script = true
platform = localhost
[[setup_complete]]
inherit = DUMMY_TASK

[[dummy_parallel]]
inherit = PARALLEL
script = true
platform = localhost
[[fetch_complete]]
inherit = DUMMY_TASK

[[build_conda]]
# Create the conda environment if it does not yet exist, possibly installing
# CSET from source.
execution time limit = PT30M
[[[environment]]]
CONDA_VENV_CREATE = {{CONDA_VENV_CREATE}}
CSET_ENV_USE_LOCAL_CSET = {{CSET_ENV_USE_LOCAL_CSET}}
{% if CSET_ENV_USE_LOCAL_CSET %}
CSET_LOCAL_CSET_PATH = {{CSET_LOCAL_CSET_PATH}}
CSET_ENV_USE_LOCAL_CSET = {{CSET_ENV_USE_LOCAL_CSET|default(False) }}
{% if CSET_ENV_USE_LOCAL_CSET|default(False) %}
CSET_LOCAL_CSET_PATH = {{CSET_LOCAL_CSET_PATH}}
{% endif %}

[[install_website_skeleton]]
# Copies the static files that make up the web interface.
[[[environment]]]
WEB_DIR = {{WEB_DIR}}

[[fetch_fcst]]
{% for model in models %}
[[fetch_fcst_m{{model["number"]}}]]
# Fetch data from disk or a file based archival system.
inherit = FETCH_DATA
[[[environment]]]
ROSE_APP_OPT_CONF_KEYS = {{FETCH_FCST_OPT_CONF}}
CSET_INPUT_FILE_PATH = {{CSET_INPUT_FILE_PATH}}
{% if CSET_INCREMENTAL_DATA_FETCH %}
CSET_FILE_NAME_METADATA_PATTERN = {{CSET_FILE_NAME_METADATA_PATTERN}}
CSET_CYCLE_PERIOD = {{CSET_CYCLE_PERIOD}}
CSET_TIMES_PER_FILE = {{CSET_TIMES_PER_FILE}}
CSET_FILE_TIME_OFFSET = {{CSET_FILE_TIME_OFFSET}}
MODEL_NUMBER = {{model["number"]}}
ROSE_APP_COMMAND_KEY = {{model["data_source"]}}
DATA_PATH = {{model["data_path"]}}
DATE_TYPE = {{model["date_type"]}}
{% if model["date_type"] != "initiation" %}
DATA_PERIOD = {{model["data_period"]}}
{% endif %}
{% endfor %}

[[housekeeping_raw]]
# Housekeep unprocessed data files.
Expand All @@ -151,13 +169,13 @@ URL = https://metoffice.github.io/CSET

[[finish_website]]
# Updates the workflow info in the web interface.
platform = localhost

[[send_email]]
# Send email to notify that the workflow is complete.
platform = localhost
[[[environment]]]
WEB_ADDR = {{WEB_ADDR}}
WEB_DIR = {{WEB_DIR}}


# Include files bring their own graph and runtime sections.
jfrost-mo marked this conversation as resolved.
Show resolved Hide resolved
Expand Down
19 changes: 18 additions & 1 deletion cset-workflow/includes/basic_qq_plot.cylc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{% if BASIC_QQ_PLOT %}
{% if BASIC_QQ_PLOT|default(False) %}
[runtime]
{% for model_field_A, model_field_B, coord_A, coord_B in zip(MODEL_FIELDS_A, MODEL_FIELDS_B,VERTICAL_COORDINATE_A, VERTICAL_COORDINATE_B) %}
[[generic_basic_qq_plot_{{model_field_A}}_{{model_field_B}}_parallel]]
Expand Down Expand Up @@ -31,3 +31,20 @@
"""
{% endfor %}
{% endif %}

{# Example code to use as basis for multi-model cycling:
{% for equivalent_field in restructure_field_list(PRESSURE_LEVEL_MODEL_FIELDS) %}
{% for model_number, field in equivalent_field.items() %}
[runtime]
[[generic_basic_qq_plot_m{{model_number}}_{{sanitise_task_name(field)}}]]
inherit = PROCESS
[[[environment]]]
CSET_RECIPE_NAME = "generic_basic_qq_plot.yaml"
CSET_ADDOPTS = """
--VARNAME='{{field}}'
--MODEL_NAME='{{models[model_number]["name"]}}'
"""
MODEL_NUMBER = {{model_number}}
{% endfor %}
{% endfor %}
#}
27 changes: 15 additions & 12 deletions cset-workflow/includes/deterministic_domain_histogram_series.cylc
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
{% if DOMAIN_HISTOGRAM_SERIES_FIELD %}
{% if DOMAIN_HISTOGRAM_SERIES|default(False) %}
{% for equivalent_field in restructure_field_list(PRESSURE_LEVEL_MODEL_FIELDS) %}
{% for model_number, field in equivalent_field.items() %}
{% for plevel in PRESSURE_LEVELS %}
[runtime]
{% for model_field in MODEL_LEVEL_MODEL_FIELDS %}
[[pre_process_deterministic_domain_histogram_series_{{model_field}}]]
inherit = PARALLEL
[[generic_plevel_histogram_series_m{{model_number}}_{{sanitise_task_name(field)}}_lv{{sanitise_task_name(plevel)}}]]
inherit = PROCESS
[[[environment]]]
CSET_RECIPE_NAME = "generic_histogram_series.yaml"
CSET_ADDOPTS = "--VARNAME='{{model_field}}' --MLEVEL='{{UM_MODEL_LEVELS}}'"

[[collate_deterministic_domain_histogram_series_{{model_field}}]]
inherit = COLLATE
[[[environment]]]
CSET_RECIPE_NAME = "generic_histogram_series.yaml"
CSET_ADDOPTS = "--VARNAME='{{model_field}}' --MLEVEL='{{UM_MODEL_LEVELS}}'"
CSET_RECIPE_NAME = "generic_plevel_histogram_series.yaml"
CSET_ADDOPTS = """
--VARNAME='{{field}}'
--PLEVEL='{{plevel}}'
--MODEL_NAME='{{models[model_number]["name"]}}'
"""
MODEL_NUMBER = {{model_number}}
{% endfor %}
{% endfor %}
{% endfor %}
{% endif %}
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{% if DOMAIN_MEAN_SURFACE_TIME_SERIES %}
{% for model_field in SURFACE_MODEL_FIELDS %}
{% if DOMAIN_MEAN_SURFACE_TIME_SERIES|default(False) %}
{% for equivalent_field in restructure_field_list(SURFACE_MODEL_FIELDS) %}
{% for model_number, field in equivalent_field.items() %}
[runtime]
[[pre_process_domain_mean_surface_time_series_{{model_field}}]]
inherit = PARALLEL
[[generic_surface_domain_mean_time_series_m{{model_number}}_{{sanitise_task_name(field)}}]]
inherit = PROCESS
[[[environment]]]
CSET_RECIPE_NAME = "generic_surface_domain_mean_time_series.yaml"
CSET_ADDOPTS = "--VARNAME={{model_field}}"

[[collate_domain_mean_surface_time_series_{{model_field}}]]
inherit = COLLATE
[[[environment]]]
CSET_RECIPE_NAME = "generic_surface_domain_mean_time_series.yaml"
CSET_ADDOPTS = "--VARNAME={{model_field}}"
CSET_ADDOPTS = """
--VARNAME='{{field}}'
--MODEL_NAME='{{models[model_number]["name"]}}'
"""
MODEL_NUMBER = {{model_number}}
{% endfor %}
{% endfor %}
{% endif %}
Loading