Nodes
Nodes, support fixities, and model planarization.
Asap.FIXITIES — Constant
FIXITIESMap from support-condition symbols to 6-entry DOF fixity vectors, ordered (Tx, Ty, Tz, Rx, Ry, Rz) with true = free. Matches the legacy fixDict exactly, so existing model-building code keeps its meaning.
Asap.Node — Type
Node{T<:Real}A structural node: a point in 3D space carrying six degrees of freedom — three translations (along global X, Y, Z) and three rotations (about global X, Y, Z).
Every node exposes all six DOF slots regardless of what connects to it. Which slots actually participate in a solve is decided later by activity analysis: a DOF touched by no element stiffness (e.g. the rotations of a node connected only to truss elements) is excluded automatically. This is what lets truss and frame elements mix freely in one model — there is no separate truss node type.
A Node is pure definition data. Analysis results (displacements, reactions) live in the results object returned by the solve, accessed as displacement(results, node) / reaction(results, node) — never on the node itself.
Fields
position::SVector{3,T}: coordinates in the global system [length]fixity::SVector{6,Bool}: support condition per DOF, ordered (Tx, Ty, Tz, Rx, Ry, Rz).true= free to move,false= fixed by a support (legacy convention preserved).id::Symbol: user tag for group queries (e.g.:support,:topchord)index::Int: position of this node in its model's node vector; assigned byprocess!,0until then. Internal bookkeeping — not user-set.
Constructors
Node(position, fixity::Symbol, id = :node) # common support types
Node(position, fixity::AbstractVector{Bool}, id = :node) # explicit DOFs
Node{T}(position, fixity, id) # explicit scalar typeposition may be any 3-element vector; it is converted to an SVector{3,T}.
Available fixity symbols (see FIXITIES):
| symbol | meaning |
|---|---|
:free | all six DOFs free |
:fixed | fully clamped (all six fixed) |
:pinned | translations fixed, rotations free |
:xfixed/:yfixed/:zfixed | one translation fixed, all else free |
:xfree/:yfree/:zfree | one translation free, all else fixed |
Examples
julia> Node([0.0, 0.0, 3.0], :pinned)
julia> Node([2.5, 0.0, 3.0], :free, :midspan)
julia> Node([5.0, 0.0, 0.0], [false, false, false, true, true, true]) # ≡ :pinnedSee also fixnode!, planarize!.
Asap.fixnode! — Method
fixnode!(node::Node, fixity::Symbol)Replace a node's support condition with one of the standard types in FIXITIES (e.g. :pinned, :fixed, :zfixed).
Asap.planarize! — Function
planarize!(nodes, plane = :XY)Constrain nodes to behave as a 2D structure in the given global plane by fixing the out-of-plane DOFs: the translation normal to the plane and the two rotations whose axes lie in the plane (e.g. for :XY: Tz, Rx, Ry).
Operates on a vector of nodes or a single node.