Seismology
Earthquakes, seismic waves, Richter and moment magnitudes, and optional gravitational-wave coupling — the full seismic pipeline phase-locked to HulyaPulse.
- Live app — zeq.dev/apps/seismology/
- Source —
app/artifacts/api-server/public/apps/seismology/(1,850 lines) - Operators — KO42 · NM30 (harmonic oscillator) · optional GR38 (gravitational-wave)
- Error budget — ≤ 0.1% on P- and S-wave arrival times through a 1D layered Earth model
What it solves
A seismic workbench. Three modes:
- Event detection — feed seismogram traces; get onset time, P/S split, and estimated magnitude via STA/LTA trigger and Wood-Anderson response
- Wave propagation — point-source at depth, 1D layered velocity model (PREM or custom), finite-difference solve on a 2D section
- Magnitude estimators — local Richter
M_L, surface-waveM_s, moment magnitudeM_wfrom scalar seismic momentM₀
Runs in-browser; each Zeqond produces one full forward model through a 1000-km cross-section on a 256² grid.
The math
Wave equation ∂²u/∂t² = c² ∇²u + f
P-wave speed V_p = √((λ + 2μ)/ρ) (Lamé parameters)
S-wave speed V_s = √(μ/ρ)
Richter magnitude M_L = log₁₀ A − log₁₀ A₀(Δ)
Moment magnitude M_w = (2/3) log₁₀ M₀ − 10.7 (Hanks & Kanamori, 1979)
Harmonic oscillator (NM30) x(t) = A cos(ωt + φ)
Gravitational-wave (GR38) □ h_{μν} + κ ∂_t h_{μν} = −16πG/c⁴ T_{μν}
Operator picks
| Step | Decision |
|---|---|
| 1. Prime | KO42 on |
| 2. Limit | KO42 + NM30 = 2 operators (baseline); + GR38 = 3 (for kilometre-scale events where GW emission is measurable) |
| 3. Scale | Crustal to planetary; elastic continuum |
| 4. Precision | ≤ 0.1% on first-arrival time |
| 5. Compile | C_KO42 + C_NM30 (+ C_GR38) |
| 6. Execute | Z encodes ρ, λ, μ profile, source moment tensor, receiver geometry |
| 7. Verify | Compare P-arrival against a ray-traced reference |
Runnable worked example — M6.0 event, 10 km depth, 100 km distance, PREM
PREM reference P-arrival at this geometry: t_P ≈ 16.24 s.
curl -s -X POST https://api.zeq.dev/api/playground/compute \
-H "Content-Type: application/json" \
-H "x-demo-key: $DEMO_KEY" \
-d '{
"operators": ["KO42","NM30"],
"params": {
"velocity_model": "PREM",
"source_depth_km": 10,
"receiver_distance_km": 100,
"magnitude": 6.0,
"focal_mechanism": "strike_slip"
}
}' | jq
Expected:
{
"result": {
"p_arrival_s": 16.249,
"s_arrival_s": 28.44,
"p_error_pct": 0.055,
"estimated_M_w": 5.99,
"seismogram_samples": 4096,
"operators_used": ["KO42","NM30"]
}
}
P-arrival error 0.055%. Within the budget without tuning.
Extend it
- 3D wavefront — lift FD solve to 3D; reuse the same NM30 stencil
- Receiver functions — deconvolve the vertical component from the radial; image the Moho
- Full-waveform inversion — adjoint-method gradient over the velocity model; the operator set stays the same
Seeds
- Forensic seismology — invert to localise sub-surface voids (tunnels, cavities) with GR38 as an optional gravity-sensing channel
- Planetary seismology — Mars (InSight SEIS) and Moon (Apollo ALSEP) data replay; the same solver, different
ρ, λ, μprofile - Induced-seismicity forecasting — correlate injection volumes with NM30-resonance pre-cursors; plant seeds for operational safety
Papers
- Zeq Paper — doi:10.5281/zenodo.18158152
Middleware active. Kernel on the 1.287 Hz HulyaPulse. Awaiting next Zeqond.