ge.dynamics — Soil dynamics & liquefaction¶
Three things: small-strain stiffness (\(G_{\max}\)), the modulus-reduction & damping curves used in equivalent-linear ground response analysis, and the simplified-procedure liquefaction triggering analysis (Seed-Idriss / NCEER / Idriss-Boulanger).
Small-strain shear modulus¶
import geoeq as ge
# From shear-wave velocity
ge.gmax(Vs=200, gamma=20) # 81550 kPa = 81.5 MPa
# From Hardin & Black (1968)
ge.gmax_hardin(e=0.6, sigma_m_eff=100, OCR=2, PI=30,
soil_type="round_grained")
Modulus reduction G/G_max and damping D¶
Darendeli (2001) is the modern empirical model:
where the reference strain \(\gamma_r\) depends on mean effective stress, plasticity index, and OCR.
ge.modulus_reduction(strain=1e-3, sigma_m_eff=100, PI=15, OCR=1)
ge.damping_ratio(strain=1e-3, sigma_m_eff=100, PI=15, OCR=1)
ge.gmax_curves_plot().Liquefaction triggering — simplified procedure¶
The complete workflow in five steps. Each step is one function call.
Step 1: depth-reduction factor \(r_d\)¶
Other methods: "liao_whitman_1986", "cetin_2004".
Step 2: cyclic stress ratio (CSR)¶
csr = ge.liquefaction_csr(amax=0.25, sigma_v=120,
sigma_v_eff=70, z=6, Mw=7.0)
# {'CSR': 0.226, 'rd': 0.971, 'amax_g': 0.25}
Step 3: cyclic resistance ratio (CRR)¶
Four families. Pick by what you have:
# NCEER, SPT (Youd et al. 2001) — most widely cited
ge.liquefaction_crr(N160cs=12, method="youd_2001")
# Updated SPT (Idriss & Boulanger 2008)
ge.liquefaction_crr(N160cs=15, method="idriss_boulanger_2008")
# Updated CPT (Idriss & Boulanger 2008)
ge.liquefaction_crr(qc1Ncs=100, method="idriss_boulanger_2008_cpt")
# Vs-based (Andrus & Stokoe 2000)
ge.liquefaction_crr(Vs1=150, FC=10, method="andrus_stokoe_2000")
Step 4: magnitude scaling factor (MSF)¶
ge.magnitude_scaling_factor(Mw=7.0, method="idriss_1999")
ge.magnitude_scaling_factor(Mw=7.0, method="nceer")
ge.magnitude_scaling_factor(Mw=7.0, method="boulanger_idriss_2014")
Step 5: factor of safety¶
fs = ge.liquefaction_fos(
CSR=csr["CSR"], CRR=0.12, Mw=7.0,
K_sigma=1.0, K_alpha=1.0,
)
# {'FS': 0.69, 'liquefies': True, 'MSF': 1.19, ...}
The triggering chart¶
ge.liquefaction_chart().Response spectrum¶
ge.response_spectrum(T=[0.01, 0.1, 0.5, 1, 2, 4],
Sa=[0.40, 0.62, 0.55, 0.32, 0.18, 0.10],
site_class="D")
API reference¶
gmax
¶
Small-strain shear modulus Gmax from shear-wave velocity Vs.
Gmax = rho * Vs^2 (kPa)
| PARAMETER | DESCRIPTION |
|---|---|
Vs
|
Shear-wave velocity (m/s).
TYPE:
|
gamma
|
Total unit weight (kN/m^3). Default 18.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Gmax
|
Small-strain shear modulus (kPa).
TYPE:
|
Reference
Stokoe et al. (1999); Das (2010) Eq. 11.18.
Source code in geoeq/dynamics/modulus.py
gmax_hardin
¶
gmax_hardin(e: float, sigma_m_eff: float, OCR: float = 1.0, PI: float = 0, soil_type: str = 'round_grained') -> float
Gmax from Hardin & Black (1968) / Hardin & Drnevich (1972).
Gmax = A * F(e) * OCR^k * (sigma'_m / pa)^n * pa (kPa)
For most soils n ~ 0.5 and:
- Round-grained sands: A = 6900, F(e) = (2.97 - e)^2 / (1 + e)
- Angular-grained sands: A = 3300, F(e) = (2.17 - e)^2 / (1 + e)
- Clays: A = 3230, F(e) = (2.97 - e)^2 / (1 + e)
| PARAMETER | DESCRIPTION |
|---|---|
e
|
Void ratio (-).
TYPE:
|
sigma_m_eff
|
Mean effective confining stress (kPa).
TYPE:
|
OCR
|
Over-consolidation ratio.
TYPE:
|
PI
|
Plasticity index. Sets k via Hardin-Drnevich table: PI=0: k=0 PI=20: k=0.18 PI=40: k=0.30 PI=60: k=0.41 PI=80: k=0.48 PI>=100: k=0.50
TYPE:
|
soil_type
|
'round_grained' | 'angular_grained' | 'clay'.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Gmax
|
Small-strain shear modulus (kPa).
TYPE:
|
Reference
Hardin & Black (1968); Hardin & Drnevich (1972); Kramer (1996) Eq. 6.9.
Source code in geoeq/dynamics/modulus.py
modulus_reduction
¶
modulus_reduction(strain: float, sigma_m_eff: float = 100.0, PI: float = 15, OCR: float = 1.0, method: str = 'darendeli') -> float
Modulus-reduction ratio G/Gmax at shear strain strain (%).
G / Gmax = 1 / (1 + (gamma / gamma_r)^a)
where gamma_r is the reference strain (Darendeli 2001) and a ~ 0.92 for typical soils.
| PARAMETER | DESCRIPTION |
|---|---|
strain
|
Shear strain (decimal, e.g. 0.001 = 0.1%).
TYPE:
|
sigma_m_eff
|
Mean effective confining stress (kPa). Default 100.
TYPE:
|
PI
|
Plasticity index. Default 15.
TYPE:
|
OCR
|
Over-consolidation ratio. Default 1.
TYPE:
|
method
|
'darendeli' (2001) or 'vucetic_dobry' (1991 chart values).
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
G_over_Gmax
|
Modulus reduction ratio (-).
TYPE:
|
Reference
Darendeli (2001) Eq. 8.10-8.12; Vucetic & Dobry (1991).
Source code in geoeq/dynamics/modulus.py
damping_ratio
¶
damping_ratio(strain: float, sigma_m_eff: float = 100.0, PI: float = 15, OCR: float = 1.0, freq_Hz: float = 1.0, N_cycles: float = 10, method: str = 'darendeli') -> float
Equivalent-linear damping ratio D (decimal, e.g. 0.05 = 5%).
Uses Darendeli (2001) full model: D = D_min + b * (G/Gmax)^0.1 * (D_masing - D_min)/100 [%] D_min = (phi6 + phi7 * PI * OCR^phi8) * sigma_norm^phi9 * (1 + phi10 * ln(freq))
Returns the small-strain D for very small strains, with the Masing correction at larger strains.
Reference
Darendeli (2001) Eq. 8.13-8.18.
Source code in geoeq/dynamics/modulus.py
depth_reduction
¶
Stress-reduction factor rd that accounts for the flexibility of the soil column under earthquake shear stress.
| PARAMETER | DESCRIPTION |
|---|---|
z
|
Depth (m).
TYPE:
|
method
|
'liao_whitman_1986' -- simple bilinear (deprecated by NCEER). 'idriss_1999' -- magnitude-dependent (NCEER-recommended). 'cetin_2004' -- empirical, magnitude-dependent.
TYPE:
|
Mw
|
Moment magnitude (only used by idriss_1999/cetin).
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
rd
|
TYPE:
|
Reference
Idriss (1999); Youd et al. (2001) Eq. 4.
Source code in geoeq/dynamics/liquefaction.py
liquefaction_csr
¶
liquefaction_csr(amax: float, sigma_v: float, sigma_v_eff: float, Mw: float = 7.5, z: float = None, rd: float = None, g: float = 9.81) -> dict
Cyclic stress ratio induced by the earthquake.
CSR = 0.65 * (amax / g) * (sigma_v / sigma_v_eff) * rd
| PARAMETER | DESCRIPTION |
|---|---|
amax
|
Peak horizontal ground acceleration as a fraction of g (e.g. 0.25 for 0.25g).
TYPE:
|
sigma_v
|
Total vertical stress at depth (kPa).
TYPE:
|
sigma_v_eff
|
Effective vertical stress at depth (kPa).
TYPE:
|
Mw
|
Moment magnitude (used only for rd if rd is None).
TYPE:
|
z
|
Depth (m). Required if rd is None.
TYPE:
|
rd
|
Pre-computed depth-reduction factor. If None, computed from z.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
dict
|
|
Reference
Seed & Idriss (1971); Youd et al. (2001) Eq. 1.
Source code in geoeq/dynamics/liquefaction.py
liquefaction_crr
¶
liquefaction_crr(N160cs: float = None, qc1Ncs: float = None, Vs1: float = None, FC: float = 0, method: str = 'youd_2001', Mw: float = 7.5) -> dict
Cyclic resistance ratio at Mw=7.5 from SPT, CPT, or Vs.
Methods: * youd_2001 -- NCEER SPT (Youd et al. 2001 Eq. 5): CRR7.5 = 1/(34 - N160cs) + N160cs/135 + 50/(10N160cs+45)^2 - 1/200 * idriss_boulanger_2008 -- updated SPT (Eq. 4): CRR7.5 = exp[ N160cs/14.1 + (N160cs/126)^2 - (N160cs/23.6)^3 + (N160cs/25.4)^4 - 2.8 ] * idriss_boulanger_2008_cpt -- CPT-based (Eq. 6): CRR7.5 = exp[ qc1Ncs/540 + (qc1Ncs/67)^2 - (qc1Ncs/80)^3 + (qc1Ncs/114)^4 - 3 ] * andrus_stokoe_2000 -- Vs-based (Eq. 9): CRR7.5 = 0.022(Vs1/100)^2 + 2.8(1/(215-Vs1) - 1/215)
| RETURNS | DESCRIPTION |
|---|---|
dict with 'CRR', 'method'.
|
|
Reference
Youd et al. (2001); Idriss & Boulanger (2008); Andrus & Stokoe (2000).
Source code in geoeq/dynamics/liquefaction.py
| Python | |
|---|---|
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | |
magnitude_scaling_factor
¶
Magnitude scaling factor MSF to adjust CRR_7.5 to other magnitudes.
Methods: * idriss_1999: MSF = 6.9 * exp(-Mw/4) - 0.058 (capped at 1.8) * nceer: MSF = (102.24)/Mw2.56 (Youd et al. 2001 Eq. 24) * boulanger_idriss_2014: MSF = 1 + (MSFmax - 1)*(8.64 * exp(-Mw/4) - 1.325)
Reference
Idriss (1999); Youd et al. (2001); Boulanger & Idriss (2014).
Source code in geoeq/dynamics/liquefaction.py
liquefaction_fos
¶
liquefaction_fos(CSR: float, CRR: float, Mw: float = 7.5, MSF: float = None, K_sigma: float = 1.0, K_alpha: float = 1.0, MSF_method: str = 'idriss_1999') -> dict
Factor of safety against liquefaction triggering.
FS_L = (CRR * MSF * K_sigma * K_alpha) / CSR
| PARAMETER | DESCRIPTION |
|---|---|
CSR
|
Cyclic stress ratio from earthquake loading.
TYPE:
|
CRR
|
Cyclic resistance ratio at Mw=7.5.
TYPE:
|
Mw
|
Moment magnitude (for MSF if not provided).
TYPE:
|
MSF
|
Pre-computed magnitude scaling factor.
TYPE:
|
K_sigma
|
Overburden correction (default 1).
TYPE:
|
K_alpha
|
Static shear stress correction (default 1).
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
dict
|
|
Reference
Youd et al. (2001) Eq. 26; Idriss & Boulanger (2008).
Source code in geoeq/dynamics/liquefaction.py
response_spectrum
¶
response_spectrum(T: Sequence[float], Sa: Sequence[float], site_class: str = None, ax=None, save_as: str = None, **kwargs)
Plot a response spectrum.
| PARAMETER | DESCRIPTION |
|---|---|
T
|
Periods (s).
TYPE:
|
Sa
|
Spectral accelerations (g).
TYPE:
|
site_class
|
Label printed on the figure (e.g. 'Site Class D').
TYPE:
|
ax
|
Embed in an existing axis.
TYPE:
|
save_as
|
Path to save the figure.
TYPE:
|
**kwargs
|
Passed to Matplotlib
DEFAULT:
|
| RETURNS | DESCRIPTION |
|---|---|
Figure
|
|
Source code in geoeq/dynamics/response.py
gmax_curves_plot
¶
gmax_curves_plot(PI_values=(0, 15, 30, 50, 100), sigma_m_eff: float = 100.0, OCR: float = 1.0, strain_range=None, method: str = 'darendeli', ax=None, save_as: str = None)
Plot G/Gmax (left axis) and damping D (right axis) versus shear strain for a family of plasticity indices.
Reproduces the Vucetic-Dobry style family of curves using Darendeli (2001)'s closed-form expressions.
Source code in geoeq/dynamics/plots.py
liquefaction_chart
¶
liquefaction_chart(data_N: Sequence[float] = None, data_CSR: Sequence[float] = None, data_FS: Sequence[float] = None, Mw: float = 7.5, methods=('youd_2001', 'idriss_boulanger_2008'), ax=None, save_as: str = None)
Liquefaction-triggering chart: CRR curve(s) plus optional CSR data.
| PARAMETER | DESCRIPTION |
|---|---|
data_N
|
Field data points to overlay (corrected blow counts and CSR).
TYPE:
|
data_CSR
|
Field data points to overlay (corrected blow counts and CSR).
TYPE:
|
data_FS
|
Per-point factor of safety; if given, points are coloured red (FS < 1) / green (FS >= 1).
TYPE:
|
methods
|
CRR curves to draw. Default both Youd-2001 and IB-2008.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Figure
|
|

