CalVis

How it works

Four forces, one number.

Every visibility forecast is the sum of four physical and biological forces. We compute each one separately, then combine them. The "Why?" panel on each site page tells you which of these four is doing the heaviest lifting right now.

01

Wave-driven turbidity.

When swells reach the seafloor, they stir sediment into the water column and visibility crashes. The relevant variable isn't just wave height — it's the bottom orbital velocity, which depends on wave height, period (longer periods reach deeper), and the local depth. Long-period swells punch deeper than short-period wind chop.

We compute the linear-wave dispersion relation, derive bed shear stress in Pascals using Soulsby's rough-turbulent friction factor, and compare against a sediment-dependent threshold. Each site has an "exposure vector" — an 8-bin compass of how much of each swell direction actually reaches the bottom. La Jolla Cove is wide open to south swell but well-protected from northwest. Carmel is the opposite.

02

Runoff & plume.

After rain, freshwater carrying sediment and dissolved matter pours out of rivers, lagoons, and storm drains. We sum recent rainfall (6h, 24h, 72h), add a "first flush" bonus when rain follows a long dry spell, and pull real-time USGS streamflow gauges. Each runoff source contributes to a site by distance — with an exponential decay length scale tuned per source type — and whether currents are advecting plume water onto the site or away from it.

03

Biological green-water.

Not all reduced visibility is sediment. Sometimes water is biologically productive — phytoplankton blooms, chlorophyll spikes, harmful algal blooms. We pull daily NOAA / NASA satellite ocean colour products (chlorophyll-a and Kd(490), the visible-light attenuation coefficient) and score them as a robust z-score against the seasonal climatology. Cloud cover masks this layer in winter — when that happens, we lower confidence rather than guess.

04

Clearing.

Water doesn't stay bad forever. Once swell drops, sediment settles (the rate depends on grain size and site geometry). Incoming tides flush cleaner offshore water into many sites. Time since the last storm matters. The clearing index is the only one of the four that actively pushes visibility up — the others push it down. We gate it so it can't override an actively-forcing condition.

The math

One badness, one exponential.

B = w1·WRI + w2·plume + w3·green − w4·clearing
V_h = V_max · exp(−B)
Z_secchi ≈ 1 / (2.5 · K_d_min) — Lee et al. (2015)

The P10/P90 spread comes from how much we trust the inputs at each forecast horizon. The confidence score multiplies data freshness factors (waves, rain, satellite ocean colour) by a horizon-decay term. Stale satellite ocean colour, for example, can knock the confidence down by half on its own.

What's next

From physics to ML — once you give us reports.

When we have enough verified diver reports, the hand-tuned weights above get replaced by a LightGBM quantile model. The "Why?" explanations switch their source from coefficients to SHAP values — the UI doesn't change, only the numbers behind it. Until then, the most valuable thing you can do is submit a report when you dive.

References

  • Lee et al. (2015) Secchi depth model — Optics Express 23(13):17107
  • Soulsby (1997) Dynamics of Marine Sands — Thomas Telford
  • NOAA CoastWatch · NASA OB.DAAC · CDIP · NDBC · NOAA CO-OPS · USGS · SCCOOS · CeNCOOS