Skip to content

Sediment Reference

pywmp.sediment provides physics-based sediment transport models that can be coupled to any PyWMP 2D simulation. It covers bedload, cohesive (fine-grained) sediment, advection-dispersion, erosion, settling, and morphodynamic bed evolution.

Quick start

Coupled bedload and cohesive sediment simulation loop
import numpy as np
from pywmp.sediment import BedloadTransport, CohesiveSediment, MorphodynamicBed

shape = (100, 80)   # grid dimensions (ny, nx)
dx    = 10.0        # cell size (m)
dt    = 60.0        # timestep (s)

# --- Bedload transport (non-cohesive sand) ---
bedload = BedloadTransport(
    d50_mm   = 0.35,    # median grain diameter
    rho_s    = 2650.0,  # sediment density (kg/m³)
    formula  = "mpm",   # Meyer-Peter & Müller (default)
)

# --- Cohesive sediment (fine-grained) ---
cohesive = CohesiveSediment(
    tau_ce    = 0.05,   # critical erosion shear stress (Pa)
    M_e       = 1e-4,   # erosion rate parameter (kg/m²/s/Pa)
    ws        = 2e-4,   # settling velocity (m/s)
    tau_cd    = 0.02,   # critical deposition shear stress (Pa)
)

# --- Simulation loop (called once per hydraulic timestep) ---
for step in range(n_steps):
    h  = get_depth(step)    # water depth (m)
    u  = get_u(step)        # x-velocity (m/s)
    v  = get_v(step)        # y-velocity (m/s)

    qbx, qby = bedload.flux(h, u, v)           # bedload flux (m³/s/m)
    E, D     = cohesive.exchange(h, u, v)       # erosion and deposition rates (kg/m²/s)

Bedload transport

BedloadTransport

BedloadTransport(d50_mm, rho_s=2650.0, formula="mpm", porosity=0.4)
Parameter Description
d50_mm Median grain diameter (mm)
rho_s Sediment density (kg/m³; default 2650 for quartz)
formula Transport formula (see table below)
porosity Bed porosity (0–1; default 0.4)

Transport formulas:

formula Name Best for
"mpm" Meyer-Peter & Müller (1948) Gravel-bed rivers
"engelund_hansen" Engelund & Hansen (1967) Sand-bed rivers
"van_rijn" van Rijn (1984) Fine to medium sand

Method:

qbx, qby = bedload.flux(h, u, v)
# Returns x and y bedload flux arrays (m³/s/m)

Cohesive sediment

CohesiveSediment

CohesiveSediment(tau_ce, M_e, ws, tau_cd, C_init=0.0)
Parameter Description
tau_ce Critical erosion shear stress (Pa). Below this, no erosion.
M_e Erosion rate coefficient (kg/m²/s/Pa)
ws Settling velocity (m/s). Use Stokes law for d < 0.1 mm.
tau_cd Critical deposition shear stress (Pa). Above this, no deposition.

Typical values (Krishnappan & Droppo 2011):

Sediment type τ_ce (Pa) M_e ws (m/s)
Loose fine silt 0.02–0.05 1e-4 2–5e-4
Consolidated clay 0.10–0.50 5e-5 0.5–2e-4
Flocculated 0.05–0.15 1e-4 1e-3

Advection-dispersion transport

SedimentAdvection

First-order explicit upwind advection for any scalar concentration field:

from pywmp.sediment import SedimentAdvection

adv = SedimentAdvection(shape=(100, 80), dx=10.0)
C_new = adv.step(C, h, u, v, dt, source=E_dep)

Morphodynamic bed evolution

MorphodynamicBed

Updates the DEM elevation based on net bedload divergence and cohesive exchange:

from pywmp.sediment import MorphodynamicBed

bed = MorphodynamicBed(dem, dx=10.0, porosity=0.4)

# After each timestep:
bed.update(qbx, qby, E_dep, dt)

# Access updated DEM:
updated_dem = bed.dem

Morphodynamic feedback is significant for long simulations (multi-day storm sequences or decadal analysis). For short design storms, morphodynamics is typically disabled.


Settling velocity

from pywmp.sediment import settling_velocity_stokes, settling_velocity_van_rijn

ws = settling_velocity_stokes(d_mm=0.05, T_celsius=20.0)
print(f"Stokes settling velocity: {ws*1000:.2f} mm/s")

References

  • Meyer-Peter & Müller (1948) — bedload formula
  • Engelund & Hansen (1967) — total load formula
  • van Rijn (1984) — bedload + suspended load
  • Partheniades (1965) — cohesive erosion law
  • Krone (1962) — cohesive deposition law