Skip to main content

NSHM Database Generation

This repository contains a script, schema, and Python package for building and querying a SQLite database of fault geometry and rupture scenario data from the GNS National Seismic Hazard Model (NSHM) 2022.

Domain model

The database describes rupture scenarios: possible earthquakes formed by one or more faults rupturing together. The core hierarchy is

graph TD
    R["Rupture scenario"] --> F1["Fault A"]
    R --> F2["Fault B"]
    F1 --> P1["Fault plane"]
    F1 --> P2["Fault plane"]
    F2 --> P3["Fault plane"]
  • Rupture scenario — a single possible earthquake from the NSHM logic tree. It has a magnitude, area,length, and (usually) an annual rate of occurrence, and involves one or more faults.

  • Fault — a fault (crustal) or a subdivision of a larger fault surface (subduction interface), belonging to a fault system (Crustal, Hikurangi, or Puysegur).

    Faults are grouped under a parent fault: for crustal fault systems, a parent fault is a named fault such as "Wellington: Wairarapa" that is made up of several along-strike segments (each a fault row); for the subduction interfaces (Hikurangi, Puysegur), every fault row is a section of the (single) subduction surface and currently maps one-to-one with its own parent_fault entry, distinguished by NSHM id rather than by name.

  • Fault plane — one planar rectangular patch of a fault's surface, defined by the lat/lon of its four corners plus a top and bottom depth. A fault is represented by one or more of these planes (e.g. a bent or multi-segment fault trace), and a rupture's overall geometry is the union of the planes of every fault it involves.

A rupture typically involves many faults, and each fault can participate in many ruptures (a many-to-many relationship), so a fault's geometry is stored once and shared across every rupture scenario that includes it.

Database schema

The hierarchy above is implemented with the following tables (see nshmdb/schema/schema.sql):

Table Represents Key columns
rupture A rupture scenario rupture_id (PK), fault_system, nshm_id, magnitude, area, len, rate
rupture_faults Join table linking ruptures to the faults they involve rupture_id (FK → rupture), fault_id (FK → fault)
fault A fault / fault section belonging to a parent fault fault_id (PK), parent_id (FK → parent_fault), fault_system, nshm_id, rake, tect_type
fault_plane One rectangular patch of a fault's geometry plane_id (PK), fault_id (FK → fault), corner lat/lons, top_depth, bottom_depth
parent_fault A named fault parent_id (PK), name
magnitude_frequency_distribution Per-fault magnitude/rate pairs (MFD), used to estimate a fault's activity rate at a given magnitude fault_id (FK → fault), magnitude, rate

Relationships:

erDiagram
    parent_fault ||--o{ fault : "grouped into"
    fault ||--o{ fault_plane : "made up of"
    fault ||--o{ magnitude_frequency_distribution : "has"
    fault ||--o{ rupture_faults : "appears in"
    rupture ||--o{ rupture_faults : "involves"

    parent_fault {
        int parent_id PK
        text name
    }
    fault {
        int fault_id PK
        int parent_id FK
        int fault_system
        int nshm_id
        real rake
        int tect_type
    }
    fault_plane {
        int plane_id PK
        int fault_id FK
        real top_left_lat
        real top_left_lon
        real top_right_lat
        real top_right_lon
        real bottom_right_lat
        real bottom_right_lon
        real bottom_left_lat
        real bottom_left_lon
        real top_depth
        real bottom_depth
    }
    rupture {
        int rupture_id PK
        int fault_system
        int nshm_id
        real magnitude
        real area
        real len
        real rate
    }
    rupture_faults {
        int rupture_fault_id PK
        int rupture_id FK
        int fault_id FK
    }
    magnitude_frequency_distribution {
        int entry_id PK
        int fault_id FK
        real magnitude
        real rate
    }
  • parent_fault → fault is one-to-many: a named fault is made of one or more fault sections.
  • fault → fault_plane is one-to-many: a fault section's surface is triangulated/paneled into one or more rectangular planes.
  • fault ↔ rupture is many-to-many, resolved through rupture_faults: a rupture involves multiple faults, and a fault can be part of multiple ruptures.
  • fault → magnitude_frequency_distribution is one-to-many: each fault has its own MFD used (via NSHMDB.most_likely_fault) to estimate which of its constituent faults a rupture most likely nucleated on.

fault_system, nshm_id, and (for ruptures/faults) their pairing under UNIQUE(fault_system, nshm_id) tie every row back to the original NSHM identifiers, so the database can be cross-referenced against the source NSHM solution.

Obtain the database

You likely don't need to obtain your own database, as they are published on Dropbox at /QuakeCoRE/Public/NSHM with every version release. Simply download that file and use it with the package:

from nshmdb.nshmdb import NSHMDB

db = NSHMDB('nshmdb_v2026.06.1.db') # or whatever the latest version is.

Generate your own database

After installing this package you simply run

nshmdb 1.0.4 nshmdb.db --api-key API_KEY_HERE

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nshmdb-2026.9.1.tar.gz (200.3 kB view details)

Uploaded Source

Built Distribution

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

nshmdb-2026.9.1-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file nshmdb-2026.9.1.tar.gz.

File metadata

  • Download URL: nshmdb-2026.9.1.tar.gz
  • Upload date:
  • Size: 200.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for nshmdb-2026.9.1.tar.gz
Algorithm Hash digest
SHA256 c89ed5c351d71000a0486515d9c0ffe94083a41b299a566119e44b20d1c3ca6b
MD5 ba78ede379451c46c596368a7cd4dfb4
BLAKE2b-256 665be6ea2fd119b58a2b1aa3a4616de0ee34356ac62dece7887398f6f7603260

See more details on using hashes here.

Provenance

The following attestation bundles were made for nshmdb-2026.9.1.tar.gz:

Publisher: publish-PyPI.yml on ucgmsim/NSHM2022DB

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nshmdb-2026.9.1-py3-none-any.whl.

File metadata

  • Download URL: nshmdb-2026.9.1-py3-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for nshmdb-2026.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 afb2055836fb89eb6ded94daf6c618cba9777d628cf85e289d46242da3d6dea0
MD5 a58a60e7f574c06c0b0a438197e3e881
BLAKE2b-256 d03cda88ebde8c67962ced54ca49f9c66ae6cd059b58418051d79a1b9fab4cdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for nshmdb-2026.9.1-py3-none-any.whl:

Publisher: publish-PyPI.yml on ucgmsim/NSHM2022DB

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

2026.9.1 This release

2 files

2026.8.3

2 files

2026.8.2

2 files

2026.8.1

2 files

2025.12.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page