CastScience

Science Info and Calculations

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.

Wind UFetch F: open water upwind of the areaareaHLdbottomland
Waves grow with wind speed U and fetch F; depth d limits them. H: wave height, crest to trough; L: crest spacing. Not to scale.

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 HsH_s: 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 HH is e−2(H/Hs)2e^{-2(H/H_s)^2}. In about an hour some 1,000 waves pass (one every 3.5 s), and the largest of 1,000 is typically ln⁡1000/2=1.8585\sqrt{\ln 1000 / 2} = 1.8585 times HsH_s, shown as 1.86. Put the other way: a wave of 1.86 × HsH_s has a chance of e−2×1.862=0.00099e^{-2 \times 1.86^2} = 0.00099, about 1 in 1,012. The app shows this largest wave in about an hour beside every HsH_s.

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:

x=(lon+82.7)×111.32cos⁡(42.45∘)x = (\text{lon} + 82.7) \times 111.32 \cos(42.45^\circ)
y=(lat−42.45)×110.57y = (\text{lat} - 42.45) \times 110.57

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 UU (m/s, at 10 m height), fetch FF (m) and depth dd (m), with g=9.81 m/s2g = 9.81\ \text{m/s}^2.

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):

Adjusted wind speed, m/s
UA=0.71 U1.23U_A = 0.71\, U^{1.23}
Significant wave height
a=tanh⁡[0.53(gdUA2)0.75]a = \tanh\left[0.53 \left(\frac{g d}{U_A^2}\right)^{0.75}\right]
Hs=0.283 atanh⁡[0.00565a(gFUA2)0.5]UA2gH_s = 0.283\, a \tanh\left[\frac{0.00565}{a} \left(\frac{g F}{U_A^2}\right)^{0.5}\right] \frac{U_A^2}{g}
Wave period
b=tanh⁡[0.833(gdUA2)0.375]b = \tanh\left[0.833 \left(\frac{g d}{U_A^2}\right)^{0.375}\right]
T=7.54 btanh⁡[0.0379b(gFUA2)13]UAgT = 7.54\, b \tanh\left[\frac{0.0379}{b} \left(\frac{g F}{U_A^2}\right)^{\tfrac{1}{3}}\right] \frac{U_A}{g}

The first tanh term (aa, bb) is the depth limit; the second grows with fetch. As the fetch gets long the second term reaches 1 and the height stops at 0.283 a UA2/g0.283\, a\, U_A^2/g: 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:

δ=gdU2,χ=gFU2\delta = \frac{g d}{U^2}, \quad \chi = \frac{g F}{U^2}
A1=0.493 δ0.75,B1=3.13×10−3 χ0.57A_1 = 0.493\, \delta^{0.75}, \quad B_1 = 3.13 \times 10^{-3}\, \chi^{0.57}
Wave energy (dimensionless) and significant wave height
ε=3.64×10−3[tanh⁡A1tanh⁡(B1tanh⁡A1)]1.74\varepsilon = 3.64 \times 10^{-3} \left[\tanh A_1 \tanh\left(\frac{B_1}{\tanh A_1}\right)\right]^{1.74}
Hs=4ε U2gH_s = 4 \sqrt{\varepsilon}\, \frac{U^2}{g}

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 windSPM HsYoung and Verhagen HsSPM higher by
10 mph1.00 ft0.94 ft6%
15 mph1.59 ft1.41 ft12%
20 mph2.10 ft1.83 ft15%
25 mph2.56 ft2.21 ft16%
30 mph2.97 ft2.57 ft15%

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:

U=20 mph×0.44704=8.94 m/sU = 20\ \text{mph} \times 0.44704 = 8.94\ \text{m/s}
UA=0.71×8.941.23=10.51 m/sU_A = 0.71 \times 8.94^{1.23} = 10.51\ \text{m/s}
d=13 ft×0.3048=3.96 md = 13\ \text{ft} \times 0.3048 = 3.96\ \text{m}
gdUA2=0.352,gFUA2=2,666\frac{g d}{U_A^2} = 0.352, \qquad \frac{g F}{U_A^2} = 2{,}666
a=0.238,Hs=0.637 m=2.1 fta = 0.238, \qquad H_s = 0.637\ \text{m} = 2.1\ \text{ft}
b=0.510,T=3.2 sb = 0.510, \qquad T = 3.2\ \text{s}
Hmax≈1.86×2.09=3.9 ftH_{max} \approx 1.86 \times 2.09 = 3.9\ \text{ft}

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 TT is the time between crests passing a fixed point. The spacing of the crests (the wavelength LL) follows from the period and the depth by linear wave theory:

ω2=gktanh⁡(kd),ω=2πT,k=2πL\omega^2 = g k \tanh(k d), \qquad \omega = \frac{2\pi}{T}, \quad k = \frac{2\pi}{L}
deep water: L0=gT22π\text{deep water: } L_0 = \frac{g T^2}{2\pi}

At T=3.2 sT = 3.2\ \text{s}: 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 HsH_s gets a class against your wave limit LL (set in Setup):

ClassRuleEffect
CalmHs up to 0.5 ftIn the plan; full shelter score
Fishable0.5 ft to 1.0 ftIn the plan; full shelter score
Workable1.0 ft to 2.0 ft, and within LIn the plan; the shelter score falls toward 0 at L
RoughOver 2.0 ft, within LIn the plan with the wave caution, which states Hs and Hmax
Over the limitOver LThe 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 HsH_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).

Significant wave height Hs (SPM)2.1 ft (largest about 3.9 ft)
i
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. Full text
Caution: waves may be higher than 2 ft. Forecast significant wave height for these inputs: 2.1 ft (average of the highest third). Largest wave in about an hour: 3.9 ft.
Wave period3.2 s
Class against your limitOver limit
Young and Verhagen Hs1.8 ft (SPM higher by 15%)
Crest spacing (page calculation)49 ft
Depth limit at this wind (any fetch)2.5 ft

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
Significant wave height against fetch at 20 mph and 13 ft depth
Fetch, kmShore Protection ManualYoung and Verhagen
0 km0.0 ft0.0 ft
5 km1.1 ft1.0 ft
10 km1.5 ft1.3 ft
15 km1.7 ft1.5 ft
20 km1.9 ft1.6 ft
25 km2.0 ft1.7 ft
30 km2.1 ft1.8 ft
35 km2.2 ft1.9 ft
40 km2.2 ft1.9 ft
45 km2.2 ft2.0 ft
50 km2.3 ft2.0 ft

Constants

ConstantValueIn the codeBasis
Largest wave in about an hour / Hs1.86HMAX_OVER_HS (waves.ts)Rayleigh distribution, N = 1000 waves: sqrt(ln N / 2) = 1.8585
SPM coefficients0.71, 1.23; 0.283, 0.53, 0.75, 0.00565, 0.5; 7.54, 0.833, 0.375, 0.0379, 1/3SPM (waves.ts)Shore Protection Manual (1984), chapter 3
Young-Verhagen coefficients0.493, 0.75, 0.00313, 0.57, 0.00364, 1.74, 4YV (waves.ts)Young and Verhagen (1996)
Gravity9.81 m/s²G_M_S2 (units.ts)Standard value, as in the reference scripts
Wave class limits0.5, 1.0, 2.0 ftCALM_MAX_FT, FISHABLE_MAX_FT, WORKABLE_MAX_FT (waves.ts)SPEC 5.5 classes
Fetch step0.1 kmFETCH_STEP_KM (geo.ts)Reference script area_waves.py
Fetch cap80 kmfetch_cap_km (lake record)Longer than any fetch on Lake St. Clair
Fetch directions36fetch_directions (lake record)Task 1.7
Wave depth at areas2.0-4.5 mdepth_clamp_min_m, depth_clamp_max_m (lake record)Working rule: clamp of the area depth range mean
Wave depth on the run4.5 mroute_depth_m (lake record)Working rule: open-lake depth on the run
Route check points40 segmentsroute_segments (lake record)Reference script area_waves.py
Projection scales111.32, 110.57 km per degreeKM_PER_DEG_LON_AT_EQUATOR, KM_PER_DEG_LAT (geo.ts)Local flat projection, reference script area_waves.py
Crossing wind limit15 mphCROSSING_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 in data/golden/engine_golden.json. Full list: References.