Truss elements
A two-dimensional truss element carries axial load while its orientation maps
that axial behavior into global x and y directions. Each node contributes
ux and uy displacement DOFs, with corresponding fx and fy
forces.
Use nusa.model.TrussModel with nusa.element.Truss.
Element properties
A truss element requires Young’s modulus E and cross-sectional area A:
element = Truss((n1, n2), E=30e6, A=2.0)
Its canonical result contains:
axial_force
axial_stress
Example: three-member truss
The following example builds a three-member planar truss, applies a vertical load, visualizes the problem definition, solves it, and plots the deformed shape.
1# -*- coding: utf-8 -*-
2# ***********************************
3# Author: Pedro Jorge De Los Santos
4# E-mail: delossantosmfq@gmail.com
5# License: MIT License
6# ***********************************
7
8import matplotlib.pyplot as plt
9
10from nusa import Node, Truss, TrussModel, plot_model
11
12
13def build_model():
14 """Build Logan's three-member truss example."""
15 E = 30e6
16 A = 2.0
17 P = 10e3
18
19 model = TrussModel("Truss Model")
20 n1 = Node((0.0, 0.0))
21 n2 = Node((0.0, 120.0))
22 n3 = Node((120.0, 120.0))
23 n4 = Node((120.0, 0.0))
24
25 model.add_nodes([n1, n2, n3, n4])
26 model.add_elements([
27 Truss((n1, n2), E, A),
28 Truss((n1, n3), E, A),
29 Truss((n1, n4), E, A),
30 ])
31 model.add_force(n1, (0.0, -P))
32 model.add_constraint(n2, ux=0.0, uy=0.0)
33 model.add_constraint(n3, ux=0.0, uy=0.0)
34 model.add_constraint(n4, ux=0.0, uy=0.0)
35 return model
36
37
38def main():
39 model = build_model()
40 plot_model(model)
41
42 result = model.solve()
43 result.plot_deformed_shape()
44 plt.show()
45
46
47if __name__ == "__main__":
48 main()
Problem and solved visualization
The undeformed problem definition is visualized from the model:
from nusa import plot_model
plot_model(model)
The solved shape is visualized from the result:
result = model.solve()
result.plot_deformed_shape()
Important result queries
Nodal displacement:
result.displacement(n1)
Support reaction:
result.reaction(n2)
Axial member response:
result.element_result(model.elements[0])["axial_force"]
The model stores geometry and supports; the StaticResult stores the solved
state used for deformation plots and member forces.