Nodes

Nodes are lightweight geometry and identity objects. Solved displacements, forces, stresses, and strains are stored in analysis results rather than written back to nodes.

Creating nodes

Create a two-dimensional node from (x, y) coordinates:

from nusa import Node

node = Node((1.5, 2.0))

Coordinates are validated as finite two-component values and stored as a NumPy array.

Geometry access

Use the convenience properties or the coordinate array:

node.x
node.y
node.coordinates

A node can be moved by editing its coordinate array before running a new analysis. Existing StaticResult snapshots keep their own frozen coordinates.

Labels

Node.label is a public identifier. A model assigns an unused label automatically when a node is added without one, but user-supplied labels are also supported.

For example:

node = Node((0.0, 0.0))
node.label = "support-A"
model.add_node(node)

The numerical solver does not use public labels as array indices. NuSA keeps an internal contiguous node ordering, so sparse integers or string labels do not change the assembly layout.

No solved state on Node

NuSA 0.4 deliberately does not create attributes such as:

node.ux
node.uy
node.fx
node.fy

Read solved values from the analysis result instead:

result = model.solve()

result.displacement(node)
result.nodal_force(node)
result.reaction(node)

This allows one node/model definition to participate in multiple analyses while previous results remain independent snapshots.

API reference

Finite-element node entity.

class nusa.node.Node(coordinates)[source]

Bases: object

Geometry/topology point used by finite-element models.

Attributes:
coordinates
label
x
y
coordinates
property label
property x
property y