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 methodImplementing empirical modelsMulti-mode model testing, including the hop time distributionUpdate 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fa18dd6eb5eaa5b26f7f8ac3eeb79c47f78234e51695491a468a458a0d509d8
|
|
| MD5 |
cc91db4e1970329c284b388ee999be0a
|
|
| BLAKE2b-256 |
9f509a0250bcbc0406304db1c861388f35e63ac8d957e9a6e1e8c238d7dfef44
|
File details
Details for the file seismic_bedload-0.2.0-py3-none-any.whl.
File metadata
- Download URL: seismic_bedload-0.2.0-py3-none-any.whl
- Upload date:
- Size: 21.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdb2f0f4dca9501951ea7c1a25cdb39a9337d233e46d8b95a218c9f7583de833
|
|
| MD5 |
fe1b0b3a9ea79bb9e91502a97e96e91c
|
|
| BLAKE2b-256 |
9aee2005dd17adcdfa175ea311f21f2db9afb5106ae988641f5b290ac1486468
|