NWP | TempestExtremes | feature detection, tracking, and analysis
TempestExtremes
- https://climate.ucdavis.edu/tempestextremes.php
- https://github.com/ClimateGlobalChange/tempestextremes
TempestExtremes is a growing collection of detection and characterization algorithms for large climate datasets, leveraging C++ for rapid throughput and a command line interface that maximizes flexibility of each kernel. The tracking kernels in this package have been already
- used for tracking and characterizing tropical cyclones (TCs), extratropical cyclones (ETCs), monsoonal depressions, atmospheric blocks, atmospheric rivers, and mesoscale convective systems (MCSs).
By considering multiple extremes within the same framework, we can study the joint characteristics of extremes while minimizing the total data burden.
TempestExtremes (TE) is a multifaceted framework for feature detection, tracking, and scientific analysis of regional or global Earth system datasets on either rectilinear or unstructured/native grids.
- Ullrich, P. A., Zarzycki, C. M., McClenny, E. E., Pinheiro, M. C., Stansfield, A. M., and Reed, K. A.: TempestExtremes v2.1: a community framework for feature detection, tracking, and analysis in large datasets, Geosci. Model Dev., 14, 5023–5048, https://doi.org/10.5194/gmd-14-5023-2021, 2021.
- Ullrich, P.A. and C.M. Zarzycki (2017) "TempestExtremes v1.0: A framework for scale-insensitive pointwise feature tracking on unstructured grids" Geosci. Model. Dev. 10, pp. 1069-1090, doi: 10.5194/gmd-10-1069-2017.
- Zarzycki, C.M. and P.A. Ullrich (2017) "Assessing sensitivities in algorithmic detection of tropical cyclones in climate data" Geophys. Res. Lett. 44 (2), pp. 1141-1149, doi: 10.1002/2016GL071606.
Installation
Installation via conda
TempestExtremes can be found on conda-forge here:
To install from conda use the command line:
1 | |
Installation via CMake (Recommended)
TempestExtremes can be built and installed on various systems using CMake. Our new script, ./quick_make_unix.sh , automatically detects your platform(UNIX-based systems only) and loads any required modules before building.
**Tropical cyclone tracking (TCs)
Step 1: identify candidate storms
1 | |
- The first criterion we use for TCs is “MSL,200.0,5.5,0”, which indicates that mean sea level pressure must increase by 200 Pa over a 5.5∘ great circle distance (GCD) from the candidate point (the low-pressure region must be of sufficient magnitude and sufficiently compact to be considered coherent).
- The second criterion is “_DIFF(Z(300hPa),Z(500hPa)), -58.8,6.5,1.0”, which indicates that the difference between geopotential (Z) on the 300 and 500 hPa surfaces must decrease by 58.8 m2 s−2 (equal to 6 m geopotential height) over a 6.5∘ GCD, using the maximum value of this field within 1∘ GCD as reference.
- This second criterion indicates that there must be a coherent upper-level warm core attached to the local low so as to structurally differentiate these features from extratropical systems.
mergedist- DetectNodes merges candidate points with a distance (in degrees great-circle-distance) shorter than the specified value
outputcmdindicates three additional outputs that are calculated and written as additional columns in each nodefile.- here,
“MSL,min,0”outputs the value of MSL at the candidate point,“_VECMAG(VAR_10U,VAR_10V),max,2”outputs the maximum magnitude of the vector wind at 10 m altitude within 2∘ GCD of the candidate, and“ZS,min,0”outputs the surface height at the candidate point. These variables are needed in the subsequentStitchNodesstep to construct and filter TC trajectories.
- here,


Step 2: connect candidate storms in time
Once TC candidates have been identified on each time slice, the “stitching” step in the algorithm ties these candidates together in time to form TC trajectories (the “Reduce” operation in the MapReduce paradigm).
- Some features that are too weak, too short-lived, or too disorganized are eliminated from contention at this stage.
- Also, features that are more likely related to topographic anomalies rather than real storms are also removed.
1 | |
The relevant tuning parameters are specified by
range- the maximum distance (in ∘ GCD) that a feature can move between subsequent detections
mintime- the minimum persistence time of each trajectory (calculated as the time between initiation and termination),
maxgap- the maximum duration between two sequential detections
- In particular,
maxgapis a novel option that allows a path to be missing candidates for some time slices (for instance due to temporary weakening of a TC as it passes over land).
thresholds- Four field-dependent thresholds are then specified for a trajectory to be accepted.
- The first threshold “wind,>=,10.0,10” indicates that the wind magnitude (derived from the “wind” column in the nodefile) must be greater than 10 m s−1 for at least 10 time slices; this ensures that these features are sufficiently intense to be classified as tropical storms.
- The next two thresholds “lat,<=,50.0,10;lat,>=,-50.0,10” indicate that the latitude of the feature must be between 50∘ S and 50∘ N for at least 10 time slices, so as to eliminate any extratropical features that could not have existed as tropical storms.
- The final threshold “zs,<=,150.0,10” indicates that the feature must exist at an elevation below 150 m for at least 10 time slices; this removes false alarms that can often appear in regions of rough topography that are associated with the sea level pressure correction.
- Four field-dependent thresholds are then specified for a trajectory to be accepted.
(Optional) Step 3: compute the outer radius of each tracked TC
- As argued by Schenkel et al. (2017), the largest radius outside of the eyewall where the azimuthally averaged wind speed exceeds 8 m s−1 (r8) tends to be a good measure of the size of a TC.
- In Stansfield et al. (2020), TE was used to examine the distribution of r8 among TCs in reanalysis data in ERA5 and a series of runs with the Community Earth System Model (CESM).
1 | |
- The calculations requested from NodeFileEditor are specified by the calculate argument, executed from left to right. First the radial profile is computed with
radial_wind_profile (VAR_10U,VAR_10V,159,0.125)and stored in variablerprof. These arguments indicate which variables should be used for the calculation and that the radial profile should consist of 159 bins of width 0.125 deg GCD (~13.8km or 0.25deg/2=0.125deg).- very large range: 159 * 0.125 ~= 20 deg
- may set half of it
- After the radial profile is calculated, the last value where the radial wind profile is greater than 8 m s−1 is located and written to the nodefile. The last value in the array is taken because we want to avoid recording the radius of the 8 m s−1 wind within the TC inner core.
- The number of bins and the bin width were chosen based on the horizontal grid spacing of the ERA5 wind data, which is approximately 31 km. The bin width of 0.125∘ adequately samples points at this grid spacing to create the radial wind profiles. The number of bins ensures the radial averaging extended out far enough from the TC center points to capture the storms' complete wind circulations.
Error
EXCEPTION "time" variable in "/diag.nc" missing "calendar" attribute
- for
make_time_te_compliant.py, modify
1 | |
For MPAS, nodefile from StitchNodes,
1 | |
(Optional) Step 4: build a mask using the outer radius of the storm
With the r8 value for each TC now in hand, we define “TC-related precipitation” as any precipitation which occurs at grid points that are considered part of a TC. Employing TE's NodeFileFilter command, precipitation outside of the circle with radius r8 centered on each TC is set to zero:
1 | |
- TODO list on MPAS
Example
20250921_00 UTC
1 | |




20251005_00 UTC
1 | |



Extratropical cyclones (ETCs)
Step 1: generate extratropical cyclone trajectories
1 | |
- The algorithm applied here identifies cyclonic storms as sea level pressure minima.
- To avoid topographic lows and features that are not meteorological in character, additional criteria are imposed on the minimum lifetime and propagation distance.
- Our criterion for cyclonic storms is that the minimum pressure must be enclosed by a closed contour of 200 Pa within 6.0∘ of cyclone center. This minimum pressure location also defines the cyclone center.
1 | |
- Here the StitchNodes thresholds require that storms persist for at least 60 h, with a maximum gap (time between sequential detections satisfying the DetectNodes criteria) of at most 18 h.
- Furthermore, at least one point must pass through a geographic region (representing CONUS) bounded by 24 and 52∘ N latitude and 234 and 294∘ E longitude.
- We also require ETCs move at least 12∘ GCD from the start to the end of the trajectory, as specified by the min_endpoint_dist argument, in order to eliminate stationary features (e.g., the Icelandic Low) and spurious shallow lows generated over regions of high topography.
Step 2: filter out ETCs with sea level pressure above 990 hPa
In some cases, it may be desirable to filter out the more intense, potentially more impactful events. While the definition of a strong ETC is inherently subjective, we define a central pressure of 990 hPa as the demarcation between strong and moderate/weak ETCs as in Zhang and Colle (2017).
- To do so, all ETCs tracked in step 1 are passed into
NodeFileEditor, in which a new trajectory file specified by argument out_nodefile is generated with storms only possessing intensities of 990 hPa or lower:
1 | |
Step 3: filter data within 25∘ of storm center and composite
Corresponding precipitation rate outputs from the same ensemble member are masked within 25∘ GCD of a storm center tracked in step 1. Here, all precipitation associated with the cyclone is retained, while all precipitation not within 25∘ of a storm is set to zero.
1 | |
- As a last step, storm-centered composites are generated using the following command:
1 | |
Here, only ETCs filtered above to have central SLP values below 990 hPa are composited. Although we can composite any 2D field, here we apply the compositing tool to precipitation filtered by NodeFileFilter. The argument max_time_delta indicates that the data slice nearest in time to the tracked feature (within 2 h) should be composited – this is useful when the discrete times from data and features are not exactly aligned. The arithmetic mean is calculated centered on the storm location (see Sect. 2.4). The resulting stereographic composite has a grid spacing of 1∘ and a resolution of 80 × 80 grid points.
Atmospheric rivers (ARs)
- Atmospheric rivers (ARs) are thin and long filamentary structures characterized by high integrated vapor transport (IVT)
Step 1: detect ridges in the IVT field
- Here we have adopted the nomenclature of ERA5 for vertically integrated eastward vapor transport (VIWVE) and northward vapor transport (VIWVN).
- Ridge points are associated with high downward curvature and identified as those points where the Laplacian of the IVT field is below a fixed threshold (here chosen to be \(-2 \times 10^4\) kg m−2 s−1 rad−2).
\[ \mbox{IVT} = \sqrt{\mbox{VIWVE}^2 + \mbox{VIWVN}^2} \]
1 | |
Step 2: filter out tropical cyclones
- This can be done using the TC tracks produced above to filter out points within a prescribed distance of each detected TC:
1 | |
Step 3: apply AR mask to northward vapor transport field
- To now investigate AR and non-AR poleward moisture transport, we apply the mask generated in step 2 to the VIWVN field (northward vapor transport). Here we leverage the
VariableProcessorexecutable, which allows us to apply TE's built-in operations on a set of input files.
1 | |
Atmospheric blocking
- Our final example addresses the development of a climatology of atmospheric blocking frequency. Atmospheric blocking events are synoptic-scale weather phenomena characterized by persistent obstruction of the normal westerly flow and are associated with heat waves, cold spells, flooding, and drought.
Step 1: generate the blocking threshold
1 | |
1 | |
1 | |
1 | |
Step 2: identify regions of geopotential above the blocking threshold
1 | |
Step 3: enforce a minimum duration for blocks and build climatology
1 | |
1 | |
**Classification of Low-Pressure Systems (SyCLoPS)
- https://github.com/yepkids/SyCLoPS/tree/main
- Han, Y. and P.A. Ullrich (2025) "The System for Classification of Low-Pressure Systems (SyCLoPS): An all-in-one objective framework for large-scale datasets" J. Geophys. Res. Atm. 130 (1), e2024JD041287, doi: 10.1029/2024JD041287.
The System for classification of Low-Pressure Systems (SyCLoPS) is an all-in-one framework for objective detection and classification of any type of surface low-pressure systems (LPSs) in any large atmospheric dataset and model outputs in one workflow.

1 | |
**MPAS_tempest-extremes
1 | |
References
- Tropical Cyclones analysis with TempestExtremes
- Zarzycki, C. M., Ullrich, P. A., & Reed, K. A. (2021). Metrics for evaluating tropical cyclones in climate data. Journal of Applied Meteorology and Climatology, 60(5), 643-660.
- DiGilio Jr, J. G. (2025). Capturing High-Impact Weather in a Fine-Scale Climate Simulation Using the Model for Prediction Across Scales-Atmosphere (MPAS-A) v 7.0 (Master's thesis, Northern Illinois University).
- Han, Yushan, and Paul A. Ullrich. "The system for classification of low‐pressure systems (SyCLoPS): An all‐in‐one objective framework for large‐scale data sets." Journal of Geophysical Research: Atmospheres 130.1 (2025): e2024JD041287.