StructDyn documentation
StructDyn: An open-source Python library for structural dynamics analysis.
structdyn is a Python package for performing structural dynamics analysis of Single-Degree-of-Freedom (SDF) and Multi-Degree-of-Freedom (MDF) systems. It provides tools for analyzing both linear and non-linear behavior, making it a versatile library for researchers, students, and engineers.
Features
Single-Degree-of-Freedom (SDF) Systems:
Analytical Solutions: Compute the response of SDF systems to harmonic loads.
Numerical Integration: Solve the equation of motion using a variety of robust numerical methods, including Linear Interpolation,Newmark-Beta and Central Difference.
Response Spectra: Generate earthquake response spectra for displacement, velocity, and acceleration.
Multi-Degree-of-Freedom (MDF) Systems:
Shear Building Models: Quickly create MDF systems for typical shear buildings.
Modal Analysis: Compute natural frequencies, mode shapes, and modal participation factors.
Response History Analysis: Perform linear and non-linear time history analysis using direct integration.
Response Spectrum Analysis (RSA): Estimate peak responses using modal combination methods (SRSS).
Non-Linear Analysis:
Material Models: A library of hysteretic material models, including Bilinear, and Bouc-Wen.
Element Formulations: Define non-linear behavior at the element level.
Robust Solvers: Utilize iterative Newton-Raphson schemes within the Newmark-Beta solver for accurate non-linear solutions.
Ground Motion Tools:
Record Processing: Easily load, process, and manipulate earthquake ground motion records.
Standard Formats: Includes helper functions for common ground motion data, such as the El Centro record.
Installation
pip install structdyn
Quick Example
import numpy as np
import pandas as pd
from structdyn.ground_motions.ground_motion import GroundMotion
from structdyn.sdf.response_spectrum import ResponseSpectrum
from structdyn.utils.helpers import elcentro_chopra
elc = elcentro_chopra()
gm = GroundMotion.from_arrays(elc["acc (g)"], 0.02)
periods = np.arange(0, 5.01, 0.1)
rs = ResponseSpectrum(periods, 0.02, gm)
results = rs.compute()
print(results)