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:
kPositive 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:
EYoung’s modulus.
ACross-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:
EYoung’s modulus.
ISecond 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:
EYoung’s modulus.
nuPoisson’s ratio.
tElement 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:
ElementBar element for finite element analysis
- nodes
Node Connectivity for element
- Efloat
Young’s modulus
- Afloat
Area of element
- Attributes:
LLength of element
Methods
compute_results(u_e)Return canonical bar results from local displacements.
Get stiffness matrix for this element
- property L
Length of element
- nodes
- class nusa.element.Beam(nodes, E, I)[source]
Bases:
ElementBeam element for finite element analysis
- nodes
Node Connectivity for element
- Efloat
Young’s modulus
- Ifloat
Moment of inertia
- Attributes:
LLength of element
Methods
compute_results(u_e)Return canonical beam end actions from local displacements.
Get stiffness matrix for this element
- property L
Length of element
- nodes
- class nusa.element.Element(etype)[source]
Bases:
objectBase 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:
ElementLinear triangle element for finite element analysis
- nodes
Node 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
DConstitutive 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 stiffness matrix for this element
- property A
- property B
- property D
Constitutive matrix
Currently only plane stress supported
- nodes
- class nusa.element.Spring(nodes, ke)[source]
Bases:
ElementSpring element for finite element analysis
- nodestuple
Connectivity for element given as tuple of
Nodeobjects- 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 stiffness matrix for this element.
- class nusa.element.Truss(nodes, E, A)[source]
Bases:
ElementTruss element for finite element analysis
- nodesTuple of
Node Connectivity for element
- Efloat
Young modulus
- Afloat
Area of element
Methods
compute_results(u_e)Return canonical truss results from global element displacements.
Get stiffness matrix for this element
- property L
Length of element
- property theta
Element angle, measure from X-positive axis counter-clockwise.
- nodesTuple of