Spectral Filtering Accuracy

PyStormTracker supports multiple backends for spherical harmonic transforms (SHT) used in spectral filtering and kinematic derivative calculations. The choice of engine can be controlled via the sht_engine parameter in the Python API.

Methodology

Accuracy is evaluated using Root Mean Square Error (RMSE), Relative Error, and Pearson Correlation Coefficient for ERA5 Mean Sea Level Pressure (MSL) and Wind (U/V) data.

Two spatial resolutions are tested:

  • 2.5°x2.5°: A low-resolution grid (73x144) where T42 truncation (requiring ~85 latitudes) results in aliasing.

  • 0.25°x0.25°: A high-resolution grid (721x1440) where T42 truncation is alias-free.

SHT Engines

1. ducc0 (Default)

ducc0 is the standard backend for PyStormTracker. It is a high-performance C++ library that provides excellent multi-frame performance and bit-wise parity with modern SHT implementations.

  • Pros: Extremely fast, robust, and handles aliased coarse grids gracefully. No external C dependencies (self-contained).

  • Cons: Slightly less accurate than specialized legacy libraries like SHTns on specific high-resolution scalar fields.

2. SHTns (Legacy Reference)

SHTns was the primary backend in earlier versions. While no longer the default, its performance metrics serve as a high-precision benchmark for scalar filtering.

  • Pros: Exceptional accuracy on high-resolution alias-free grids for scalar fields.

  • Cons: Slower than ducc0 for multi-frame workloads. Requires complex external C compilation. Significant numerical discrepancy (~10⁻⁶ RMSE) in kinematic derivative calculations compared to Spherepack (NCL).

Accuracy & Performance Metrics

Spectral Filtering (MSL)

Cross-Engine Accuracy (vs NCL Reference)

Resolution: 2.5°x2.5° (ERA5) Note: Higher error in this resolution is primarily due to aliasing on the coarse grid.

Engine

Truncation

RMSE (Pa)

Rel. Error

Correlation

Time (s)

SHTns

T5-42

0.45711949

6.40e-04

0.999999897272

0.0350

ducc0

T5-42

0.05266872

7.37e-05

0.999999998663

0.0030

SHTns

T0-42

0.45729944

4.53e-06

0.999999918845

0.0009

ducc0

T0-42

0.05369308

5.31e-07

0.999999998880

0.0019

Resolution: 0.25°x0.25° (ERA5) Note: This resolution satisfies the sampling theorem for T42, resulting in near-perfect parity.

Engine

Truncation

RMSE (Pa)

Rel. Error

Correlation

Time (s)

SHTns

T5-42

0.00003643

5.16e-08

1.000000000000

0.0665

ducc0

T5-42

0.01276583

1.81e-05

0.999999999928

0.0041

SHTns

T0-42

0.00486497

4.81e-08

0.999999999994

0.0141

ducc0

T0-42

0.02114745

2.09e-07

0.999999999831

0.0038

Kinematic Derivatives (Vorticity & Divergence)

Evaluated on 0.25°x0.25° ERA5 grid. Comparison against NCL uv2vrdvF reference.

Engine

Variable

RMSE (s⁻¹)

Correlation

Time (s)

SHTns

Vorticity

9.05e-06

0.9899

0.1017

ducc0

Vorticity

1.74e-14

1.0000

0.0576

Impact of Polar Optimization (SHTns)

For high-resolution grids (0.25°), disabling the polar optimization threshold (polar_opt=0.0) ensures maximum precision. A comparison with the default setting (1e-10) shows:

  • Accuracy: RMSE difference is negligible (~10⁻¹⁵ Pa).

  • Performance: The default setting is approximately 1.25% faster.

Disabling the optimization is recommended for cases where strict bit-wise parity with double-precision ground truth is required.

Summary

For standard storm tracking applications, all engines are scientifically equivalent. ducc0 is the recommended default for its balance of speed, robustness, and ease of installation. It also provides the highest parity with legacy Spherepack references for kinematics. SHTns (with polar_opt=0.0) remains a high-precision benchmark for scalar fields, though it was passed over as the primary engine due to its numerical discrepancies in derivative calculations compared to standard meteorological tools.