Water temperature
How the app projects the lake temperature for the days ahead, and how wide the uncertainty is.
In plain words
Water holds a lot of heat, so a lake changes temperature slowly. Day by day it moves toward the air temperature: when the air is colder than the water the lake cools, and the larger the difference, the faster it cools. That is Newton's law of cooling. Wind speeds it up: it mixes the water and carries heat away from the surface faster, so the app lets the rate grow with wind speed.
The model is fitted to Lake St. Clair itself: Selfridge ANGB (KMTC) daily mean air temperature and wind vs NOAA GLSEA daily lake-average temperature, October 2014-2025, n=299 days. Before a plan is built, it carries the latest measured lake temperature forward day by day to the plan's date.
The heat-balance model
: lake-average water temperature on morning , F. : the day's mean air temperature, (high + low) / 2, at Selfridge, F. : the day's mean wind at the shore station, mph. Fitted for Lake St. Clair (lake record):
With a wind of 8 mph, per day: the lake closes 6.0% of the gap between water and air each day. In steady weather half the gap is gone after days. In continuous form this is , with the solution and a time constant days.
The same form, relaxation toward an equilibrium temperature with an exchange coefficient that grows with wind speed, is the equilibrium-temperature method of Edinger, Duttweiler and Geyer (1968). The app uses the daily mean air temperature in place of the equilibrium temperature Working rule: a simplification; the fit absorbs the difference on October days.
Weather for each day
- Days already past: observed highs, lows and wind at Selfridge.
- The next 7 days: the National Weather Service forecast for the shore point.
- After day 7: NOAA 1991-2020 daily normal high and low for Selfridge (station USW00014804) and a wind of 8 mph Starting value: near the October mean at Selfridge (Wind over water). The app labels these days as climatology-driven.
Sensitivity: an error of 1.5 F in the air temperature moves the projection by F on the first day and F after 7 days: the error grows more slowly than 7 times the first day's because the model keeps closing the gap.
Source: SPEC 5.2; reference/python/projection.py and wx_analysis.py. Engine: projectWaterTemp in packages/engine/src/waterTemp.ts.
Golden run
The trip analysis ran the model from 64.346 F on 2026-09-29 with the NWS forecast and then Selfridge normals. The engine reproduces it; largest difference 0.0005 F against a tolerance of 0.01 F (computed now):
| Morning after | Reference (Python) | Engine |
|---|---|---|
| 2026-10-05 | 62.853 F | 62.853 F |
| 2026-10-07 | 61.835 F | 61.835 F |
| 2026-10-09 | 60.962 F | 60.962 F |
| 2026-10-11 | 60.097 F | 60.097 F |
The 80% band
The heat balance gives the central value; history gives the spread. Across 31 years (GLSEA 1995-2025) the Oct 7-11 lake temperature averaged 60.9 F with a standard deviation of 3.9 F. Knowing the temperature on Sept 29 narrows that, by a straight-line fit (least squares) over the same years:
The 80% band is the central value ; is the 90th percentile of the standard normal distribution, so 10% of outcomes fall below the band and 10% above it. Here F. For 2026, with 64.35 F on Sept 29: F (reference run: 57.3-64.5 F).
The app does the same for every day: the 1995-2025 climatology (mean, 10th and 90th percentile for each day of the year) and the regression slope and residual SD for each month and each lag of 1-30 days, computed from GLSEA when the data are loaded. The Water conditions screen shows the projection inside this band.
Source: SPEC 5.2; data/golden/engine_golden.json (regression); reference/python/temps.py. Engine: linearFit, band80, Z80 in waterTemp.ts.
Known bias
The model runs warm in strong wind. A hindcast of Sept 18-29, 2026 was up to 2.6 F warm during a three-day northeast blow and 0.6 F warm at the end (SPEC 5.2). The coefficients were fitted on October days only. Task 1.8 refits and by month on full-year data.
Calculator
Water temperature projection
Runs the app's engine in this browser: projectWaterTemp (packages/engine/src/waterTemp.ts).
Lake St. Clair coefficients (lake record): k0 = 0.0135 per day, kw = 0.0058 per day per mph. Each row is one day of weather; the last column is the lake temperature the next morning. Dates follow the golden run.
| Day | Air high, F | Air low, F | Wind, mph | Lake next morning, F |
|---|---|---|---|---|
| 2026-09-30 | 64.29 | |||
| 2026-10-01 | 64.60 | |||
| 2026-10-02 | 64.32 | |||
| 2026-10-03 | 63.76 | |||
| 2026-10-04 | 63.45 | |||
| 2026-10-05 | 62.85 | |||
| 2026-10-06 | 62.14 |
Table of values
| Days from the start | Lake, each morning | Air, daily mean |
|---|---|---|
| day 0 | 64.3 F | 63.4 F |
| day 1 | 64.3 F | 69.5 F |
| day 2 | 64.6 F | 61.0 F |
| day 3 | 64.3 F | 55.0 F |
| day 4 | 63.8 F | 58.5 F |
| day 5 | 63.4 F | 53.5 F |
| day 6 | 62.9 F | 51.0 F |
| day 7 | 62.1 F | - |
Constants
| Constant | Value | In the code | Basis |
|---|---|---|---|
| Base exchange rate k0 | 0.0135 per day | heat_k0_per_day (lake record) | Fit, 299 October days 2014-2025 (reference/python/wx_analysis.py) |
| Wind term kw | 0.0058 per day per mph | heat_kw_per_day_mph (lake record) | Same fit; task 1.8 refits by month |
| Wind past the forecast | 8 mph | DEFAULT_DAY_WIND_MPH (waterTemp.ts) | Starting value: near the October mean |
| Normal-distribution z for 80% | 1.28 | Z80 (waterTemp.ts) | 90th percentile of the standard normal (1.2816), rounded |
| Regression for Oct 7-11 | 6.55 + 0.844 x; s = 2.79 F | regression (data/golden) | GLSEA 1995-2025, 31 years |
| Normals station | USW00014804 | normals_station (lake record) | NOAA NCEI 1991-2020 daily normals |
Sources
- NOAA GLERL, Great Lakes Surface Environmental Analysis (GLSEA), daily lake-average temperature, 1995-2026.
- Iowa Environmental Mesonet, Selfridge ANGB (KMTC) daily summaries; National Weather Service forecasts; NOAA NCEI U.S. Climate Normals 1991-2020.
- Edinger, J.E., Duttweiler, D.W. and Geyer, J.C. (1968). The response of water temperatures to meteorological conditions. Water Resources Research 4: 1137-1143.
- Links: References.