Structural analysis solvers tailored for semi-analytical models
- Linear statics: [K]{u} = {f}
- Eigensolver for Linear buckling: ([K] + lambda[KG]){u} = 0
- Eigensolver for dynamics: ([K] + lambda^2[M]){u} = 0
- Sparse eigenvalue solvers first, verified, with dense solvers only as a last resort, also in the browser (Pyodide) and with the Intel MKL versions that break ARPACK
- Nonlinear statics using Newton-Raphson
- Nonlinear statics using the Arc-Length method
- Support for unsymmetric problems, such as those involving follower forces
Currently these solvers are pretty much compatible with my other repositories panels, buckling.
Citing this library
Saullo G. P. Castro (2026). Structural analysis solvers tailored for semi-analytical models (Version 0.6.0). Zenodo. DOI: https://doi.org/10.5281/zenodo.2581212.
Documentation
The documentation is available on: https://saullocastro.github.io/structsolve.
History
See CHANGELOG.md for the details of each version.
- version 0.6.0 (2026-10-08)
lbandfreqalways run the sparse solvers first, whatever the size of the problem, with verified results; the dense solvers are only a last resort withinmax_dense_size, with aDenseFallbackWarning- ARPACK's
ncvis capped at 32 when SciPy is linked against the Intel MKL versions whosedsteqris faulty (newstructsolve.arpackutils) - Unsymmetric
lb: a shift search finds the lowest positive real load multiplier, instead of silently returning negative or complex ones - The test extra no longer requires
bucklingandcomposites
- version 0.5.3 (2026-10-06)
- Configuration-dependent loads, e.g. follower pressures: the load factor
is passed to the callables that accept
inc, and the arc-length methods use the load vector of the current configuration - Unsymmetric matrices in
lb(automatic detection),freq(residual check, optional symmetric solvers, kinetic criterion) andsolve - The unsymmetric solvers of
lbandfrequse the complex LAPACK drivers ofscipy.linalg.eig, avoiding crashes of the Python process with Intel MKL 2025.0.0 - Linear static analysis with configuration-dependent loads in
Analysis.static(NLgeom=False)
- Configuration-dependent loads, e.g. follower pressures: the load factor
is passed to the callables that accept
- version 0.4.3 (2026-09-17)
- Fixed the eigenvalue shift of the sparse solver of
lb, which could return buckling loads higher than the critical ones - Fixed wrong buckling loads of the sparse solver of
lbwhen SciPy is linked against Intel MKL 2024.2.0 to 2025.0.0 (e.g. Anaconda on Windows), whosedsteqrroutine breaks ARPACK lbcondenses out the dofs whereKGis null and solves small condensed problems with a dense solverlbverifies the eigenpairs of the sparse solver, raising an error instead of returning wrong results- The sparse solver of
lbreturns the load multipliers sorted as the dense solver - Newton-Raphson with full Newton iterations and a relative convergence criterion by default, reaching quadratic convergence with exact tangent stiffness matrices
- Fixed the load-factor bookkeeping of Newton-Raphson, which could finish before reaching the full load
- Arc-length methods (Riks and Crisfield) rewritten, able to trace limit points, snap-through and snap-back until a load factor of exactly 1.0
- Sphinx documentation
- Fixed the eigenvalue shift of the sparse solver of
- version 0.3.1 (2026-04-09)
- Robust estimation of the eigenvalue shift for singular matrices in
freqandlb, and newskip_null_colsargument - Python 3.14 support
- Estimation of the eigenvalue shift in
freqandlb - Packaging with
pyproject.toml, GitHub Actions and a test suite
- Robust estimation of the eigenvalue shift for singular matrices in
- version 0.2.2 (2019-03-02)
- Release of 0.2.1 with an updated distribution
- Fixed the dense solver of
freq freqreturns the eigenvalueslambda**2instead of the natural frequencies
- version 0.1.0 (2018-06-23)
- First release, with the solvers from
compmech
- First release, with the solvers from
License
Distributed in the 3-Clause BSD license (https://raw.github.com/saullocastro/structsolve/master/LICENSE).
Contact: S.G.P.Castro@tudelft.nl
Metadata
Release files for structsolve 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| structsolve-0.6.0.tar.gz | 66.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| structsolve-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 112.9 kB
Release files / structsolve-0.6.0.tar.gz
| Download URL | structsolve-0.6.0.tar.gz |
|---|---|
| Size | 66.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3e8700cf722ba9b0fd65eceede0db64e1212cc81b5afc3e6071c255834db0fc9
|
|
BLAKE2b-256 checksum How to use checksums |
7478bf7dba4f7e68ce351a8cf3121aedba0d291499445d57867fd3068405cbf3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / structsolve-0.6.0-py3-none-any.whl
| Download URL | structsolve-0.6.0-py3-none-any.whl |
|---|---|
| Size | 46.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
45ac3abecc1ea83a6b9c3e086947e140d87ba65a34c2cabd472d920533c21677
|
|
BLAKE2b-256 checksum How to use checksums |
28fbd907f499de8ff8da4a558a869cc8645ad518b908c6b1075a03d458ee3602
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|