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.