# Sounding diagnostics These are calculated forecasts, not observed balloon soundings, official SPC analysis values, or tornado/hail probabilities. Numerical results can differ from SPC because the source model, sounding resolution, parcel routines, surface treatment and storm motion differ. ## Source and preprocessing Open-Meteo NOAA GFS API supplies pressure-level temperature, RH, wind and geopotential height at 25 hPa intervals from 1000 to 100 hPa plus 70 and 50 hPa, plus surface pressure, 2 m temperature/dew point and 10 m winds. The calculation request pins `gfs_global` and disables elevation downscaling (`elevation=nan`) to use provider model terrain rather than a separately requested station elevation. The global GFS feed uses different native resolutions for surface and pressure fields (pressure fields may fall back to GFS025); this is a provider-resolved model sounding, not a native model-column extraction. Those resolution differences are a further source of uncertainty. API hourly interpolation is retained; consecutive hours are not independent native model runs. The API does not identify a precise model initialization time; retrieval time and grid coordinates are shown instead. Pressure levels beneath the model surface are excluded. Near-surface temperature/moisture and 10 m winds represent the base at terrain height. RH is capped at saturation for dew-point conversion. Profiles with missing surface inputs, large vertical gaps, non-monotonic height, or insufficient upper-air coverage are rejected. Small missing levels are excluded and noted. No missing result becomes zero. Zero effective composites are used only when valid parcel calculations diagnose no effective inflow layer. ## Thermodynamics and wind MetPy 1.7.1 calculates lifted parcels and CAPE/CIN. Surface CAPE uses the surface parcel; mixed-layer CAPE/CIN uses the lowest 100 hPa; the MU parcel is selected in the lowest 300 hPa. LCL and the highest resolved MU equilibrium level are mapped from pressure to height by log-pressure interpolation. Bunkers right-moving motion from MetPy is used for SRH. SRH is integrated using height AGL. Fixed-layer shear is the surface-to-6-km wind-vector difference. Effective inflow is the first contiguous set of model parcel levels with CAPE ≥100 J/kg and CIN >−250 J/kg. Its top is the last qualifying level. A single qualifying level is unresolved, not an assumed finite layer. Effective bulk wind difference runs from the effective base to halfway between that base and MU EL. This resolution-dependent layer definition and non-parcel-adjusted Bunkers motion are explicit modeling choices; they do not reproduce SPC's entire analysis pipeline. ## Composite definitions - SCP: MetPy's effective-shear Supercell Composite using MUCAPE, effective SRH and effective bulk shear, including its shear clipping. - Fixed STP: MetPy's fixed-layer Significant Tornado Parameter using SBCAPE, SBLCL, nonnegative right-mover 0–1-km SRH and surface-to-6-km shear. - Effective/CIN STP: Thompson/SHARPpy component normalization and clipping for MLCAPE, ML CIN, ML LCL, effective SRH and effective bulk shear. Set to zero for a diagnosed elevated effective layer. Otherwise require every input; missing EL or unresolved layer gives a gap. - SHIP: the SHARPpy formulation with denominator 42,000,000, MU parcel mixing ratio clipped to 11–13.6 g/kg, shear clipped to 7–27 m/s, and 500-hPa temperature capped at −5.5°C. Apply low-CAPE (<1300), low-lapse-rate (<5.8°C/km), and low-freezing-level (<2400 m MSL) adjustments. The lowest resolved freezing crossing follows the SHARPpy implementation's MSL height convention. This formulation differs from simplified 44,000,000-denominator training summaries. Negative right-moving helicity contributions are clipped to zero for composites, while signed SRH is retained in ingredient graphs. The implementation is designed for the app's US/Northern-Hemisphere context. ## References - [Open-Meteo GFS profile documentation](https://open-meteo.com/en/docs) - [MetPy Supercell Composite](https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.supercell_composite.html) - [MetPy Significant Tornado](https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.significant_tornado.html) - [SHARPpy parameter definitions](https://github.com/sharppy/SHARPpy/blob/master/sharppy/sharptab/params.py) - Thompson et al. (2007), effective SRH and shear, DOI: 10.1175/WAF969.1. - Thompson et al. (2012), effective/CIN STP, DOI: 10.1175/WAF-D-11-00116.1. Runtime: Python service with MetPy. Static hosting alone cannot execute this service; run the included local server or host the Python app separately. Review Open-Meteo's non-commercial free-access terms before commercial deployment. ## Additional instability diagnostics Downdraft CAPE uses MetPy downdraft_cape: find the lowest equivalent potential temperature in the 700–500 hPa layer, initialize at environmental wet-bulb temperature, and descend saturated to the model surface. DCAPE is an energy diagnostic, not a wind-gust conversion. If the required layer is unavailable, the graph contains a gap. Two 0–3 km CAPE series explicitly identify the parcel: surface and lowest-100-hPa mixed layer. Both use the original model height column to interpolate the exact 3000 m AGL pressure boundary in log pressure. The environmental endpoint is inserted, MetPy lifts the selected parcel with an explicit LCL level, and virtual-temperature-corrected MetPy CAPE/CIN integration is restricted to that boundary. Mixed-layer environment preprocessing follows MetPy mixed_layer_cape_cin. No resolved LFC in the layer gives a genuine zero; a missing 3-km height span gives a gap. These inherit MetPy's LFC/EL integration convention and should not be assumed numerically identical to SPC's RAP-based implementation. Reference: https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.downdraft_cape.html and https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.cape_cin.html