KABQ radiosonde, 2025-07-15 00Z
A real observed sounding from the Albuquerque, NM upper-air station (KABQ). Posted in NumericalEarth/Breeze.jl#672 by @willoughby-convective.
This example is mostly a sanity check that real-world data flows through the parser unchanged.
using LegacyConnectors
using Breeze
using CairoMakie
sounding = Sounding(:kabq_radiosonde)Sounding(input_sounding, 96 z-cells, p_sfc=839.0 mb, θ_sfc=322.74 K, qᵛ_sfc=6.0 g/kg)Surface state and the "elevated surface" gotcha
KABQ sits at about 1620 m above sea level, so the surface pressure in the file (~839 mb) is well below 1000 mb even though the level block starts a few hundred metres further up:
(p_sfc_mb = sounding.surface_pressure / 100,
first_level_z_AGL = znodes(sounding.potential_temperature)[2])(p_sfc_mb = 839.0, first_level_z_AGL = 210.0)The z column in input_sounding is above ground level (AGL), not MSL. That convention is what lets one parser handle high-altitude stations like KABQ and sea-level stations identically — no per-file offset bookkeeping needed.
Plot the profile
Each sounding.<long_name> is a Field{Nothing, Nothing, Face} on a column grid; Oceananigans' Makie ext handles them directly.
fig = Figure(size = (900, 400))
ax_θ = Axis(fig[1, 1]; xlabel = "θ (K)", ylabel = "z (m AGL)",
title = "KABQ radiosonde 2025-07-15 00Z")
ax_qᵛ = Axis(fig[1, 2]; xlabel = "qᵛ (g/kg)", ylabel = "z (m AGL)")
ax_w = Axis(fig[1, 3]; xlabel = "wind (m/s)", ylabel = "z (m AGL)")
lines!(ax_θ, sounding.potential_temperature)
lines!(ax_qᵛ, sounding.specific_humidity * 1000)
lines!(ax_w, sounding.x_momentum; label = "u")
lines!(ax_w, sounding.y_momentum; label = "v")
axislegend(ax_w; position = :rb)
figA couple of qualitative features worth noting: the moisture profile dries out rapidly above ~5 km AGL, and the wind backs from southerly at the surface to westerly aloft — consistent with summer afternoon storms drawing on Gulf moisture in a southwesterly jet.