Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
dd971ab
Adds diagnostics to identify properties of the MAUL
daflack Apr 16, 2026
26e7358
Add initial operator to identify properties of MAULs
daflack Apr 16, 2026
55b7272
Adds full operator for MAUL property identification
daflack Apr 21, 2026
e18b348
Add precipitation operators to init file
daflack Apr 21, 2026
037a070
Adds precipitation operators to documentation
daflack Apr 21, 2026
da83033
Adds initial recipe for number of mauls
daflack Apr 21, 2026
93596bc
Update recipe following rebase
daflack Apr 21, 2026
a165f10
Removes possible output of MAUL top as less important than others
daflack Apr 21, 2026
038ab60
Adds recipes for base and depth of deepest MAUL
daflack Apr 21, 2026
41a6ab0
Adds new recipes into the workflow for testing
daflack Apr 21, 2026
8f26e91
Corrects indentations in recipes
daflack Apr 21, 2026
a451866
Updates indents in recipes
daflack Apr 21, 2026
0ebbc0c
Update indents in recipe
daflack Apr 21, 2026
7394968
Update operator
daflack Apr 22, 2026
3431376
Update to operator so basic version works
daflack Apr 23, 2026
8060e79
Corrects unit assignment in operator
daflack Apr 23, 2026
d33acb8
Correct output for maul base
daflack Apr 24, 2026
40d4ac2
Working maul properties operator and recipes
daflack Apr 28, 2026
ec68c3c
Update docs
daflack Apr 30, 2026
4deaf98
Adds check for binary field into properties
daflack May 11, 2026
81c1f3d
Adds documentation
daflack May 11, 2026
0cb0af3
Update to ensure all output possible
daflack May 11, 2026
efcaf0f
Add test data and precalculated results
daflack May 11, 2026
bf871dc
Adds tests, fixes operator, adds test data
daflack May 11, 2026
322b17f
Add extra tests
daflack May 12, 2026
becdf13
Uses enumerate in loops
daflack May 12, 2026
391514a
Convert output to Literal
daflack May 12, 2026
6d75658
Sets last case to _ for completeness given earlier checks and literal
daflack May 12, 2026
9b1b498
Adds to rose-suite.conf.example
daflack May 12, 2026
352745e
Update rose-meta.conf
Sylviabohnenstengel May 12, 2026
2915bb1
Update rose-meta.conf
Sylviabohnenstengel May 12, 2026
e7b001d
Update rose-meta.conf
Sylviabohnenstengel May 12, 2026
ff731da
Update precipitation.py
Sylviabohnenstengel May 12, 2026
71c010e
Update precipitation.py
Sylviabohnenstengel May 12, 2026
0c9e0d8
Update precipitation.py
Sylviabohnenstengel May 12, 2026
b1c0547
Update precipitation.py
Sylviabohnenstengel May 12, 2026
c9ac4fc
Update precipitation.py
Sylviabohnenstengel May 12, 2026
e4091fd
Update precipitation.py
Sylviabohnenstengel May 12, 2026
6f7ccb9
Update base_of_moist_absolutely_unstable_layers_spatial_plot.yaml
Sylviabohnenstengel May 12, 2026
15d918c
add tests for 4D time depth, 4D realisation depth, 5D base.
Sylviabohnenstengel May 12, 2026
e5b8f07
Updates documentation
daflack May 13, 2026
e845924
Adds in new test data
daflack May 13, 2026
69c88e7
Update documentation
daflack May 13, 2026
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
9 changes: 9 additions & 0 deletions docs/source/reference/operators.rst
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,15 @@ CSET.operators.mesoscale
.. automodule:: CSET.operators.mesoscale
:members:

Precipitation Operators
~~~~~~~~~~~~~~~~~~~~~~~

CSET.operators.precipitation
----------------------------

.. automodule:: CSET.operators.precipitation
:members:

Pressure Operators
~~~~~~~~~~~~~~~~~~

Expand Down
51 changes: 50 additions & 1 deletion src/CSET/cset_workflow/meta/diagnostics/rose-meta.conf
Original file line number Diff line number Diff line change
Expand Up @@ -1807,7 +1807,7 @@ title= Presence of moist absolutely unstable layers (MAULs) in a column
description=PROCESS-BASED DIAGNOSTIC.
Determines if a moist absolutely unstable layer (MAUL) is present
in a grid column regardless of depth.
Requires "air_temperature", "air_pressure", and "specfic_humidity" on model levels.
Requires "air_temperature", "air_pressure", and "specific_humidity" on model levels.
help=This diagnostic identifies only whether a MAUL is present within the column.
It does not provide any information about the properties of the MAUL. A MAUL
is defined as an unstable layer (equivalent potential temperature gradient
Expand All @@ -1817,6 +1817,55 @@ type=python_boolean
compulsory=true
sort-key=xp-maulp

[template variables=MAUL_NUMBER]
ns = Diagnostics/Derived/XPPN
title= Number of moist absolutely unstable layers (MAULs) in a column
description=PROCESS-BASED DIAGNOSTIC.
Determines the number of moist absolutely unstable layers (MAUL) present
in a grid column regardless of depth.
Requires "air_temperature", "air_pressure", and "specific_humidity" on model levels.
help=This diagnostic identifies the numbers of MAUL that are present within the column.
It does not provide any information about the properties of the MAUL. A MAUL
is defined as an unstable layer (equivalent potential temperature gradient
with height less than zero) that has a relatively humidity above '90%' following
Takemi and Unuma (2020).

type=python_boolean
compulsory=true
sort-key=xp-maulp1

[template variables=MAUL_DEPTH]
ns = Diagnostics/Derived/XPPN
title= Depth of moist absolutely unstable layer (MAUL) in a column
description=PROCESS-BASED DIAGNOSTIC.
Determines the depth of the deepest moist absolutely unstable layer (MAUL)
in a grid column.
Requires "air_temperature", "air_pressure", and "specific_humidity" on model levels.
help=This diagnostic identifies only the deepest MAUL within the column. A MAUL
is defined as an unstable layer (equivalent potential temperature gradient
with height less than zero) that has a relatively humidity above '90%' following
Takemi and Unuma (2020).

type=python_boolean
compulsory=true
sort-key=xp-maulp2

[template variables=MAUL_BASE]
ns = Diagnostics/Derived/XPPN
title= Base (AGL) of moist absolutely unstable layer (MAUL) in a column
description=PROCESS-BASED DIAGNOSTIC.
Determines the base height (AGL) of the deepest moist absolutely unstable layer (MAUL)
in a grid column.
Requires "air_temperature", "air_pressure", and "specific_humidity" on model levels.
help=This diagnostic identifies the base of the deepest MAUL within the column. A MAUL
is defined as an unstable layer (equivalent potential temperature gradient
with height less than zero) that has a relatively humidity above '90%' following
Takemi and Unuma (2020).

type=python_boolean
compulsory=true
sort-key=xp-maulp3

###################################
# Ensembles
[Diagnostics/Ensembles]
Expand Down
3 changes: 3 additions & 0 deletions src/CSET/cset_workflow/rose-suite.conf.example
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ LIGHT_RAIN_PRESENCE_SPATIAL_DIFFERENCE=False
LIGHT_RAIN_PRESENCE_SPATIAL_PLOT=False
LOGLEVEL="DEBUG"
!!LONGITUDE_POINT=0
MAUL_BASE=False
MAUL_DEPTH=False
MAUL_NUMBER=False
MAUL_PRESENCE=False
MEAN_STRUCTURAL_SIMILARITY_MLEVEL=False
MEAN_STRUCTURAL_SIMILARITY_PLEVEL_FIELD=False
Expand Down
48 changes: 48 additions & 0 deletions src/CSET/loaders/spatial_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,54 @@ def load(conf: Config):
aggregation=False,
)

# Number of Moist Absolutely Unstable Layer in a Column
if conf.MAUL_NUMBER:
for model in models:
yield RawRecipe(
recipe="number_of_moist_absolutely_unstable_layers_present_in_a_spatial_column.yaml",
variables={
"MODEL_NAME": model["name"],
"SUBAREA_TYPE": conf.SUBAREA_TYPE if conf.SELECT_SUBAREA else None,
"SUBAREA_EXTENT": conf.SUBAREA_EXTENT
if conf.SELECT_SUBAREA
else None,
},
model_ids=model["id"],
aggregation=False,
)

# Moist Absolutely Unstable Layer depth (of deepest)
if conf.MAUL_DEPTH:
for model in models:
yield RawRecipe(
recipe="depth_of_moist_absolutely_unstable_layers_spatial_plot.yaml",
variables={
"MODEL_NAME": model["name"],
"SUBAREA_TYPE": conf.SUBAREA_TYPE if conf.SELECT_SUBAREA else None,
"SUBAREA_EXTENT": conf.SUBAREA_EXTENT
if conf.SELECT_SUBAREA
else None,
},
model_ids=model["id"],
aggregation=False,
)

# Moist Absolutely Unstable Layer base height (of deepest)
if conf.MAUL_BASE:
for model in models:
yield RawRecipe(
recipe="base_of_moist_absolutely_unstable_layers_spatial_plot.yaml",
variables={
"MODEL_NAME": model["name"],
"SUBAREA_TYPE": conf.SUBAREA_TYPE if conf.SELECT_SUBAREA else None,
"SUBAREA_EXTENT": conf.SUBAREA_EXTENT
if conf.SELECT_SUBAREA
else None,
},
model_ids=model["id"],
aggregation=False,
)

# Screen-level temperature probabilities
for model, condition, threshold in itertools.product(
models,
Expand Down
2 changes: 2 additions & 0 deletions src/CSET/operators/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
mesoscale,
misc,
plot,
precipitation,
pressure,
read,
regrid,
Expand All @@ -65,6 +66,7 @@
"mesoscale",
"misc",
"plot",
"precipitation",
"pressure",
"read",
"regrid",
Expand Down
Loading