Elements

NuSA provides five finite-element formulations in nusa.element. Elements own connectivity, geometry-dependent formulation, and physical properties. Solved response is evaluated explicitly from the element displacement vector and stored in analysis results.

Common element contract

Every element has an element type, a label assigned by the model, and a tuple of connected nodes.

The numerical analysis asks an element for its stiffness matrix and evaluates its solved response from an explicit local displacement vector.

Conceptually:

Ke = element.get_element_stiffness()
values = element.compute_results(u_e)

Elements do not read solved displacement attributes from nodes and do not cache solved forces, stresses, or strains on themselves.

Spring

Spring is a two-node, one-dimensional elastic element.

Required property:

k

Positive spring stiffness.

Local displacement vector:

[ux_i, ux_j]

Canonical results:

force_i
force_j

Bar

Bar is a two-node axial element.

Required properties:

E

Young’s modulus.

A

Cross-sectional area.

Local displacement vector:

[ux_i, ux_j]

Canonical results:

force_i
force_j
axial_force
axial_stress

Positive axial force/stress denotes tension.

Truss

Truss is a two-dimensional, two-node axial element whose orientation maps its axial response into the global coordinate system.

Required properties are E and A.

Local/global element displacement vector used by the current formulation:

[ux_i, uy_i, ux_j, uy_j]

Canonical results:

axial_force
axial_stress

Beam

Beam is the current two-node Euler-Bernoulli beam formulation.

Required properties:

E

Young’s modulus.

I

Second moment of area.

Element displacement vector:

[uy_i, ur_i, uy_j, ur_j]

Canonical end actions:

shear_force_i
shear_force_j
bending_moment_i
bending_moment_j

LinearTriangle

LinearTriangle is a three-node constant-strain triangle (CST) for plane stress.

Required properties:

E

Young’s modulus.

nu

Poisson’s ratio.

t

Element thickness.

Element displacement vector:

[ux_1, uy_1, ux_2, uy_2, ux_3, uy_3]

The element additionally exposes explicit strain/stress evaluation:

strain = element.compute_strain(u_e)
stress = element.compute_stress(u_e)
values = element.compute_results(u_e)

Canonical results:

stress_xx
stress_yy
stress_xy
strain_xx
strain_yy
strain_xy

Validation

NuSA validates physical parameters when elements are created. Material/section quantities such as E, A, I, t, and spring stiffness must be finite and physically valid according to the corresponding formulation. Degenerate triangular geometry is also rejected.

For worked examples, see Examples.

API reference

class nusa.element.Bar(nodes, E, A)[source]

Bases: Element

Bar element for finite element analysis

nodesNode

Connectivity for element

Efloat

Young’s modulus

Afloat

Area of element

Attributes:
L

Length of element

Methods

compute_results(u_e)

Return canonical bar results from local displacements.

get_element_stiffness()

Get stiffness matrix for this element

property L

Length of element

compute_results(u_e)[source]

Return canonical bar results from local displacements.

get_element_stiffness()[source]

Get stiffness matrix for this element

The stiffness matrix for bar element is given by:

\[\begin{split}[k]_e = \frac{AE}{L} \begin{bmatrix} 1 & -1 \\ -1 & 1 \end{bmatrix}\end{split}\]

where

  • A - Cross-section of element

  • E - Young’s Modulus

  • L - Length of element

class nusa.element.Beam(nodes, E, I)[source]

Bases: Element

Beam element for finite element analysis

nodesNode

Connectivity for element

Efloat

Young’s modulus

Ifloat

Moment of inertia

Attributes:
L

Length of element

Methods

compute_results(u_e)

Return canonical beam end actions from local displacements.

get_element_stiffness()

Get stiffness matrix for this element

property L

Length of element

compute_results(u_e)[source]

Return canonical beam end actions from local displacements.

get_element_stiffness()[source]

Get stiffness matrix for this element

class nusa.element.Element(etype)[source]

Bases: object

Base class for finite elements.

Elements own formulation, connectivity, and physical properties. Solved response belongs to analysis results, not to the element instance.

class nusa.element.LinearTriangle(nodes, E, nu, t)[source]

Bases: Element

Linear triangle element for finite element analysis

nodesNode

Connectivity for element

Efloat

Young’s modulus

nufloat

Poisson ratio

tfloat

Thickness

Example::

n1 = Node((0,0)) n2 = Node((0.5,0)) n3 = Node((0.5,0.25)) e1 = LinearTriangle((n1,n2,n3),210e9, 0.3, 0.025)

Attributes:
A
B
D

Constitutive matrix

Methods

compute_results(u_e)

Return canonical CST stress/strain results from local displacements.

compute_strain(u_e)

Return the constant engineering strain vector for local displacements.

compute_stress(u_e)

Return the constant stress vector for local displacements.

get_element_stiffness()

Get stiffness matrix for this element

property A
property B
property D

Constitutive matrix

Currently only plane stress supported

compute_results(u_e)[source]

Return canonical CST stress/strain results from local displacements.

compute_strain(u_e)[source]

Return the constant engineering strain vector for local displacements.

compute_stress(u_e)[source]

Return the constant stress vector for local displacements.

get_element_stiffness()[source]

Get stiffness matrix for this element

class nusa.element.Spring(nodes, ke)[source]

Bases: Element

Spring element for finite element analysis

nodestuple

Connectivity for element given as tuple of Node objects

kefloat

Spring stiffness

Example

n1 = Node((0,0))
n2 = Node((0,0))
e1 = Spring((n1,n2), 1000)

Methods

compute_results(u_e)

Return canonical spring results from local displacements.

get_element_stiffness()

Get stiffness matrix for this element.

compute_results(u_e)[source]

Return canonical spring results from local displacements.

get_element_stiffness()[source]

Get stiffness matrix for this element.

The stiffness matrix for a spring element is defined by:

\[\begin{split}[k]_e = \begin{bmatrix} k & -k \\ -k & k \\ \end{bmatrix}\end{split}\]

where k is the spring stiffness.

Return a numpy array.

class nusa.element.Truss(nodes, E, A)[source]

Bases: Element

Truss element for finite element analysis

nodesTuple of Node

Connectivity for element

Efloat

Young modulus

Afloat

Area of element

Attributes:
L

Length of element

theta

Element angle, measure from X-positive axis counter-clockwise.

Methods

compute_results(u_e)

Return canonical truss results from global element displacements.

get_element_stiffness()

Get stiffness matrix for this element

property L

Length of element

compute_results(u_e)[source]

Return canonical truss results from global element displacements.

get_element_stiffness()[source]

Get stiffness matrix for this element

property theta

Element angle, measure from X-positive axis counter-clockwise.