A fast and stateless interface to the OpenSees framework for finite element analysis.
This is an experimental package that provides an optimized OpenSees Tcl interpreter, as well as a new set of Python bindings that is both idiomatic, and free of global state.
The package may be used as a drop-in replacement for both OpenSees.exe and OpenSeesPy (see Getting Started below), and generally provides a substantial performance boost. Project objectives include:
-
Performance The
opensees
package uses the experimentalOpenSeesRT
analysis kernel which eliminates reliance on global variables for state and memory management. New template classes inmatrix/
allow for stack-allocated matrices and vectors and eliminate the need for static local variables which is leveraged to furnish substantial performance improvements. Switching Python scripts to useopensees
typically results in a 4x to 5x performance boost. -
Reliability The core OpenSees runtime has been redesigned so that all program state is encapsulated in user-instantiated classes, and global variables/singletons are avoided. This eliminates several preexisting vulnerabilities to inadvertent state corruption.
-
Semantics ...
Additional features include:
-
Convert OpenSeesPy scripts into equivalent Tcl files that can be used for faster processing or serialization. Unlike most conversion utilities, this conversion is done exactly and does not rely on hand-rolled parsing.
-
The package can be installed with
pip
for Python versions 3.7 - 3.12 on Linux, MacOS and Windows, but eigenvalue analysis is currently broken on Windows.
Note
This package is independent of the openseespy
library, which is documented in the OpenSees documentation
website.
This package is experimental and not yet intended for public use.
-
To start a Tcl interpreter run the shell command:
python -m opensees
-
The
opensees
package exposes a compatibility layer that exactly reproduces the original OpenSeesPy functions, but does so without mandating a single global program state. To run OpenSeesPy scripts, just change the import:import openseespy.opensees
to
import opensees.openseespy
For true stateless modeling, the
Model
class should be used instead of the legacymodel
function; documentation is under development.
See also:
osmg
OpenSees Model Generatorsees
Modern rendering librarymdof
Optimized system identification librarysdof
Optimized integration for single degree of freedom systems
For more projects by the STAIRlab, visit https://github.com/STAIRlab .