The Physics of the Woods Hole Tides, Currents, and Winds
Woods Hole exists at the interface of two tidal basins: Buzzard's Bay, and the Vineyard Sound. Buzzards Bay rises and falls with the ocean ties, but Vineyard Sound, fed the long way around the islands, runs at roughly a three hours delay. The Hole to Woods Hole is a narrow strait that feeds between the two. The water-level difference across it routinely exceeds a meter, and the strait often runs at five knots trying to relieve it. As the water rushes, there is often a real downward motion, like a vortex from a childrens book, inside the actual hole, reach leads to an inverse vortex, and bubbling up of water and a smooths surface to the east or west of the hole itself. A real treat to sail on as water rushes normal to the air/water interface rather than any direction along it.
Live data sources:
| source | variable |
|---|---|
| Open-Meteo forecast API, 30 grid points (5 latitudes × 6 longitudes) covering the frame | wind_speed_10m [kn], wind_direction_10m [° from], wind_gusts_10m [kn], hourly, 24 h past to 120 h ahead |
| NWS observations API: stations KFMH (Otis), KMVY (Vineyard airport), KEWB (New Bedford), BUZM3 (Buzzards Bay tower, anemometer 24.8 m) | windSpeed [km/h], windDirection [°], windGust [km/h], timestamp |
| Weather Underground PWS KMAWOODS477, the Woods Hole Yacht Club Davis station on Great Harbor | windSpeed [mph], windGust [mph], winddir [°], temp [°F], station lat/lon |
| NOAA CO-OPS station 8447930 (WHOI dock) | water_level observed [ft MLLW, 6 min], tide predictions [ft, high/low events and 6 min series], water_temperature [°F], air_temperature [°F] |
| NOAA CO-OPS current predictions: COD0911 (the Strait), COD0910, COD0912, COD0913 (Robinsons Hole), COD0915 (Canapitsit), ACT1821, ACT1831 (off Nobska) | signed speed along the station's flood/ebb axis [kn], 6 min series plus max/slack events, one week ahead |
| NOAA CO-OPS Boston 8443970 and New Bedford 8447636 | tide predictions [ft] |
| UMass Dartmouth NECOFS (FVCOM circulation + SWAN wave model), subset over the frame | significant wave height Hs [cm], peak period Tp [0.1 s], mean wave direction [° from], hourly, ~3 days ahead |
| NDBC buoy 44020 (Nantucket Sound) via the IOOS ERDDAP mirror | sea_surface_wave_significant_height [m]. The buoy also reports wind (anemometer 4.1 m) which the map does not yet use. |
| NWS alerts API, marine zones ANZ233 (Vineyard Sound), ANZ234 (Buzzards Bay) | active marine warnings and statements |
Static data sources:
| source | variable | |
|---|---|---|
| NOAA CUDEM 1/9 arc-second topobathymetric lidar (~3 m posts) | seafloor depth h(x) [m below MLLW], land elevation [m], water mask | |
| NOAA ENC electronic chart vectors | shoreline, depth areas, soundings, rocks, wrecks, buoys, lights | the chart layer, drawn from the vectors by this project |
| Basemap-derived land cover | three classes: open/built, woods, water | |
| NOAA harmonic prediction stations, 30 of them from Menemsha to Hyannis Port | range ratio r(x) and phase lag τ(x) of each station's tide relative to Woods Hole | |
| U.S. C&GS Special Publication 208 (Haight 1938) | 39 current stations occupied 1844–1935: flood/ebb directions [° true], speeds [kn], timing in hours on the Boston or New Bedford clock; and the Vineyard Sound Lightship velocity harmonic constants (M₂, M₄ components, 1913) | |
Output of this project's own offline solvers (source in tools/) |
(a) three depth-integrated transport response patterns qi(m)(x) [m²/s] at two tide stages, eq. (3); (b) the shallow-water cycle of the Hole: u, v [m/s] at 24 phases × 3 boundary amplitudes, eq. (6); (c) the wind transfer atlas: speed factor F(x, θ) and deflection [rad] for 36 wind directions |
Notation
Einstein summation notation is used. Spatial indices i, j run over the two horizontal directions, and a repeated index within a product is summed: xiyi denotes the dot product. Sums over other labels (stations, flow modes, tidal constituents) keep an explicit Σ. ∂j ≡ ∂/∂xj. Water density is ρ, gravitational acceleration g, still-water depth h(x), instantaneous depth H = h + η.
Tidal surface elevation η
Prediction of the tide surface elevation η is found via a sum of cosines, one per constituent frequency (Doodson 1921; Schureman 1958). With constituent label a:
Here Ha and κa are the fitted amplitude and phase of constituent a (M₂ is the principal lunar semidiurnal, period 12.42 h; S₂ solar; N₂, K₁, O₁ the next largest); ωa its angular speed; Va the equilibrium argument; fa, ua nodal corrections with the 18.6 year lunar period. The page takes NOAA's evaluation of (1) for today's water levels. It evaluates (1) itself for the tidal currents: each current station carries a baked constituent set fitted against a full year of official predictions (held-out month errors 0.03 to 0.10 kn), so current predictions are computed astronomically in the page, offline, indefinitely; the live NOAA table is shown beside the model in each station popup as a cross-check. The 1913 lightship harmonics of §9 run through (1) the same way.
To the prediction the page adds the observed-minus-predicted residual measured at the WHOI dock. After a strong southwest wind or heavy rain the bay stands higher than the astronomical value, and this measured surplus feeds the waterline, the drying flats, and H everywhere it appears. One station does not fix the spatial pattern, so a baked atlas carries each point's range ratio and lag relative to Woods Hole:
r(x) and τ(x) are interpolated from the 30 NOAA prediction stations of §1, spread through the water by shortest in-water distance so that values do not jump across peninsulas. Measured values run from r ≈ 1.9, τ ≈ −0.3 h on the Buzzards side to r ≈ 0.8, τ ≈ +3 h at Vineyard Haven.
§5Depth-integrated tidal transport
Over most of the frame the current is modeled as depth-integrated transport driven by the surface slope against bottom friction. In steady channel flow the driving stress ρgHS balances the turbulent bottom drag ρCd|u|u, where Si = ∂iη is the slope and Cd ≈ 2.5×10⁻³. This gives |u| = √(gHS/Cd) (the Chézy relation, 1775), so the transport q = uH scales as H3/2. Requiring all transports to be consistent with one smooth surface yields an elliptic problem with depth-dependent conductance:
φ is the surface elevation driving the flow. The right side is the storage flux: water filling a rising bay must arrive through its entrances. Coastlines are no-flux boundaries. The open edges of the frame carry the measured boundary tide of eq. (2) as a Dirichlet condition. The equation is mathematically identical to steady heat conduction through a plate of varying thickness.
Equation (3) is solved offline by successive over-relaxation on two nested grids (115 m cells over the full frame, 12.5 m cells over the Hole) and at two tide stages, because at low water the drying flats leave the conducting network. The regional tide is narrowband, so the boundary data is spanned by the two atlas patterns r cos(ωτ) and r sin(ωτ), and the full solution by three baked responses: the in-phase pattern, the quadrature pattern, and one additional streamfunction mode for the through-flow of the Elizabeth Islands passages (Robinsons, Quicks, Canapitsit), which is a separate degree of freedom. The live field is the superposition
The amplitudes αm(t) are determined each instant by requiring (4) to match the live NOAA current predictions at three stations (the Strait, the Sound off Nobska, Robinsons Hole): a 3×3 linear system Σm Msm αm = vs, where Msm is mode m's baked response along station s's flood axis. Timing and strength come from measurements; the spatial shape comes from the solved physics.
§6The nonlinear shallow-water solve of the Hole
Equation (3) omits the advective inertia uj∂jui. Scale analysis shows where that fails: inertia competes with bottom friction within L ~ H/Cd ≈ 1 km of a constriction. Inside that radius an inflow does not spread like a potential flow; it rides into the basin as a jet, while the outflow drains like a sink. This asymmetry is exactly what one observes at the strait's harbor entrance. The fine box around the Hole is therefore governed by the shallow-water momentum equations, solved offline:
Solved on a staggered (Arakawa C) grid at 12.5 m resolution, time step 0.33 s, upwind advection, lateral mixing Ah = 1 m²/s, semi-implicit quadratic drag, wetting floor 5 cm. The open ring is forced by the same two boundary tide patterns as §5. One M₂ cycle is run for spin-up and a second is recorded at 24 phases. No constant in (5) is fitted; Cd and Ah are standard values.
Because the drag is quadratic the response is nonlinear in the forcing amplitude: in the drag-dominated limit the speed grows as the square root of the boundary amplitude. A single recorded cycle therefore cannot be rescaled linearly for spring and neap tides. The cycle is instead solved at three boundary amplitudes, 0.35, 0.55, and 0.80 m, and stored as a response surface. (The solved strait maxima, 1.25, 1.58, 1.89 m/s, follow the square root law; this is a check of the solver, not an input.) At run time the page indexes this surface with two measured quantities: the phase angle comes from the live calibration amplitudes of eq. (4), and the amplitude coordinate is chosen so that the surface's strait speed matches the peak of the measured strait prediction over the current half cycle. Flood/ebb duration asymmetry and the daily inequality enter automatically, because the measured signal, not an idealized sinusoid, drives the phase. Inside the fine box this cycle replaces the §5 velocities, with a 150 m crossfade at the box edge.
§7From transport to the speed at a hull
A hull rides the water column mean velocity ui = qi/H, with H evaluated at the present tide. Friction also limits what any depth can sustain under a shared surface slope:
which is |u| = √(gHS/Cd) evaluated at the surface slopes the constrictions actually develop (about 10⁻³). A 15 m channel can run five knots; a 1 m margin cannot, regardless of the transport a frictionless solution would route through it.
A wind-driven surface drift is added: 2.5% of the local sheltered 10 m wind, veered 15° to the right, the shallow-water limit of the Ekman balance. It contributes about a quarter knot in ten knots of wind. Where the drift line runs into a nearby shore in both directions the drift is suppressed, since enclosed water cannot sustain net transport.
§8Eddies
Equations (3) and (4) are irrotational and cannot produce the recirculations behind Penzance Point or Devil's Foot. These are carried by a two-dimensional vorticity equation integrated live in the browser:
ω = εij∂iuj is the vertical vorticity; νe an eddy viscosity; r the bottom-friction spin-down rate, increasing with the local speed; S the injection from shoreline shear. The induced velocity is recovered from ∂j∂jψr = −ω and added to the field. The downwelling and upwelling described in the introduction are three-dimensional and outside a depth-integrated model; what the map carries is their surface expression, the jet-edge vorticity.
§9The 1844–1935 current surveys
The Coast and Geodetic Survey occupied hundreds of current stations in these waters between 1844 and 1935. Haight's Special Publication 208 (1938) reduced them to flood and ebb directions, speeds, and timing referenced to Boston or New Bedford tides. Thirty-nine of those stations, including 1931 transects across Quicks Hole and Robinsons Hole, are transcribed into the page, re-keyed daily to the live reference predictions, scaled for springs and neaps, and blended into the field with a Gaussian kernel of width σ = 1.5 km:
ūi(s) is the survey's phase-keyed velocity at station s. As a consistency check, the 1931 mid-Robinsons station (flood 146°, 2.9 kn; ebb 316°, 2.6 kn) agrees with NOAA's present harmonic station in the same water to a few degrees and about 0.2 kn. At the Vineyard Sound Lightship the survey published velocity harmonic constants (1913); these run through eq. (1) directly, rotated from the 1913 magnetic axes (variation 13° W).
§10Wind
The wind field is constructed in four stages: a model background, a regional analysis from marine measurements, exact pinning at village sensors, and a local surface transfer. This is the standard structure of operational meteorology, and the reason for it is stated in the overview: the wind over this frame is set by the synoptic pressure field and by boundary layer processes over scales far larger than the frame, so a local dynamical solve is not possible. Unlike the tide of §3, the interior wind is not determined by values on the domain boundary.
Stage 1: background
The background Wib(x, t) is the Open-Meteo hourly forecast of 10 m wind and gusts, sampled on the 30 point grid of §1 and interpolated linearly in space and time. Open-Meteo is an aggregation API over operational numerical weather prediction models. The map requests the default "best match" selection, which over New England is NOAA's GFS (13 km grid) seamed with the HRRR (3 km grid) at short lead times; ECMWF IFS and DWD ICON are alternative selections that can disagree with it by one to two knots on a given afternoon. The background supplies what point measurements cannot: the spatial structure of the regional wind and its entire time evolution, 24 h past to 120 h ahead, which the timeline and route planner sample.
Stage 2: regional analysis from marine stations
The driving amplitude is constrained by anemometers whose exposure the model can state: the Buzzards Bay tower (height-normalized from 24.8 m to 10 m by the log profile), buoy 44020 (normalized from 4.1 m), and the waterfront village sensors of stage 3, which join through their own solved transfer. Wharf-sited town gauges (Newport, Nantucket) are excluded: they carry town shelter the model cannot resolve, and a sheltered reading averaged into the region drags the whole field low. For each fresh observation the page forms the ratio and rotation against the model at the station, at the observation's own time, including that station's surface transfer,
The innovations are then extended over the frame as the simplest fields consistent with them: the amplitude correction ρ(x) and rotation δθ(x) minimize the Dirichlet energy ∫|∇ρ|² dA, that is, they solve Laplace's equation ∇²ρ = 0, with each station's innovation held at its cell and the pure forecast (ρ = 1) held at the domain edges. There is no length constant and no weighting rule: the geometry of the constraints alone decides how far each measurement reaches, and the maximum principle guarantees the fill never exceeds the range of the measurements. The solve runs in a few milliseconds at each observation refresh. Corrections fade quadratically to zero as the displayed time moves 2.5 h from observation time, returning the field to the pure forecast. Sheltered village sensors are deliberately excluded from this stage: comparing a sheltered reading against the open background and averaging it into the region drags the whole field low, which was the main defect of the previous version. Airport observations are also excluded, since the background models already assimilate them.
Stage 3: exact pinning at village sensors
In-village sensors (the Yacht Club station, and the Tempest stations at Gansett Point and
Mill Pond when a data token is provided) enter as equalities: the displayed field equals the
measurement at the sensor. Each such station has a baked influence patch
Gs(x, θ), the solved response of the surface layer to a unit
velocity anomaly held at the station: the anomaly is carried downwind by the base flow and
relaxes back over the length u/λ with λ = 2(CE|ΔU| +
Cg|u|)/h, a few hundred meters across water and
tens of meters into woods. At refresh the page solves the small linear system that makes the
composed field match every pinned sensor exactly; the physics of the patches decides how far
each sensor's influence reaches. WeatherFlow's API scopes a token to the stations its
account owns, so these two activate only if their owners share a token; a shared token is
stored once in the browser console with
localStorage.setItem('whTempest', 'their-token').
Stage 4: surface transfer
What remains is locally solvable: how the regional 10 m wind maps onto each point of water, given what lies upwind. Over any surface the neutral logarithmic profile holds:
u* is the friction velocity, κv ≈ 0.40 the von Kármán constant, z₀ the roughness length, d the displacement height. Integrating (11) over the first 30 ft gives the layer mean each cover class can deliver, normalized to open water:
| surface | z₀ | d | 0–30 ft layer mean |
|---|---|---|---|
| open water | 0.2 mm (Charnock) | 0 | 1.00 |
| fields / built | 0.4 m | 2 m | 0.39 |
| woods | 1.2 m | 9 m | 0.13 |
Sheltering depends on the upwind direction, so the transfer is precomputed for 36 wind directions at 62 m resolution by solving the steady surface-layer momentum balance over the cover map: uj∂jui = CE|ΔU|ΔUi/h − Cg(x)ui|u|/h + A∂²ui, with the drag Cg per cover class and the entrainment CE both derived from the log profile (11), no fitted constants. Each cell stores the resulting speed factor and flow deflection; wakes, internal boundary layers, and channeling come from the solved flow. The displayed wind is the 0–30 ft layer mean; sea-surface processes (whitecaps, §11) use the standard 10 m speed, related over water by a factor 1.11 from (11).
§11Surface waves
Deep-water gravity waves obey the dispersion relation σ² = gk with group speed cg = ½√(g/k), where σ is the intrinsic frequency and k the wavenumber. On a current Ui the observed frequency is ω = σ + kiUi and wave action E/σ is conserved. Waves propagating against a strengthening current are shortened and steepened, and where the opposing current reaches half the phase speed, kiUi = −σ/2, the group can no longer advance and the energy breaks. This is the Woods Hole rip on an ebb against a southwest wind. The chop field applies an opposition measure built from the same quantities (current against wind, both strong), scaled by the forecast sea state, with an additional standing-wave term where fast flow crosses shallow bars, gated by the Froude number Fr = |u|/√(gH).
The background sea state is the NECOFS/SWAN forecast (Hs, Tp, direction; §1). Its height is bias-corrected by the ratio of the measured significant height at buoy 44020 to the model value there, with full weight at observation time fading to the pure model 12 h out: the same background/analysis structure as §10. Wavelength follows λ = gTp²/2π from the forecast peak period. Whitecap coverage keys to the local sheltered 10 m wind of §10.
Rendering note. A single wave train cannot carry a spatially varying propagation direction: bending the wavevector by an angle field creates closed phase contours, which are topological defects no real sea exhibits. The map therefore renders eight complete plane-wave systems on fixed headings 45° apart, each obeying the dispersion relation, and blends their amplitudes at each point according to the locally solved wind direction. All local physics (fetch limits, depth-limited height, shoaling, finite crest length) enters through the amplitude fields. Near beaches the phase switches to contours of the depth field so that crests arrive parallel to shore, the zeroth order of refraction.
§12Route planner
The planner marches each leg of the drawn route in steps of at most 700 m, sampling every field at the position and time the boat would occupy. The boat is described by a polar v(TWA, TWS), boat speed as a function of true wind angle and speed: measured ORC certificate tables where published (J/24, Catalina 30), otherwise a parametric polar from hull speed 1.34√LWL, sail-area-to-displacement power, and keel type; a custom polar can be drawn by hand. At each step the planner picks the heading that maximizes progress toward the mark,
The maximization over headings θ makes beating upwind and gybing downwind fall out of the polar with no separate rules; ui is the full current of §5 to §8, added as a vector. Legs whose best heading lies more than 25° off the rhumb line are flagged red: they require tacking. The green band on the timeline marks departure to predicted arrival and is recomputed whenever the route, the departure time, or the boat changes.
§13Baked and live, summarized
| computed offline, shipped static | fetched live by the page |
|---|---|
| bathymetry and land rasters (CUDEM, ENC) | tide predictions and observed level (8447930) |
| transport responses A/B/C at two stages, eq. (3) | current predictions (7 stations) |
| shallow-water cycle, 24 phases × 3 amplitudes, eq. (5) | wind background (Open-Meteo) and 5 wind stations |
| wind transfer atlas, 36 directions, eq. (11) | NECOFS wave forecast and buoy 44020 height |
| tide atlas r(x), τ(x), 30 stations, eq. (2) | marine alerts; Boston and New Bedford clocks |
| 1844–1935 survey stations; lightship harmonics; ferry schedules | webcams |
Live responses are cached as they arrive. If the connection is lost the page continues on the last data and reports its age.
§14Known limitations
- The model is depth-integrated and barotropic: no vertical structure, no stratification, and no true downwelling, only its surface vorticity signature.
- The surface drift is a fixed 2.5% of wind at a fixed 15° veer, a stand-in for the full Ekman spiral.
- Exact pinning reaches only as far as each sensor's influence patch (about 1 km); the Yacht Club value pinned is the Weather Underground mirror of the club's Davis station, which reports a longer average than the club's own console display. The Newport and Nantucket anemometer heights are not published and are assumed to be 10 m.
- The wind transfer atlas assumes neutral stability. In stable stratification (warm air over cold water, common here in spring and early summer) land wakes extend farther than the baked decay lengths; in unstable conditions they are shorter.
- The sea breeze is generated by land-sea temperature contrast inside the frame. A multiplicative transfer on a regional background can reduce wind but cannot create it, so days dominated by the local sea breeze are systematically under-predicted unless the background model resolves it.
- The land cover classes derive from basemap colors, not a land-cover survey.
- The planner's polars ignore leeway, sea state, and crew skill; parametric polars for boats without published certificates are estimates from hull specifications.
- Datum conversion uses a single regional NAVD88 to MLLW offset.
- In the far corners of the frame the three response patterns extrapolate shapes calibrated in the interior, and far-field speeds run high by up to a factor of two.
§15References
- F. J. Haight, Currents in Narragansett Bay, Buzzards Bay, and Nantucket and Vineyard Sounds, U.S.C.&G.S. Special Publication 208 (1938), Tables 5, 10–16.
- P. Schureman, Manual of Harmonic Analysis and Prediction of Tides, U.S.C.&G.S. Special Publication 98 (1958).
- A. E. Gill, Atmosphere-Ocean Dynamics, Academic Press (1982), for shallow-water theory and the Ekman layer.
- C. Chen et al., FVCOM, the unstructured-grid model behind NECOFS.
- Linked articles: stream function, Chézy formula, shallow water equations, theory of tides, log wind profile, data assimilation, wave action.