Waves
How the app estimates wave height and period at each area and on the run to it, and how far to trust the numbers.
In plain words
Wind pushing on water builds waves. Three things set how big they get: the wind speed, the fetch (the distance of open water the wind has blown across) and the depth. Time matters too: waves need some hours of steady wind to grow. The models below give the height for a wind that has blown long enough to reach full growth over its fetch, the cautious case after a wind change.
Lake St. Clair is shallow; the trip analysis gives an average depth of 11 ft (SPEC 17). Waves feel the bottom where the water is shallower than about half their crest spacing; the bottom then takes energy from them and stops their growth. That is why a long fetch here builds short, steep chop rather than large swells.
Waves passing a point are not all the same height. The app, like the National Weather Service marine forecast, gives the significant wave height : the average of the highest third of the waves, close to what an observer judges by eye. Individual heights follow a Rayleigh distribution: the chance that a given wave is higher than is . In about an hour some 1,000 waves pass (one every 3.5 s), and the largest of 1,000 is typically times , shown as 1.86. Put the other way: a wave of 1.86 × has a chance of , about 1 in 1,012. The app shows this largest wave in about an hour beside every .
Fetch and depth
Fetch at an area: from the area's position the app steps 0.1 km at a time toward the direction the wind comes from until the next step leaves the lake outline, up to 80 km. It does this for 36 directions (10 degree steps) once, when the data are loaded, and interpolates between them for any wind direction. The outline is the USGS National Hydrography Dataset shoreline (task 1.7).
Positions are projected onto a flat grid in km around the lake record's origin:
Depth at an area: the mean of its depth range, converted to m and kept within 2.0-4.5 m (6.6-14.8 ft). On the run from the launch the app uses 4.5 m. The run is the straight line from the launch to the area, checked at 39 points (40 segments); the route's wave height is the largest of them. Working rule: a straight run; boats often follow the shore
The two models
Both models are fits to measured wave growth in shallow water. They take the wind speed (m/s, at 10 m height), fetch (m) and depth (m), with .
Shore Protection Manual (1984)
The U.S. Army Corps of Engineers' shallow-water forecasting equations. They first adjust the wind speed (the manual's wind stress factor):
The first tanh term (, ) is the depth limit; the second grows with fetch. As the fetch gets long the second term reaches 1 and the height stops at : at 20 mph that limit is 2.5 ft at 13 ft depth and 1.5 ft at 2.0 m (6.6 ft).
Source: U.S. Army Corps of Engineers (1984), Shore Protection Manual, chapter 3. Engine: spmWaves in packages/engine/src/waves.ts.
Young and Verhagen (1996)
Fitted to wave measurements on Lake George, a shallow lake in Australia. In dimensionless form:
Source: Young and Verhagen (1996), Coastal Engineering 29. Engine: hsYoungVerhagen_ft in packages/engine/src/waves.ts.
Which one the app uses
The app uses the Shore Protection Manual for every decision, because it gives the higher heights here, and keeps Young and Verhagen for comparison. Over 30 km of fetch at 4 m depth the gap is 6% to 16% (computed now by the engine):
| Over-water wind | SPM Hs | Young and Verhagen Hs | SPM higher by |
|---|---|---|---|
| 10 mph | 1.00 ft | 0.94 ft | 6% |
| 15 mph | 1.59 ft | 1.41 ft | 12% |
| 20 mph | 2.10 ft | 1.83 ft | 15% |
| 25 mph | 2.56 ft | 2.21 ft | 16% |
| 30 mph | 2.97 ft | 2.57 ft | 15% |
Wave heights are model estimates from forecast wind, not measurements, and actual waves can be 25% or more higher. Check the marine forecast and the water at the launch before you go. The decision to go out is yours. Accuracy and your responsibility
Worked example: 20 mph over 30 km at 13 ft
The trip analysis example (SPEC 17), step by step with the engine's constants:
The engine's spmWaves(20, 30, 3.9624) gives 2.09 ft and 3.19 s, the same values. Young and Verhagen give 1.82 ft.
Wave period and crest spacing
The period is the time between crests passing a fixed point. The spacing of the crests (the wavelength ) follows from the period and the depth by linear wave theory:
At : 52 ft in deep water, 49 ft at 13 ft, where the shallow bottom slows the waves and crowds the crests together (SPEC 17: about 49 ft). Crests 2.1 ft high every 49 ft make a steep chop. This is a page calculation for explanation; the plan does not use crest spacing.
Source: Shore Protection Manual (1984), chapter 2 (small-amplitude wave theory).
Wave classes and the crossing rule
Each modeled gets a class against your wave limit (set in Setup):
| Class | Rule | Effect |
|---|---|---|
| Calm | Hs up to 0.5 ft | In the plan; full shelter score |
| Fishable | 0.5 ft to 1.0 ft | In the plan; full shelter score |
| Workable | 1.0 ft to 2.0 ft, and within L | In the plan; the shelter score falls toward 0 at L |
| Rough | Over 2.0 ft, within L | In the plan with the wave caution, which states Hs and Hmax |
| Over the limit | Over L | The area leaves the plan (reason: waves); with Override all limits on in Setup, it stays as a red card |
Default wave limits by boat, which you can change: Deep-V, 19 ft or longer 2.0 ft; Deep-V, shorter than 19 ft 1.5 ft; Bass boat 1.5 ft; Other 1.0 ft. Working rule: a deep-V shorter than 19 ft gets the bass boat limit
The crossing rule applies to runs across open water: the over-water wind must stay under 15 mph during your hours, the route's must be within your limit, and no small craft advisory may be in effect. You may make the wind limit lower in Setup, not higher. The Scoring page lists every limit.
Calculator
Wave height from wind, fetch and depth
Runs the app's engine in this browser: spmWaves, hsYoungVerhagen_ft, hmax_ft, classifyWaves (packages/engine/src/waves.ts).
The wind is the over-water wind at 10 m height. For an area the app uses the mean of its depth range, kept within 2.0-4.5 m (6.6-14.8 ft); this calculator takes the depth as entered. Crest spacing is from linear wave theory and is not used by the plan.
Table of values
| Fetch, km | Shore Protection Manual | Young and Verhagen |
|---|---|---|
| 0 km | 0.0 ft | 0.0 ft |
| 5 km | 1.1 ft | 1.0 ft |
| 10 km | 1.5 ft | 1.3 ft |
| 15 km | 1.7 ft | 1.5 ft |
| 20 km | 1.9 ft | 1.6 ft |
| 25 km | 2.0 ft | 1.7 ft |
| 30 km | 2.1 ft | 1.8 ft |
| 35 km | 2.2 ft | 1.9 ft |
| 40 km | 2.2 ft | 1.9 ft |
| 45 km | 2.2 ft | 2.0 ft |
| 50 km | 2.3 ft | 2.0 ft |
Constants
| Constant | Value | In the code | Basis |
|---|---|---|---|
| Largest wave in about an hour / Hs | 1.86 | HMAX_OVER_HS (waves.ts) | Rayleigh distribution, N = 1000 waves: sqrt(ln N / 2) = 1.8585 |
| SPM coefficients | 0.71, 1.23; 0.283, 0.53, 0.75, 0.00565, 0.5; 7.54, 0.833, 0.375, 0.0379, 1/3 | SPM (waves.ts) | Shore Protection Manual (1984), chapter 3 |
| Young-Verhagen coefficients | 0.493, 0.75, 0.00313, 0.57, 0.00364, 1.74, 4 | YV (waves.ts) | Young and Verhagen (1996) |
| Gravity | 9.81 m/s² | G_M_S2 (units.ts) | Standard value, as in the reference scripts |
| Wave class limits | 0.5, 1.0, 2.0 ft | CALM_MAX_FT, FISHABLE_MAX_FT, WORKABLE_MAX_FT (waves.ts) | SPEC 5.5 classes |
| Fetch step | 0.1 km | FETCH_STEP_KM (geo.ts) | Reference script area_waves.py |
| Fetch cap | 80 km | fetch_cap_km (lake record) | Longer than any fetch on Lake St. Clair |
| Fetch directions | 36 | fetch_directions (lake record) | Task 1.7 |
| Wave depth at areas | 2.0-4.5 m | depth_clamp_min_m, depth_clamp_max_m (lake record) | Working rule: clamp of the area depth range mean |
| Wave depth on the run | 4.5 m | route_depth_m (lake record) | Working rule: open-lake depth on the run |
| Route check points | 40 segments | route_segments (lake record) | Reference script area_waves.py |
| Projection scales | 111.32, 110.57 km per degree | KM_PER_DEG_LON_AT_EQUATOR, KM_PER_DEG_LAT (geo.ts) | Local flat projection, reference script area_waves.py |
| Crossing wind limit | 15 mph | CROSSING_WIND_LIMIT_MPH (packages/shared) | Safety default (SPEC 5.5); users may lower it |
Wave height estimates: accuracy and your responsibility
CastScience estimates wave height from the forecast wind over the water, the distance of open water upwind (fetch) and the water depth, using the U.S. Army Corps of Engineers Shore Protection Manual (1984) method. The figure shown is the significant wave height: the average of the highest third of the waves. The largest wave in about an hour is typically 1.86 times that figure.
These are estimates, and they have not yet been checked against measured waves on this lake. Known sources of error:
- Forecast wind: a wind 3 mph stronger than forecast raises wave height 13 to 20%.
- Wind over water: the over-water wind is estimated from land forecasts with a factor that is still an assumption. Using 1.3 instead of 1.2 raises wave height about 8%.
- Method: two standard methods give heights 6 to 16% apart at these depths and distances.
- Not modeled: gusts, sudden wind shifts, boat and ship wakes, waves reflected from breakwalls and seawalls, and steeper waves where current runs against the wind, such as at river mouths and in shipping channels.
Combined, actual waves can be 25% or more higher than shown.
Before and during every trip:
- Read the current National Weather Service marine forecast for your area and check for a small craft advisory.
- Check recent buoy or shore observations where they exist.
- Look at the water at the launch, and keep watching it. Conditions can change within an hour, especially when a front passes.
- Know your boat, its load and your experience.
The decision to go out, where to go and when to come back is the boat operator's. CastScience provides estimates to help plan, not a judgment that conditions are safe.
Sources
- U.S. Army Corps of Engineers (1984). Shore Protection Manual, chapters 2 and 3.
- Young, I.R. and Verhagen, L.A. (1996). The growth of fetch limited waves in water of finite depth. Coastal Engineering 29: 47-78.
- Longuet-Higgins, M.S. (1952). On the statistical distribution of the heights of sea waves. Journal of Marine Research 11: 245-266.
- Reference implementation:
reference/python/waves.py; golden values indata/golden/engine_golden.json. Full list: References.