Why is the city still hot after sunset? Every block is a heat store. Repaint blocks (parks, cool roofs, green roofs) and watch the surface and air temperature change over a full day.
Each button re-runs a three-day spin-up headless on a changed city and reports the last day. Night = 22:00 to 05:00.
The science
Surface energy balance. Each 60 m block has a thin skin (temperature Ts, heat capacity Cs, the top few cm to dm) on top of a deep heat store (Td, Cd, the rest of the pavement, walls and soil), joined by a conductance g: Cs dTs/dt = Kabs + Lnet − H − LE − g (Ts − Td) and Cd dTd/dt = g (Ts − Td). Absorbed sunshine Kabs = (1 − αeff) K↓, with αeff = α (1 − 0.5 (1 − SVF)): tall streets trap light by multiple reflection (illustrative factor). Net longwave Lnet = ε SVF (L↓ − σ Ts⁴), where the sky view factor SVF (1 = open sky, about 0.3 in a deep canyon) cuts the night-time radiative loss. Sensible heat H = hc(Ts − Ta) with hc = 8 + 4 uc W m⁻² K⁻¹ (uc = 0.6 × the 10 m wind). Latent heat LE = fe · wetness · Kabs: a fixed share of absorbed sun is spent evaporating water (parks 0.55, green roofs 0.28, water 0.30, hard surfaces about 0). Sky radiation: Swinbank L↓ = 5.31×10⁻¹⁴ Ta⁶ blended with a black-body cloud base. Solar geometry is exact for latitude 51.5° N; K↓ = 1000 sin(e)1.15(1 − 0.75 c3.4) (Kasten–Czeplak).
Why the city stays hot (storage). Dense materials absorb the afternoon surplus (the conduction term g (Ts − Td) into the deep store) and give it back after sunset as H, at the same time as the SVF-limited radiation can no longer remove it. That is the night heat island. Water has a huge Cd and a large g (mixing) so it lags: cool by day, warm at night.
Air and the heat island. A one-layer canopy air box of depth zh (about 12 m on a still night, up to 32 m in the afternoon, relaxing with a 1.5 h time constant: a shallow stable night layer concentrates the heat) is advected by the wind (first-order upwind scheme) and heated by H plus the anthropogenic heat QF released at the block (cars, air conditioning): ρ cp zh (∂Ta/∂t + u·∇Ta) = H + QF − ρ cp zh (Ta − Trural)/τ, relaxation time τ = 2 h toward the rural air temperature. Air entering the upwind edge has the rural temperature: a diurnal wave with maximum at 15:00 whose night-time cooling is 1.5 times its daytime amplitude (open ground decouples from the air and chills faster; illustrative). Heat-island intensity = mean built-block air temperature − rural air temperature.
Simplifications and honesty. No building shadows between blocks (only the SVF factor), no radiation exchange with walls, no vertical air structure, no humidity feedback, one pair (Cs, Cd, g) per land cover, constant QF, wind constant in time, no soil moisture memory. Values (C, fe, QF, SVF) are typical orders of magnitude from urban climate texts (Oke), not measurements of any particular city: spot-check them before quoting. Assets built with Blender; scene by Three.js.