Somerset Weather · Hyper-local Forecast

Inside the physics

The main model, our physics forecast (The models), is a small physics model written for this one spot, stepped through night and day in one run: a night half of the grass, the soil and the air above them cooling from sunset to sunrise, and a day half of the sun heating the ground and the mixed layer growing from sunrise to sunset. It is deliberately simple, with a few constants fitted to this station's own minute-by-minute record. This page opens it up: the equations, the constants, tonight's night half step by step, and knobs you can turn.

The night halfVersion 1 of the night physics: one column, a surface skin, a deep soil temperature and one well-mixed air layer, in 5-minute steps from sunset to sunrise. 12 fitted constants, and a 13th (high cloud) held at 0.2.
The day halfA surface energy budget feeding a mixed layer that grows into the morning sounding (encroachment), in 5-minute steps from sunrise to sunset. About 15 fitted constants.
How it is usedRun every hour on the station's computer as the main model, then corrected with the station's record and graded beside our forecast (on trial, L-038). Treatments try one change at a time against it.

The night of Sunday, November 1, rerun in your browser

This is the night run the station computer made at sunset that evening, from the station's reading then and the forecast inputs it had at that hour (the average of the ECMWF and ICON forecasts: cloud by layer, the 10 m wind, and the 925 mb temperature brought down to the station dry-adiabatically). The station's own night is drawn over it, so you can see where the physics went right or wrong, then turn the knobs to see what it would have taken. Turn the knobs and the charts follow.

Low tonight: -
The main model's night half (version 1)

Inputs move tonight's forecast inputs; constants move what was fitted. Nothing here changes the station's forecast. Constants that must stay positive move on a ratio scale (one quarter to four times).

Temperatures: the 2 m air, the grass surface (the model's "skin") and the dew point. The air aloft that the night layer mixes toward is drawn too, or noted at the top when it is far above the others. Once you turn a knob, the run as sent stays as a dotted gray line.

Energy budget: W/m² into the grass surface. At night the net longwave is negative (the ground radiating to the sky). The air, the soil and dew forming pay part of it back. The rest comes out of the heat stored in the skin, which is what cools it.

What cools the air: °F per hour for the 2 m air: heat exchanged with the surface below, mixing with the air aloft, and the change of the air mass aloft (advection). Their sum is the air's cooling rate.

Clouds and wind: cloud cover by layer (%) and the 10 m wind (mph), as the models forecast them, with any knob applied.

Which knobs matter tonight

Each knob nudged on its own, everything else as sent. The bars show how far tonight's low moves. Tonight's weather decides the order: on a clear calm night the sky and the decoupling wind lead, under cloud the cloud factors and soil.

KnobNudgeLow moves

The night half's equations

Time steps of \(\Delta t = 300\) s from sunset (or the latest reading) to sunrise. Three prognostic variables: the surface skin temperature \(T_s\), the 2 m air temperature \(T_a\) and its specific humidity \(q_a\). The deep soil temperature \(T_d\) is held at the 4 and 8 inch probes' reading.

Sky and clouds. Clear-sky emissivity in Brutsaert's form, with cloud filling the gap toward a black body:

$$\begin{gathered}\varepsilon_{clr} = b\left(\frac{e_a}{T_a}\right)^{1/7},\qquad N = k_L c_L + k_M c_M + k_H c_H\\ L^{\downarrow} = \left[\varepsilon_{clr} + (1-\varepsilon_{clr})N\right]\sigma T_a^4\end{gathered}$$
$$R_n = L^{\downarrow} - \varepsilon_s\sigma T_s^4 - (1-\varepsilon_s)L^{\downarrow},\qquad \varepsilon_s = 0.98$$

Turbulent exchange with stability. The 10 m wind is brought to 2 m with a log profile (\(z_0 = 3\) cm) and floored at \(u_{min}\), the decoupling wind. A bulk Richardson number cuts the exchange as the inversion strengthens (a Louis-type function):

$$\begin{gathered}u_2 = \max\!\left(u_{10}\frac{\ln(2/z_0)}{\ln(10/z_0)},\,u_{min}\right)\\ Ri = \frac{g}{T_a}\frac{2\,(T_a-T_s)}{u_2^2},\qquad C_Hu = \frac{c_h\,u_2}{(1+r\,Ri)^2}\end{gathered}$$
$$\begin{gathered}H = \rho c_p\,C_Hu\,(T_s-T_a),\qquad G = k_g\,(T_d - T_s)\\ E = \rho\,C_Hu\,\big(q_a - q_{sat}(T_s)\big)\ \ \text{when } q_{sat}(T_s) < q_a\ \text{(dew or frost)}\end{gathered}$$

The skin has an effective heat capacity \(C_s\) (grass, thatch and the top of the soil), stepped implicitly with the budget linearized in \(T_s\):

$$C_s\frac{dT_s}{dt} = R_n - H + L_vE + G$$

The air is one layer of effective depth \(z_e\). It exchanges heat with the skin, relaxes toward the air aloft \(T_{ref}\) (the 925 mb temperature brought down at \(\Gamma_d = 9.8\) K/km) at a rate that also falls with stability, and takes a share \(\beta\) of any change in the air mass aloft:

$$\begin{gathered}\frac{dT_a}{dt} = \frac{C_Hu}{z_e}(T_s-T_a) + m\,(T_{ref}-T_a) + \beta\frac{dT_{ref}}{dt}\\ m = \frac{a\,u_{10}}{1 + r\,\frac{g}{T_a}\frac{(T_{ref}-T_a)\,z_e}{u_{10}^2}}\end{gathered}$$
$$\frac{dq_a}{dt} = -\frac{E}{\rho z_e} + \frac{dq_{mod}}{dt},\qquad q_a \le q_{sat}(T_a)$$

where \(q_{mod}\) is the models' own 2 m humidity, so the air can dry or moisten with the air mass. The skin starts \(\Delta T_{s0}\) below the air at sunset unless the grass probe gives it. In the main model the half in progress is reset to the station's latest reading at each hourly issue, with the station's departure fading over about three hours; treatments change one term of these equations at a time (what each changes).

SymbolIn the codeWhat it is ValueUnits
These are effective constants for a one-layer column, not measured properties of the field. They trade off against each other in the fit. For example, the clear-sky coefficient \(b\) came out near 1.0, where Brutsaert's derivation gives 1.24. The exchange coefficient \(c_h\) is several times a textbook neutral value at 2 m. The fit lowered the sky's back radiation and strengthened the coupling until the column's cooling curves matched the station's. That is why the model is judged on the station and not on how physical each number looks.

The day model

From sunrise to sunset. The sun heats the ground, a share of that heat goes into the air, and the air near the ground is the bottom of a mixed layer that grows into the morning's temperature profile (the 925, 850 and 700 mb levels, with a shallow surface inversion of depth \(z_{inv}\)).

$$R_n = (1-\alpha)\,S^{\downarrow} - L_0\,(1 - 0.8c_L - 0.5c_M - 0.2c_H)$$

\(S^{\downarrow}\) is the models' forecast sunshine, scaled to this station's solar sensor. The share of the net radiation that heats the air depends on the evaporative fraction, which follows the topsoil moisture and the crop calendar (green corn and beans evaporate most in July):

$$\begin{gathered}H = (1-EF)(1-g)\,R_n\quad (R_n>0)\\ EF = e_a + e_b(\theta_{soil} - 0.30)\\ +\ e_c\left(s - \tfrac12\right) + e_s\,a + \dots\\ s = \tfrac12\left[1+\cos\tfrac{2\pi(d-200)}{365.25}\right],\qquad a = \sin\tfrac{2\pi(d-200)}{365.25}\end{gathered}$$

The heat added since sunrise, increased by a share \(A\) for entrainment, deepens the mixed layer to the height \(h\) where it fills the area between the profile and a dry adiabat:

$$\int_0^h\big[\theta(h)-\theta(z)\big]\,dz = (1+A)\int_{t_0}^{t}\frac{H}{\rho c_p}\,dt$$
$$\begin{gathered}T_2 = \theta(h)\,\Pi + \text{advection}\\ +\ s_x\left(\frac{3}{\max(u_{10},1)}\right)^{w}\left(\frac{H}{300}\right)^{2/3} - \frac{Q_c}{z_{eve}}\end{gathered}$$

The third term is the superadiabatic surface layer, stronger in light wind. The last is the evening cooling once \(R_n\) turns negative. Advection is each level's change since sunrise after its usual daily cycle is removed: \(0.71\,\Delta T'_{925} + 0.02\,\Delta T'_{850} + 0.14\,\Delta T'_{2m}\).

Sunday, November 1's run from the station's sunrise reading (51.6°F at 7:13 AM): the 2 m air against the station, the mixed layer's depth (right scale, feet) and the sensible heat flux. Physics high 67.7°F; the global models' own 2 m high 66.9°F; the mixed layer reached 589 ft; the station's high 68.1°F.

The day as a forecast sounding

Temperature against height above the station: the morning profile the run starts with (dashed: the 925, 850 and 700 mb forecast, with the surface inversion), then the mixed layer every two hours. Each colored line is the air the sun has mixed into a dry adiabat, from the ground up to where it meets the morning profile. That meeting point is the top of the mixed layer, and how high it climbs sets how warm the afternoon gets.

SymbolWhat it isValue
\(\alpha\)Albedo of the field (0.63 under snow)0.20
\(L_0\)Net longwave loss under a clear sky, W/m²48.0
\(g\)Share of the net radiation going into the ground0.15
\(e_a,\ e_b\)Evaporative fraction at 0.30 soil moisture, and its change per unit of soil moisture0.77, 0.39
\(e_c,\ e_s\), second harmonicThe crop calendar: the season's swing in evaporation and its spring and fall lean0.063, -0.021, 0.035, 0.006
\(A\)Entrainment at the top of the mixed layer0.20
\(z_{inv}\)Depth of the morning surface inversion, m220
\(s_x,\ w\)Superadiabatic excess at the surface, °C, and its wind exponent4.65, 0.20
\(c_{night},\ z_{eve}\)Evening: share of the radiative loss taken from the air, and the depth it is spread over, m0.30, 53.9
OffsetThe real-forecast offset (L-020), °F, full through the warm part of the day+0.84

How the constants were fitted, and how the models have done

Fitting. The night constants were fitted on 474 dry nights from March 2024 to September 2025 (the "discovery" months), sunset to sunrise in 5-minute steps against the station's minute record. The loss was the mean squared error of the whole cooling curve plus the squared error of the night's low. The minimizer was Nelder-Mead, with the always-positive constants fitted on a log scale. Inputs for learning were the models' first forecast hours (near-analysis quality). The test year and the newest months were never seen in the fit. The day model was fitted the same way on dry days with Powell's method within physical bounds.

Testing. Every change is written down as a lab test with its plan and pass bar before any scored day, then judged on days the fit never saw, using the forecasts as they were actually issued (not near-analysis inputs).

TestWhat was testedResult
L-007Night low: physics alone, and the rule "ours + 0.25 × (physics − ours)", on 149 test-year nights with real forecast inputs Passed. Mean miss: ours 1.52°F, physics alone 1.80°F, the rule 1.38°F (a gain of 0.14°F, 95% interval 0.05 to 0.23). The rule is live.
L-009Day high from the day physics with forecast clouds Failed. Physics alone 2.08°F against ours 1.46°F on 135 days: forecast clouds were the weak input, worst on cloudier days.
L-020The crop calendar in the evaporative fraction, and the real-forecast offset Passed. 1.59°F against 1.79°F for the earlier day model on 78 days (ours 1.71°F).
L-010Day high: the rule "ours + 0.30 + 0.54 × (physics − ours)", fresh days from October 19, 2026 Closed October 22, 2026 without a verdict: the blend belongs to the structure the main model replaced.
L-026Night version 1G against version 1Running; to be converted into single-change treatments of the main model.
L-032The physics' own chained forecast for days 1 and 2, uncorrected Closed October 22, 2026; its question continues as L-038, the main model with its calibration.
L-038The main model: the physics forecast, corrected with the station's record, beside ours at the same cut-offs Pre-registered; first forecast of record November 1, 2026; judged in May 2027. Treatments L-039 to L-042 beside it.

The live record of every night and day run is on the Physics page. The full research thread, including what did not work, is in the lab notebook.