Skip to content

locluong09/seismic-based-bedload-transport-models

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 (in testing)
  • Forward modeling for PSD, and backward inversion for bedload flux
  • Support for grain size distributions (pD) in forward and inverse modeling

Installation

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

pip install seismic_bedload

Usage

import numpy as np
import matplotlib.pyplot as plt

from seismic_bedload import SaltationModel, MultimodeModel
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)

TODO

  • Allows grain size distribution (pD) to be called from forward and inverse method
  • Implementing empirical models
  • Multi-mode model testing
  • Particle velocity update

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.

License

This project is licensed under the MIT License.

About

Seismic based bedload transport models (Tsai et al., 2012; Gimbert et al., 2019; Luong et al., 2024)

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages