Skip to content

Commit 902fbf9

Browse files
committed
Merge remote-tracking branch 'origin/main' into cmorize_CAMS
2 parents 679720a + 9262abb commit 902fbf9

39 files changed

Lines changed: 5397 additions & 112 deletions

doc/sphinx/source/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@
446446

447447
# Configuration for intersphinx
448448
intersphinx_mapping = {
449-
'cartopy': ('https://scitools.org.uk/cartopy/docs/latest/', None),
449+
'cartopy': ('https://cartopy.readthedocs.io/latest/', None),
450450
'cf_units': ('https://cf-units.readthedocs.io/en/latest/', None),
451451
'esmvalcore':
452452
(f'https://docs.esmvaltool.org/projects/esmvalcore/en/{rtd_version}/',

doc/sphinx/source/recipes/broken_recipe_list.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,3 @@ More details can be found in the :ref:`broken recipe policy
3232
- v2.11.0
3333
- CESM1 CMIP5 Omon data no longer available
3434
- `#3693 <https://github.com/ESMValGroup/ESMValTool/issues/3693>`_
35-
* - :ref:`recipe_zmnam.yml <recipes_zmnam>`
36-
- ``zmnam``
37-
- v2.12.0
38-
- Diagnostic failure
39-
- `#3938 <https://github.com/ESMValGroup/ESMValTool/issues/3938>`_
274 KB
Loading
1.38 MB
Loading
274 KB
Loading
209 KB
Loading

doc/sphinx/source/recipes/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ Ocean
134134
recipe_combined_indices
135135
recipe_esacci_oc
136136
recipe_enso_ref
137+
recipe_enso_clivar
137138
recipe_oceans
138139
recipe_sea_surface_salinity
139140
recipe_russell18jgr
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
.. _recipes_enso_diagnostics:
2+
3+
ENSO CLIVAR metrics - reproducing ENSO characteristics, lifecycle, seasonality, teleconnections
4+
=================================================================================================
5+
6+
Overview
7+
--------
8+
9+
Reproducing ENSO metrics from the
10+
[CLIVAR package](https://pcmdi.llnl.gov/pmp-preliminary-results/interactive_plot/portrait_plot/enso_metric/enso_metrics_interactive_portrait_plots_v20231121.html)
11+
with dive down plots of ENSO diagnostics including characteristics, lifecycle, seasonality, feedbacks and teleconnections.
12+
13+
Available recipes and diagnostics
14+
---------------------------------
15+
16+
Recipes are stored in esmvaltool/recipes/
17+
18+
* recipe_enso_climatology1.yml
19+
* recipe_enso_climatology_level2-3.yml
20+
* recipe_enso_characteristics.yml
21+
* recipe_enso_divedown9-10_14-15.yml
22+
* recipe_enso_divedown11-13.yml
23+
* recipe_enso_feedback.yml
24+
* recipe_enso_feedbacknhf.yml
25+
* recipe_enso_teleconnection.yml
26+
27+
Diagnostics are stored in esmvaltool/diag_scripts/enso_metrics/
28+
29+
* **matrix.py**: reads metrics in work_dir from csv file written out in climatology_diagnostic1, use for other groups of metrics
30+
* **climatology_diagnostic1.py**: computes basic climatology for level 1 metrics
31+
* **climatology_diagnosticlevel2.py**: creates basic climatology level 2 plots
32+
* **climatology_diagnosticlevel3.py**: creates basic climatology level 3 plots
33+
* **enso_diag1metrics.py**: computes basic ENSO characteristics metrics
34+
* **enso_divedowns/ampseasskew11-13.py**: dive down scripts for ENSO amplitude, seasonality and skewness
35+
* **enso_divedowns/durdiver_14-15.py**: dive down scripts for ENSO duration and diversity
36+
* **enso_divedowns/lifecycle_10.py**: dive down scripts for ENSO lifecycle
37+
* **enso_divedowns/pattern_9.py**: dive down scripts for ENSO pattern
38+
* **feedback/feedback_metrics_lvl4.py**: feedback level4 plots
39+
* **feedback/feedback_metrics.py**: feedback level3 plots
40+
* **feedback/feedback_nhf_lvl3_4.py**: feedback NHF level3-4 plots
41+
* **feedback/feedback_nhf_metric.py**: feedback NHF metrics
42+
* **teleconnections_metrics.py**: computes and plots teleconnections metrics
43+
44+
45+
User settings in recipe
46+
-----------------------
47+
48+
#. Script: **matrix.py**
49+
50+
*Required settings for script*
51+
52+
* **diag_metrics**: diagnostic name and script name in *yml* of the diagnostic that computes all the metrics so it can find the *csv* in the `work_dir` - eg. diagnostic_metrics/plot_script
53+
54+
55+
Variables
56+
---------
57+
58+
* tos (Omon, monthly)
59+
* areacello (Ofx)
60+
* pr (Amon, monthly)
61+
* ts (Amon, monthly)
62+
* areacella (fx)
63+
* tauu (Amon, monthly)
64+
* zos (Omon, monthly)
65+
* hfns (hfls+hfss, Amon, monthly)
66+
67+
Observations and reformat scripts
68+
---------------------------------
69+
70+
* HadISST
71+
* TropFLUX
72+
* GPCP-SG
73+
* ERA-Interim
74+
75+
References
76+
----------
77+
78+
* [1] https://pcmdi.llnl.gov/pmp-preliminary-results/interactive_plot/portrait_plot/enso_metric/enso_metrics_interactive_portrait_plots_v20231121.html
79+
* [2] https://github.com/CLIVAR-PRP/ENSO_metrics/
80+
81+
Example plots
82+
-------------
83+
84+
.. _fig_teleconnections:
85+
.. figure:: /recipes/figures/enso_metrics/ACCESS-ESM1-5_DJF_ts_telecon.png
86+
:align: center
87+
88+
PR or SST anomalies on Earth (between 60°S-60°N), showing the location associated with ENSO.
89+
90+
.. _fig_seasonality_level4:
91+
.. figure:: /recipes/figures/enso_metrics/ACCESS-ESM1-5_12seasonality_level_4.png
92+
:align: center
93+
94+
Seasonality level 4 plot of boreal summer/winter SSTA standard deviation.
95+
96+
.. _fig_feedback_level2:
97+
.. figure:: /recipes/figures/enso_metrics/ACCESS-ESM1-5_SSH_SST_lvl2.png
98+
:align: center
99+
100+
Feedback level 2 plot of SSH and SST anomalies.
101+
102+
.. _fig_metrics:
103+
.. figure:: /recipes/figures/enso_metrics/plot_matrix.png
104+
:align: center
105+
106+
Portrait plot of normalized metrics for models against reference observation.

esmvaltool/config-references.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,10 @@ authors:
651651
name: Charlton-Perez, Andrew
652652
institute: Univ. of Reading, UK
653653
orcid:
654+
chung_christine:
655+
name: Chung, Christine
656+
institute: Bureau of Meterology, Australia
657+
orcid:
654658
corti_susanna:
655659
name: Corti, Susanna
656660
institute: ISAC-CNR, Torino, Italy
@@ -659,6 +663,10 @@ authors:
659663
name: Dennis, John
660664
institute: NCAR, USA
661665
orcid:
666+
gillet_zoe:
667+
name: Gillet, Zoe
668+
institute: Bureau of Meterology, Australia
669+
orcid:
662670
graf_phoebe:
663671
name: Graf, Phoebe
664672
institute: DLR, Germany

esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel2.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ def plotmaps_level2(input_data, grp):
2626
"""Create map plots for pair of input data."""
2727
fig = plt.figure(figsize=(18, 6))
2828
proj = ccrs.Orthographic(central_longitude=210.0)
29-
data_to_save = []
3029
for plt_pos, dataset in enumerate(input_data, start=121):
3130
logger.info(
3231
"dataset: %s - %s",
@@ -35,9 +34,6 @@ def plotmaps_level2(input_data, grp):
3534
)
3635
cube, cbar_label = load_seacycle_stdev(dataset)
3736

38-
# save data
39-
data_to_save.append(cube)
40-
4137
ax1 = plt.subplot(plt_pos, projection=proj)
4238
ax1.add_feature(cfeature.LAND, facecolor="gray")
4339
ax1.coastlines()
@@ -65,7 +61,7 @@ def plotmaps_level2(input_data, grp):
6561
cbar = fig.colorbar(cf1, cax=cax, orientation="horizontal", extend="both")
6662
cbar.set_label(cbar_label)
6763

68-
return fig, data_to_save
64+
return fig
6965

7066

7167
def load_seacycle_stdev(dataset):
@@ -103,8 +99,16 @@ def provenance_record(var_grp, ancestor_files):
10399
"Time-mean sea surface temperature bias in the "
104100
+ "equatorial Pacific."
105101
),
102+
"sst_seacycle": (
103+
"Bias in the amplitude of the mean seasonal cycle of "
104+
+ "sea surface temperature in the equatorial Pacific."
105+
),
106106
"tauu_bias": "Time-mean zonal wind stress bias in the "
107107
+ "equatorial Pacific.",
108+
"tauu_seacycle": (
109+
"Bias in the amplitude of the mean seasonal cycle of "
110+
+ "zonal wind stress in the equatorial Pacific."
111+
),
108112
}
109113
record = {
110114
"caption": caption[var_grp],
@@ -145,15 +149,14 @@ def main(cfg):
145149
# for each select obs and iterate others, obs last
146150
for grp, var_attr in variable_groups.items():
147151
logger.info("%s : %d, %s", grp, len(var_attr), pformat(var_attr))
148-
# create pairs, add obs first to list
149-
pairs = [var_attr[-1]]
150152
prov = provenance_record(grp, list(cfg["input_data"].keys()))
151153
for metadata in var_attr:
154+
# create pairs, add obs first to list
155+
pairs = [var_attr[-1]]
152156
logger.info("iterate though datasets\n %s", pformat(metadata))
153157
if metadata["project"] == "CMIP6":
154158
pairs.append(metadata)
155-
fig, data_cubes = plotmaps_level2(pairs, grp)
156-
save_plotdata(data_cubes, grp, pairs, cfg)
159+
fig = plotmaps_level2(pairs, grp)
157160
filename = "_".join(
158161
[
159162
metadata["dataset"],

0 commit comments

Comments
 (0)