Skip to main content

VS30 extrapolation from shallow shear-wave velocity profiles (Hudson 2026)

Project description

vs30extrap

Python implementation of VS30 extrapolation from shallow shear-wave velocity profiles.

PyPI version Python versions CI License: MIT DOI


Background

The time-averaged shear-wave velocity to 30 m depth (VS30) is a key site parameter used in ground-motion models, NEHRP site classification, and seismic hazard mapping. Many velocity profiles do not extend to 30 m, requiring extrapolation.

This package implements the methods published in:

Hudson, K. S. (2026). VS30 Estimation from Shallow VS Profiles. Bulletin of the Seismological Society of America, XX, 1–21. https://doi.org/10.1785/0120250210

Two extrapolation approaches are provided:

Method Description
constant_velocity Assumes the velocity below the profile equals the bottom-layer velocity (ASCE 7-22 baseline).
predict Correlation-based using log₁₀(VS30) = a + b·log₁₀(VSd), with coefficients from linear mixed-effects regression on 2 492 profiles from the VS Profile Database.

Correlation-based models are available with coefficients grouped by:

  • velocity_method – measurement technique (MASW, SCPT, Downhole, …)
  • basin – sedimentary basin (Los Angeles Basin, San Fernando Basin, …)
  • state – U.S. state or Canadian province (California, Kentucky, …)

Installation

pip install vs30extrap

Requires Python ≥ 3.9, NumPy ≥ 1.22, and pandas ≥ 1.4.

Quick start

import vs30extrap

# --- Correlation-based prediction (recommended) ----------------------------

# OLS (no regional grouping required)
vs30, sigma = vs30extrap.predict(250.0, d=10, method='ols')

# Mixed-effects grouped by velocity measurement method
vs30, sigma = vs30extrap.predict(250.0, d=10,
                                  method='velocity_method', group='MASW')

# Mixed-effects grouped by sedimentary basin
vs30, sigma = vs30extrap.predict(250.0, d=10,
                                  method='basin',
                                  group='Los Angeles Basin (LAB)')

# Mixed-effects grouped by state
vs30, sigma = vs30extrap.predict(250.0, d=10,
                                  method='state', group='California')

# Fixed-effects only (population-level, no group_value needed)
vs30, sigma = vs30extrap.predict(250.0, d=10, method='velocity_method')

# --- Constant-velocity extrapolation (ASCE 7-22 baseline) ------------------
vs30_cv = vs30extrap.constant_velocity(250.0, d=10)

# With an explicit bottom-layer velocity
vs30_cv = vs30extrap.constant_velocity(250.0, d=10, Vs_bottom=310.0)

# --- Array inputs -----------------------------------------------------------
import numpy as np
Vsd = np.array([150.0, 250.0, 350.0, 450.0])
vs30_arr, sigma = vs30extrap.predict(Vsd, d=15, method='velocity_method',
                                      group='SCPT')

# --- Discover available groups ----------------------------------------------
vs30extrap.available_groups('velocity_method')
# ['Crosshole', 'Downhole', 'MASW', 'None', 'Reflection',
#  'Refraction', 'SASW', 'SCPT', 'Suspension Logging',
#  'Surface Wave Dispersion']

vs30extrap.available_groups('basin')
vs30extrap.available_groups('state')

API reference

vs30extrap.predict(Vsd, d, method='velocity_method', group=None)

Correlation-based VS30 estimate.

Parameter Type Description
Vsd float or array Time-averaged VS to depth d (m/s)
d int Depth of profile in metres (1–29)
method str 'ols', 'velocity_method', 'basin', or 'state'
group str or None Group within method (see available_groups). None → fixed-effects only

Returns (vs30, sigma) where sigma is the standard deviation of log₁₀ residuals.


vs30extrap.constant_velocity(Vsd, d, Vs_bottom=None)

Constant-velocity extrapolation (Equation 2, Hudson 2026; ASCE 7-22).

Parameter Type Description
Vsd float or array Time-averaged VS to depth d (m/s)
d int Depth of profile in metres
Vs_bottom float or array, optional Bottom-layer velocity (m/s). Defaults to Vsd.

Returns vs30 (float or ndarray).


vs30extrap.available_groups(method)

List valid group strings for the given method.

Returns sorted list of strings.

Choosing a method

Situation Recommended call
You know the measurement technique predict(..., method='velocity_method', group='MASW')
Site is in a named sedimentary basin predict(..., method='basin', group='Los Angeles Basin (LAB)')
Site is in a U.S. state with enough data predict(..., method='state', group='California')
No regional information available predict(..., method='ols')
Need ASCE 7-22 baseline for comparison constant_velocity(...)

The paper shows that all three mixed-effects groupings outperform constant-velocity extrapolation, with the random-effects models producing smaller biases than OLS at all profile depths (Figure 5 of Hudson 2026).

Citation

If you use this package in published work, please cite the underlying paper:

@article{Hudson2026,
  author  = {Hudson, Kenneth S.},
  title   = {{VS30} Estimation from Shallow {VS} Profiles},
  journal = {Bulletin of the Seismological Society of America},
  year    = {2026},
  volume  = {XX},
  pages   = {1--21},
  doi     = {10.1785/0120250210}
}

Data source

Regression coefficients were derived from the VS Profile Database (VsPDB) (Ahdi et al., 2018; Kwak et al., 2021), queried December 2025.

License

MIT © 2026 Kenneth S. Hudson

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

vs30extrap-0.1.0.tar.gz (53.1 kB view details)

Uploaded Source

Built Distribution

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

vs30extrap-0.1.0-py3-none-any.whl (50.1 kB view details)

Uploaded Python 3

File details

Details for the file vs30extrap-0.1.0.tar.gz.

File metadata

  • Download URL: vs30extrap-0.1.0.tar.gz
  • Upload date:
  • Size: 53.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for vs30extrap-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f5fcab501df73d6c4853a3df76195c87ca55041049bef7dc167f79f391d240be
MD5 4243d9e76557a7038334dbe5d0eeeccc
BLAKE2b-256 ee95cb92a25fffaf01bbc7523fe9333f3260fcf3677b05f4a9a6d0069bcbdbac

See more details on using hashes here.

File details

Details for the file vs30extrap-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: vs30extrap-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 50.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for vs30extrap-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6e21d31aa9a742cb10551e44c61ba339c153e371798f77b769e5dd089ce5de62
MD5 3372cec3c0d34d6fa2969f1e6de08020
BLAKE2b-256 23558d30aa273c822132e1e20ed0467f168ab0a6fd8f717aa59f5fec8645bb84

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