Spring elements

A spring element represents a one-dimensional elastic connection with stiffness k. Each spring node contributes one displacement degree of freedom, ux, with corresponding nodal force fx.

Use nusa.model.SpringModel together with nusa.element.Spring.

Element definition

e1 = Spring((n1, n2), k=1000.0)

For a two-node spring, the local solved response contains the two end forces:

result.element_result(e1)

which provides force_i and force_j.

Example: spring assemblage

This example contains three springs and four nodes. Two nodes are restrained and a horizontal force is applied to the internal assemblage.

 1# -*- coding: utf-8 -*-
 2# ***********************************
 3#  Author: Pedro Jorge De Los Santos
 4#  E-mail: delossantosmfq@gmail.com
 5#  License: MIT License
 6# ***********************************
 7
 8from nusa import Node, Spring, SpringModel
 9
10
11def test1():
12    """Logan (2007), Example 2.1."""
13    P = 5000.0
14    k1, k2, k3 = 1000.0, 2000.0, 3000.0
15
16    model = SpringModel("2D Model")
17    n1, n2, n3, n4 = [Node((0.0, 0.0)) for _ in range(4)]
18    e1 = Spring((n1, n3), k1)
19    e2 = Spring((n3, n4), k2)
20    e3 = Spring((n4, n2), k3)
21
22    model.add_nodes([n1, n2, n3, n4])
23    model.add_elements([e1, e2, e3])
24    model.add_force(n4, (P,))
25    model.add_constraint(n1, ux=0.0)
26    model.add_constraint(n2, ux=0.0)
27
28    result = model.solve()
29
30    print("Nodal displacements")
31    print("UX3:", result.displacement(n3)["ux"])
32    print("UX4:", result.displacement(n4)["ux"])
33
34    print("\nSupport reactions")
35    print("R1:", result.reaction(n1)["fx"])
36    print("R2:", result.reaction(n2)["fx"])
37
38    print("\nElement forces")
39    for element in (e1, e2, e3):
40        print(element.label, result.element_result(element))
41
42    return result
43
44
45if __name__ == "__main__":
46    test1()

Important result queries

Nodal displacement:

result.displacement(n3)["ux"]

Support reaction:

result.reaction(n1)["fx"]

Element end forces:

result.element_result(e1)

A spring model is a useful first NuSA problem because it exposes the complete Model -> solve -> StaticResult workflow with only one DOF per node.