Structural analysis solvers - structsolve#

The structsolve module provides structural analysis solvers tailored for semi-analytical models, such as the Ritz models of plates and shells of panels. With structsolve you can run:

  • Linear static analyses, \([K]\{u\} = \{f\}\), with static(), solve() or Analysis

  • Linear buckling analyses, \(([K] + \lambda [K_G])\{u\} = \{0\}\), with lb()

  • Frequency analyses, \(([K] + \lambda^2 [M])\{u\} = \{0\}\), with freq()

  • Sparse eigenvalue solvers first, with verified results and dense solvers only as a last resort, also in the browser (Pyodide) and with the faulty Intel MKL versions that break ARPACK, see Eigenvalue solvers

  • Non-linear static analyses with Analysis, using:
    • the Newton-Raphson method, full or modified, with an optional line-search

    • the arc-length methods of Riks and Crisfield, able to trace limit points, snap-through and snap-back

  • Configuration-dependent loads, e.g. follower pressures, in the linear and non-linear static analyses, see callbacks, and unsymmetric matrices in all the solvers, including the kinetic criterion (flutter) with freq()

  • Load vectors that depend on the load factor, e.g. prescribed displacements imposed exactly as linear constraints, in the non-linear static analyses, see callbacks

The constrained degrees of freedom of the models, i.e. the null rows and columns of the matrices, are removed before solving.

Code repository#

saullocastro/structsolve

Citing this library#

Saullo G. P. Castro (2026). Structural analysis solvers tailored for semi-analytical models (Version 0.8.0). Zenodo. DOI: https://doi.org/10.5281/zenodo.2581212.

Eigenvalue solvers#

Usage examples#

structsolve API#

Installing structsolve#

Install from the distributed packages by simply doing:

python -m pip install structsolve

or from the source code using:

python -m pip install .

In the browser, with Pyodide, which already distributes NumPy and SciPy, the wheel published on PyPI is installed with micropip:

import micropip
await micropip.install("structsolve")

Changelog#

saullocastro/structsolve

License#

Copyright (c) 2012-2026, Saullo G. P. Castro (S.G.P.Castro@tudelft.nl)
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Indices and tables#