Wave Orbital Velocity — uorb¶
Significant horizontal wave orbital velocity at any height above the seabed (or depth below the surface), computed from integrated spectral parameters using the monochromatic peak-period approximation (Soulsby 1997).
Governing equation¶
The horizontal orbital velocity at height z above the seabed in water of depth h is:
where k is the angular wavenumber satisfying the linear dispersion relation ω² = g k tanh(kh) with ω = 2π/T.
At the seabed (z = 0, the default), cosh(0) = 1 and the formula reduces to the classical near-bed form used in sediment-transport and bed-shear-stress models:
This is exact for a monochromatic wave of height Hs propagating in depth h (Soulsby 1997, eq. 2.44).
Parameters¶
| Parameter | Default | Description |
|---|---|---|
hs |
"hs" |
Significant wave height variable name (m) |
tp |
"tp" |
Representative wave period variable name (s) |
depth |
"depth" |
Water depth variable name (m, positive downward) or scalar |
z |
0.0 |
Position in metres — variable name or scalar. Interpretation set by reference. |
reference |
"bed" |
Reference datum for z: "bed" = height above seabed, "surface" = depth below surface |
g |
9.81 |
Gravitational acceleration (m/s²) |
solver |
"explicit" |
Dispersion solver: "explicit" or "exact" |
Depth profiles and reference datum¶
The reference parameter controls how z is interpreted:
reference: 'bed'(default) —zis height above the seabed.z = 0is the seabed, the standard input for sediment-transport and bed-shear-stress models.reference: 'surface'—zis depth below the still-water surface.z = 0is the surface. Internally converted asz_bed = depth − z, so spatially varying bathymetry is handled automatically.
calls:
- func: mean
data_vars: [uorb_bed, uorb_1m, uorb_10m]
derived_vars:
- name: uorb_bed
func: uorb
z: 0.0
reference: bed # seabed (default)
- name: uorb_1m
func: uorb
z: 1.0
reference: bed # 1 m above bed
- name: uorb_10m
func: uorb
z: 10.0
reference: surface # 10 m below the surface
The reference: 'surface' form is particularly convenient when you have a moored instrument or fixed platform at a known depth regardless of local bathymetry.
Choice of representative period¶
The result is sensitive to the choice of T. Wave models typically output the peak period T_p. For improved accuracy, the mean zero-upcrossing period T_z = √(m₀/m₂) is preferred because it weights all spectral components more evenly. Conversion factors for common spectral shapes (Soulsby 1997, Table 2.1):
| Spectral shape | T_z / T_p |
|---|---|
| JONSWAP (γ = 3.3, typical wind sea) | ≈ 1/1.28 |
| Pierson–Moskowitz (fully developed) | ≈ 1/1.05 |
If only T_p is available, pre-compute T_z as a separate derived variable before calling uorb.
Dispersion solvers¶
Two dispersion-relation solvers are available via the solver parameter:
'explicit' (default) — Chen & Thomson (1993) polynomial approximation:
Maximum error < 0.2 % across all depth regimes — negligible compared with Hs/Tp uncertainties (typically ≥ 5–10 %). Implemented as pure xarray/numpy ufuncs: no apply_ufunc, fully dask-transparent, ~40× fewer FLOPs than the iterative solver. Recommended for all production runs.
'exact' — Newton-Raphson iteration to full float64 machine precision. The Python loop is confined inside a numpy function dispatched by apply_ufunc, so the dask graph stays flat. Use for validation or sensitivity studies.
Numerical stability¶
The transfer function cosh(kz)/sinh(kh) is evaluated in the equivalent form:
This avoids float64 overflow for large kh (sinh overflows for kh ≳ 710) while remaining exact across all depth regimes. At large kh the numerator approaches exp(−k(h−z)), recovering the familiar exponential decay of orbital motion in deep water.
Accuracy and limitations¶
This formula is exact for a single sinusoidal wave. For a random sea, Wiberg & Sherwood (2008) show the true RMS near-bed orbital velocity (from spectral integration) can differ from the monochromatic approximation by 10–30 %, depending on spectral shape and relative depth. When the full variance spectrum S(f) is available, the spectral integral formulation is preferred:
References¶
- Soulsby, R. L. (1997). Dynamics of Marine Sands. Thomas Telford, London. — Near-bed orbital velocity (eq. 2.44) and period conversion factors (Table 2.1).
- Wiberg, P. L., & Sherwood, C. R. (2008). Calculating wave-generated bottom orbital velocities from surface-wave parameters. Computers & Geosciences, 34, 1243–1262. https://doi.org/10.1016/j.cageo.2008.02.010
- Nielsen, P. (1992). Coastal Bottom Boundary Layers and Sediment Transport. World Scientific. — Near-bed wave kinematics.
- Chen, G., & Thomson, J. (1993). A two-dimensional model of wave transformation in shallow water. Ocean Engineering, 20(6), 487–507. — Explicit polynomial approximation to the dispersion relation.
- Beji, S. (2013). Improved explicit approximation of linear dispersion relationship for gravity waves. Coastal Engineering, 73, 11–12. https://doi.org/10.1016/j.coastaleng.2012.10.002
API reference¶
gridstats.derived.uorb.uorb(ds: xr.Dataset, *, hs: str = 'hs', tp: str = 'tp', depth: str | float = 'depth', z: str | float = 0.0, reference: str = 'bed', g: float = 9.81, solver: str = 'explicit') -> xr.DataArray
¶
Significant horizontal wave orbital velocity at position z.
Monochromatic approximation (Soulsby 1997) using integrated spectral parameters Hs and a representative period T:
.. math::
U(z) = \frac{\pi H_s}{T} \cdot \frac{\cosh(k z_{bed})}{\sinh(k h)}
where k solves the linear dispersion relation ω² = g k tanh(kh) and z_bed is the height above the seabed. See the derived variables documentation for period choice, depth profiles, solver comparison, and accuracy notes.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ds
|
Dataset
|
Input dataset. |
required |
hs
|
str
|
Name of the significant wave height variable (m). |
'hs'
|
tp
|
str
|
Name of the representative wave period variable (s). |
'tp'
|
depth
|
str | float
|
Name of a depth variable (m, positive downward) or a scalar depth to apply uniformly across the domain. |
'depth'
|
z
|
str | float
|
Position at which to evaluate orbital velocity (m, default 0).
Variable name or scalar float. Interpretation depends on
|
0.0
|
reference
|
str
|
Reference datum for z:
|
'bed'
|
g
|
float
|
Gravitational acceleration (m/s², default 9.81). |
9.81
|
solver
|
str
|
|
'explicit'
|
Returns:
| Type | Description |
|---|---|
DataArray
|
Horizontal orbital velocity DataArray (m/s, float32). NaN where |
DataArray
|
depth ≤ 0 or input variables contain NaN. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If solver is not |
ValueError
|
If reference is not |
References
Soulsby, R. L. (1997). Dynamics of Marine Sands. Thomas Telford. Chen, G., & Thomson, J. (1993). Ocean Engineering, 20(6), 487–507.