Skip to main content

Performance-Based Earthquake Engineering toolkit

Project description

PyPBEE — Performance-Based Earthquake Engineering in Python

A modular, high-performance framework that lets researchers and engineers run the full Performance-Based Earthquake Engineering (PBEE) workflow — from site-specific seismic hazard analysis to demand, damage and (soon) loss hazard analysis — entirely in Python.

License: MIT


Key Capabilities

  • End-to-end PBEE pipeline
    Probabilistic Seismic Hazard Analysis (PSHA), Ground Motion Selection (GMS), Nonlinear Time-History Analysis (NLTHA), Probabilistic Seismic Demand Hazard Analysis (PSDemHA) and Probabilistic Seismic Damage Hazard Analysis (PSDamHA).
  • Object-oriented core, plug-and-play extensions
    Clean template-method lifecycle (setup → run → wrap_up) and abstract entity classes (IM, EDP, DS, Structure) make it straightforward to add new intensity measures, demand parameters, fragilities, or analysis stages.
  • Advanced Uncertainty Quantification
    Treat aleatory and epistemic sources (random FE parameters, parameter estimation uncertainty, model-form alternatives) with MultivariateNataf, Mixture, Latin Hypercube sampling, etc.
  • Finite-element backends out of the box
    Adapters for OpenSeesTcl and OpenSeesPy; extendable to Abaqus, Ansys, …
  • Scales from laptop to cluster
    Local multiprocessing via pathos or embarrassingly-parallel Slurm jobs on HPC/HTC systems.
  • Built-in visualisation
    Hazard curves, conditional spectra, demand / damage hazard surfaces, deaggregation plots — all ready for publication.

Quick install (users)

pip install pypbee

pip will fetch the latest wheel from PyPI along with NumPy, SciPy, Matplotlib, etc.


Developer setup (work with the source)

git clone https://github.com/angshuman311/PyPBEE.git
cd PyPBEE

Windows

Simply double-click setup_venv.bat (or run it in CMD/PowerShell).
The script:

  1. creates a virtual environment venv\pypbee;
  2. installs everything listed in requirements.txt;

Point your IDE’s interpreter to:

/path/to/PyPBEE/venv/pypbee/Scripts/python.exe

Linux / macOS

Do the same steps manually:

python3 -m venv venv/pypbee    
source venv/pypbee/bin/activate

# install requirements
pip install -r requirements.txt

Point your IDE’s interpreter to:

/path/to/PyPBEE/venv/pypbee/Scripts/python.exe

Once the env is active you can edit code under pypbee/, run examples in scripts/, and submit pull requests.


Conceptual PSEUDO code

from pypbee.structure                               import OSB               # Ordinary Standard Bridge
from pypbee.avg_sa                                  import AvgSa
from pypbee.edp                                     import MaxColRebarStrain
from pypbee.ds                                      import DS
from pypbee.analysis                                import PrelimAnalysis, PSHA, GMS, NLTHA, PSDemHA, PSDamHA
from pypbee.utility                                 import Utility
from pypbee.pygmm_extension.boore_atkinson_2008     import BooreAtkinson2008
from pygmm.baker_jayaram_2008                       import calc_correls

# 1 ── define model‐params & site info ------------------------------------------------
# See files `osb_info_*.py` in `examples/Bridge_*/osb_info_*.py` for model_params and location_info definition
name = 'Bridge_A'
model_files_path = f'path/to/{name}'
model_params = Utility.import_attr_from_module(module_path=model_files_path, module_name=f"osb_info_{name}", attr='model_params')
location_info = Utility.import_attr_from_module(module_path=model_files_path, module_name=f"osb_info_{name}", attr='location_info')
local_python_path = '/path/to/PyPBEE/venv/pypbee/Scripts/python.exe'
model_work_dir_path = f'path/to/a/working/directory/for/results/data/storage/for/{name}'

# 2 ── create entities ---------------------------------------------------------------
structural_analysis_platform = OpenSeesPy(model_files_path, local_python_path)
osb         = OSB(name, location_info, model_files_path, model_work_dir_path, model_params, structural_analysis_platform)
im          = AvgSa(osb, gmm=BooreAtkinson2008, correl_func=calc_correls, define_range=['T_1_trans', 'T_1_trans'], range_multiplier=[1, 2.5])
edp_list    = [
                    MaxColRebarStrain(max_what='compression', frame_structure=osb, tag='1', recorder_file_storage='shared'),
                    MaxColRebarStrain(max_what='tension', frame_structure=osb, tag='2', recorder_file_storage='shared'),
                    MaxSpringDeformation(spring_type='shear_key', max_what='compression', frame_structure=osb, tag='4', recorder_file_storage='separate', normalize_with='D3')
              ]
ds_list     = [
                    DS(
                        edp=edp_list[0], predictor=lambda x: 0.004,
                        haz_req={'normalized_fragility_dist': lognorm(0.326, 0, 1.02),
                                'estimation_sample_size': 5},
                        ds_type='col_rebar_strain_damage'
                    )
                    DS(
                        edp=edp_list[1], predictor=lambda x: 0.03 + 700 * x[1] * x[2] / x[3] - 0.1 * x[8] / (x[4] * x[5]),
                        haz_req={'normalized_fragility_dist': lognorm(0.201, 0, 1.05),
                                'estimation_sample_size': 5},
                        ds_type='col_rebar_strain_damage'
                    )
                    DS(
                        edp=edp_list[2], predictor=lambda x: 1.0,
                        haz_req={'normalized_fragility_dist': lognorm(0.11, 0, 1.14),
                                'estimation_sample_size': 5},
                        ds_type='spring_deformation_damage',
                    )
              ]


# 3 ── assemble analyses -------------------------------------------------------------
pre         = PrelimAnalysis(osb, num_modes=8)
psha        = PSHA(im)
gms         = GMS(im)
nltha       = NLTHA(im, edp_list)
psdemha     = PSDemHA(edp_list, im)
psdamha     = PSDamHA(ds_list, im, sol_type='numerical')

# 4 ── run workflow ------------------------------------------------------------------
for a in (pre, psha, gms, nltha, psdemha, psdamha):
    a.setup(...)
    a.run(...)
    a.wrap_up(...)

Full, commented examples live in examples/ and scripts/.

Contributing

  1. Fork this repository and clone your fork locally.
  2. Create a feature branch, make your changes (e.g., add a new IM, EDP, etc.), and push the branch to your fork.
  3. Open a pull request describing what you changed and why it’s useful.
  4. Bug reports and feature requests are equally welcome — open a GitHub issue.

Acknowledgements

Development supported by Caltrans (65A0594, Task 2880), PEER Transportation Systems Research Program (Project #1147-NCTRTE), and the Reissner Chair, UC San Diego. HPC tests used TACC resources.

License

This project is released under the MIT License.

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

pypbee-1.0.1.tar.gz (87.7 kB view details)

Uploaded Source

Built Distribution

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

pypbee-1.0.1-py3-none-any.whl (98.7 kB view details)

Uploaded Python 3

File details

Details for the file pypbee-1.0.1.tar.gz.

File metadata

  • Download URL: pypbee-1.0.1.tar.gz
  • Upload date:
  • Size: 87.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pypbee-1.0.1.tar.gz
Algorithm Hash digest
SHA256 b1ed98e7324c1e9d66d8f8e0d1f73dc912879a1a84d25f6779b4c88c857c157e
MD5 6a492587eb8699da567045ef4c4db15e
BLAKE2b-256 e59980659646ce5ed8bb013c07bacc135febb5af4a407e1b022f7c6b2eb2f911

See more details on using hashes here.

File details

Details for the file pypbee-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: pypbee-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 98.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pypbee-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3d9bcd5727d51cb5da41a2109c7d86f882ef42ed2caad59ddfb3889fd307ac61
MD5 9e662951d187447c744940fb93b37472
BLAKE2b-256 93cb252fcfe3a5a702412eded91b48b3ab9ef28ea8cc9c5c19c3d91498b436ae

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