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.