A season from 1 October to 30 June: snow builds up in layers, warms, ripens, melts, runs off and fills a reservoir that you manage.
Each button runs whole seasons instantly on your device (same random weather, one change) and tabulates the water outcome.
The science
SWE. Snow water equivalent is the depth of water the pack would give if melted: SWE = Σ ρk hk / ρw. Fresh snow at 50-150 kg m⁻³ (here ρnew = 50 + 1.7 (T+15)1.5) is mostly air, so one metre of new snow holds only 5-15 cm of water. The pack is up to 6 layers, each with mass, thickness, temperature and liquid water; layers settle by viscous compaction, η = η₀ exp(0.08 ΔT + 0.021 ρ), and merge when there are too many.
Heat and cold content. Conduction through the layers: ρ ci ∂T/∂t = ∂/∂z (k ∂T/∂z) with k = 2.22 (ρ/1000)1.88 W m⁻¹ K⁻¹, solved implicitly (tridiagonal) so any time step is stable. Cold content CC = Σ m ci (0 − T) must be warmed away (ripening) before meltwater can leave the pack; water that meets a cold layer refreezes and releases Lf = 3.34×10⁵ J/kg. Each layer holds up to 5 % liquid water by mass and passes the rest down.
Melt. Energy balance: Q = (1 − α) S + h (Ta − 0) + Qrain, melt = (Q − G) Δt / Lf, where G is heat conducted into the cold pack, h = 10 W m⁻² K⁻¹ is a bulk longwave + turbulent coefficient and α decays from 0.85 to 0.45 as the surface ages (dust lowers the maximum). Degree-day: M = DDF · max(Ta, 0), DDF about 5 mm °C⁻¹ day⁻¹. Both run side by side.
Basin and reservoir. Five 300 m elevation bands (1700-2900 m) with lapse rate 6.5 K/km and precipitation +5 % per 100 m. Runoff feeds a fast store (K = 30 h) and a slow store (K = 20 d) with exact exponential updates; a small evapotranspiration loss comes from the slow store. Reservoir: dV/dt = Qin − Qrelease − E − Qspill.
Honest limits. One synthetic weather series at a 1500 m station, not a forecast or any real catchment; 1-D layers (no wind drift, no avalanches, no basal ice, no sublimation); the constants (compaction, retention, h, DDF, demands) are illustrative model values; the cut-away uses a compressed 4:1 valley and decorative crystal shapes. Assets built with Blender; scene by Three.js.