First-Order: Identifying a unstable system#

Identifying an unstable (unsolvable) structural system

This example demonstrates how sStatics recognizes and reports an unstable structural system. A beam-like structure is modeled with insufficient constraints, creating a mechanism. The calculation is attempted using first-order structural analysis, and the system checks whether the stiffness matrix is regular (i.e., invertible).

This example illustrates:

  • Defining a structural system with bars, materials, and cross-sections

  • Applying supports and hinge conditions

  • Detecting insufficient constraints (loss of stiffness rank)

  • Querying whether the system is solvable or unstable

  • Visualizing the structural configuration

The example shows how sStatics automatically identifies instability. You can find the example as an executable Python file here.

Define the Structural System#

In this section, the static system is modeled. For a detailed step-by-step workflow, refer to the “Getting Started” example.

[1]:
# 1. Import required modules
from sstatics.core.preprocessing import (
    Node, Bar, Material, CrossSection, System
)
from sstatics.core.calc_methods import FirstOrder
from sstatics.core.postprocessing.graphic_objects import ObjectRenderer, SystemGeo

# 2. Define cross-section and material
cs = CrossSection(
    mom_of_int=2769,
    area=76.84,
    height=20,
    width=10,
    shear_cor=0.1
)
mat = Material(
    young_mod=21000,    # Young's modulus
    poisson=0.1,
    shear_mod=8100,
    therm_exp_coeff=0.1
)

# 3. Define nodes (supports intentionally insufficient)
node_1 = Node(0, 0, u='fixed', w='fixed')
node_2 = Node(200, 0)
node_3 = Node(400, 0, w='fixed')
node_4 = Node(600, 0)

# 4. Define bars with one hinge, producing a mechanism
bar_1 = Bar(node_1, node_2, cs, mat, hinge_phi_j=True)
bar_2 = Bar(node_2, node_3, cs, mat)
bar_3 = Bar(node_3, node_4, cs, mat)

bars = [bar_1, bar_2, bar_3]

# 5. Build the system
system = System(bars=bars)

# Show system graphic
ObjectRenderer(SystemGeo(system), 'mpl').show(show_axis=False)
../../_images/examples_02_firstorder_04_unstable_system_2_0.png

Check if the System is Solvable#

A system is considered solvable if it is stable. If the stiffness matrix of the system is singular, the system is unstable.

We then perform a first-order analysis, which computes the system stiffness matrix and checks equilibrium.
This step provides the mathematical foundation for determining whether the system is stable.

To verify stability, we use the method solvable.

  • If the system is stable, the method returns True.

  • If the system is unstable, the method returns False.

[2]:
# 6. Attempt structural analysis
solution = FirstOrder(system=system)

# 7. Check system stability
# solution.solvable → True if stiffness matrix is invertible, False otherwise
print("System solvable:", solution.solvable)
System solvable: False

In this example, the stiffness matrix is singular, and the terminal prints a corresponding warning. The method therefore returns False, indicating that the system is not solvable because it is unstable. Dadurch können nun keine Ergebnisgrößen, wie beispielsweise die Knotenverformungen oder Schnittkräfte erhalten werden.

Check if the System is Solvable#

We then perform a first-order analysis, which computes the system stiffness matrix and checks equilibrium.
This step provides the mathematical foundation for determining whether the system is stable.

To verify stability, we use the method solvable.

  • If the system is stable, the method returns True.

  • If the system is unstable, the method returns False.

[3]:
# Perform calculation
solution = FirstOrder(system=system)

# Check whether the system is solvable (stable) or not
print(solution.solvable)
False

In this example, the stiffness matrix is singular, and the terminal prints a corresponding warning. The method therefore returns False, indicating that the system is not solvable because it is unstable.

If we now want to study the displacement figure of this unstable system, often referred to as a kinematic chain, we first need to create a PolePlan.
This will be demonstrated in the Poleplan Examples.

In the example “PolePlan”, we will create a PolePlan object from the System object and visualize both the pole plan and the displacement figure.