Skip to main content

Seismic based bedload transport models

Project description

Seismic-based Bedload Transport Models

Implementation of seismic-based bedload transport models, including the saltation-mode model (Tsai et al., 2012) and multi-mode model (Luong et al., 2024). This package is designed to estimate bedload flux using seismic methods.

Features

  • Saltation-mode bedload transport model
  • Multi-mode bedload transport model (including hop time distribution)
  • Forward modeling for PSD, and backward inversion for bedload flux
  • Support for grain size distributions (pD) in forward and inverse modeling
  • Turbulence model from Gimbert et al., 2014.
  • Monte-Carlo based inversion (inspired by eseis package)

Installation

You can install the package using either pip or by cloning this repo and install it locally:

pip install seismic_bedload

Usage

Saltation model

import numpy as np
import matplotlib.pyplot as plt

from seismic_bedload import SaltationModel
from seismic_bedload import log_raised_cosine_pdf

f = np.linspace(0.001, 20, 100) #frequency window
D = 0.3  # grain size (m)
H = 4.0   # flow depth (m)
W = 50 # river width (m)
theta = np.tan(1.4*np.pi/180)
r0 = 600 # source-receiver distance (m)
qb = 1e-3 # volumetric bedload flux per unit width (m2/s)

model = SaltationModel()
# Forward modeling of PSD
psd = model.forward_psd(f, D, H, W, theta, r0, qb)
# Reproduce Tsai results
plt.plot(f, psd)
plt.show()

# Inverting  bedload flux using Pinos dataset
PSD_obs = np.loadtxt("data/pinos/PSD.txt")
H = np.loadtxt("data/pinos/flowdepth.txt")
# Need to make sure PSD_obs and H have the same length
idx = np.arange(49, (49+317))
PSD_obs = PSD_obs[idx]
H = H/100 # depth to meter

# Data for Pinos
f = np.linspace(30, 80, 10) # frequency (Hz)
D = np.asarray(np.linspace(0.0001,0.07,100))
sigma = 0.85
mu = 0.009
s = sigma/np.sqrt(1/3-2/np.pi**2)
pD = log_raised_cosine_pdf(D, mu, s)/D

tau_c50 = 0.045 # Critical shield for D50 (-)
D50 = 0.005 # mean grain size D50 (m)
W = 10 # river width (m)
theta = np.tan(0.7*np.pi/180) # slope (-)
r0 = 17 # source-receiver distance (m)
qb = 1 # Set qb = 1 for inverse mode m2/s
bedload_flux = model.inverse_bedload(PSD_obs, f, D, H, W, theta, r0, qb = 1, D50=D50, tau_c50=tau_c50, pdf = pD) # m2/s
bedload_flux = bedload_flux * 2700 # to (kg/m/s)

Multimode model

import numpy as np
import matplotlib.pyplot as plt

from seismic_bedload import MultimodeModel
from seismic_bedload import log_raised_cosine_pdf
seismic_params = SeismicParams()
seismic_params.vc0 = 250
seismic_params.zeta = 0.089
sediment_params = SedimentParams()
sediment_params.rho_s = 2650
PSD_observe = np.loadtxt("data/pinos/PSD.txt")
idx = np.arange(48, (48+317))
PSD_obs = PSD_observe[idx]

H = np.loadtxt("data/pinos/flowdepth.txt")
H = H/100
f = np.linspace(30, 80, 10)
D = np.asarray(np.linspace(0.0001,0.07,100))
sigma = 0.85
mu = 0.009
s = sigma/np.sqrt(1/3-2/np.pi**2)
pD = log_raised_cosine_pdf(D, mu, s)/D

tau_c50 = 0.045
D50 = 0.005
W = 10
theta = np.tan(0.7*np.pi/180)
r0 = 17
qb = 1
ks = 0.07
t = 0.05
t = np.linspace(0.01, 0.5, 100)
mu = np.log(0.08)
sigma = 1.0
lower, upper = 0.01, 0.5
dist = lognorm(sigma, scale=np.exp(mu))
def truncated_pdf(x):
    Z = dist.cdf(upper) - dist.cdf(lower)  # normalization constant
    return np.where((x >= lower) & (x <= upper),
                    dist.pdf(x) / Z,
                    0.0)
tD = truncated_pdf(t)
model = MultimodeModel(seismic_params=seismic_params, sediment_params=sediment_params)
bedload = model.inverse_bedload(PSD_obs, f, D, H, W, theta, r0, qb, t, ks, 
                                D50 = D50, tau_c50 = tau_c50, pdf_D= pD, pdf_t=tD, clip_tau_c=True)
plt.plot(np.arange(235), bedload[5:240]*2700, linestyle='-.')
plt.show()

TODO

  • Allows grain size distribution (pD) to be called from forward and inverse method
  • Implementing empirical models
  • Multi-mode model testing, including the hop time distribution
  • Update equations for bedload velocity estimation

References

Tsai, V.C., Minchew, B., Lamb, M.P. and Ampuero, J.P., 2012. A physical model for seismic noise generation from sediment transport in rivers. Geophysical Research Letters, 39(2).

Luong, L., Cadol, D., Bilek, S., McLaughlin, J.M., Laronne, J.B. and Turowski, J.M., 2024. Seismic modeling of bedload transport in a gravel‐bed alluvial channel. Journal of Geophysical Research: Earth Surface, 129(9), p.e2024JF007761.

Luong, L., Cadol, D., Turowski, J.M., Bilek, S., McLaughlin, J.M., Stark, K. and Laronne, J.B., 2026. An empirical model combining seismic noise and shear stress to predict bedload flux in a gravel‐bed alluvial channel. Water Resources Research, 62(2), p.e2025WR040371.

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

seismic_bedload-0.2.0.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

seismic_bedload-0.2.0-py3-none-any.whl (21.8 kB view details)

Uploaded Python 3

File details

Details for the file seismic_bedload-0.2.0.tar.gz.

File metadata

  • Download URL: seismic_bedload-0.2.0.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for seismic_bedload-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4fa18dd6eb5eaa5b26f7f8ac3eeb79c47f78234e51695491a468a458a0d509d8
MD5 cc91db4e1970329c284b388ee999be0a
BLAKE2b-256 9f509a0250bcbc0406304db1c861388f35e63ac8d957e9a6e1e8c238d7dfef44

See more details on using hashes here.

File details

Details for the file seismic_bedload-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for seismic_bedload-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bdb2f0f4dca9501951ea7c1a25cdb39a9337d233e46d8b95a218c9f7583de833
MD5 fe1b0b3a9ea79bb9e91502a97e96e91c
BLAKE2b-256 9aee2005dd17adcdfa175ea311f21f2db9afb5106ae988641f5b290ac1486468

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page