3.6.19 · D5Spacecraft Structures & Systems Engineering

Question bank — FEM for structures — assembling global stiffness

1,716 words8 min readBack to topic

This is a rapid-fire misconception hunt for the global stiffness assembly step. Every item below is one line: read the prompt, cover the answer, then reveal. The answers are reasons, not verdicts — if you can't say why, you don't own the idea yet.

Before the traps, one figure and a tiny symbol dictionary so nothing below is a surprise.

Figure — FEM for structures — assembling global stiffness

The picture above shows all three ideas at once: on the left, one element's block being scatter-added into the overlapping slot of the big (note the shared entry that lands on top of an existing value and adds); in the middle, the local axes of a tilted bar and the rotation into global ; on the right, why bandwidth is small — each node only touches its immediate neighbours.


True or false — justify

Assembly means placing each element matrix into an empty slot of , one block per element.
False. Blocks overlap at shared DOFs; at those entries we add (superimpose) contributions. Replacing would delete a neighbouring element's stiffness.
in the two-bar truss because we made an arithmetic slip.
False — it is exactly right. Node 2 belongs to both bars, so both scatter into ; the correct action is .
The global stiffness is symmetric only if you build it in a symmetric order.
False. Symmetry comes from each being symmetric (Maxwell–Betti reciprocity); scatter-add preserves it regardless of element ordering.
Before boundary conditions, is invertible so we can just solve .
False. Un-constrained is only positive semi-definite — rigid-body modes give zero eigenvalues, so is singular. You must fix DOFs first (see Boundary Conditions in FEM).
A larger element stiffness matrix always means a larger global matrix.
False. The size of is set by the total DOF count (all mesh DOFs), not by any single element's block size. Two elements sharing all their nodes could leave unchanged.
The scatter-add algorithm gives a different than the formula .
False. They are identical — scatter-add is just the cheap way to evaluate that sum, exploiting that is the Boolean gather matrix (one per row, rest zeros).
Sparsity of is a numerical accident you should not rely on.
False. only if DOFs and share an element, which is a topological fact of the mesh. It is guaranteed and exploited by Sparse Matrix Storage.

Spot the error

"Element 1 uses DOFs [1,2] and element 2 uses DOFs [3,4], so the two-bar truss has a ."
Error: node 2 is shared, so its DOF appears in both elements. Correct numbering gives DOFs [1,2] and [2,3] → is , not .
"A bar resists transverse pushing, so its local stiffness has no zero rows."
Error: an axial bar has zero stiffness perpendicular to its axis (the direction) — transverse motion causes no strain. That is exactly why the local matrix has zero rows/columns for the DOFs.
"We transform each element to global coordinates after assembling ."
Error: the rotation (with built from the bar's direction cosines) must happen per element, before scatter — otherwise you would add incompatible coordinate systems. See Coordinate Transformations in FEM.
"I assembled , then set by deleting only row 1 to apply the fixed support."
Error: you must delete row 1 and column 1 (or use a penalty/partition scheme). Dropping only the row leaves non-square and destroys symmetry.
" in the two-bar truss must mean I forgot a contribution."
Error: it is correct. DOFs 1 and 3 belong to different elements and never share one, so no element ever writes to — a genuine structural zero.
"Since each is singular, the assembled must also be singular forever."
Error: individual element matrices are singular (rigid-body modes), but assembling many elements plus applying boundary conditions removes those modes and makes positive definite.
"Two elements meeting at a node have different displacements there, so I average them."
Error: compatibility forces a single shared displacement at the node — that is why they share a DOF. Averaging would violate the no-gap/no-overlap condition.

Why questions

Why do we add element contributions rather than overwrite them at a shared DOF?
Because total strain energy is additive: , and each element contributes independently. Superposition of stiffness follows directly from the sum in the energy expression.
Why is the localization matrix Boolean (only 0s and 1s)?
It merely selects which global DOFs feed element — no scaling, just picking. Each row has a single 1 pointing at the matching global DOF, which is what makes scatter-add exact.
Why is the bandwidth of roughly in a 2D mesh?
Bandwidth is the largest gap between the global DOF numbers of any two nodes that share an element. If you number an grid ( DOFs) row-by-row, neighbouring nodes differ by at most about one full row — so the nonzeros hug a band of width . A narrow band keeps direct solvers cheap.
Why does fixing a DOF turn a singular into an invertible one?
Fixing DOFs eliminates the rigid-body modes (free translations/rotations) that were the source of the zero eigenvalues, leaving for all nonzero admissible .
Why does the quadratic form equal the strain energy, and why does that guarantee is symmetric?
Because energy was built as that quadratic form; and any quadratic form only "sees" the symmetric part of a matrix, so the physically meaningful is symmetric.
Why transform element stiffness with into global coordinates before assembly rather than transforming ?
Each element has its own local axes; only after rotating each into the common global frame do their shared-DOF entries live in the same coordinate directions and become addable.
Why does refining the mesh increase but keep sparse?
More elements/nodes means more DOFs, but each new node still only connects to its few immediate neighbours — connectivity stays local, so nonzeros per row stay bounded. See Mesh Refinement and Convergence.

Edge cases

What happens to if a node is left dangling (belongs to no element)?
Its rows and columns are entirely zero, so is singular even after fixing supports — the free node has no stiffness and produces a spurious rigid-body mode.
Two identical elements are stacked on the same two nodes (duplicated element). What does assembly give?
Their contributions add, doubling the shared block — physically two parallel springs, so the combined stiffness is twice a single element's. Correct, but a warning sign if unintended.
A bar element has zero length (). What breaks in assembly?
The factor blows up to infinity, injecting an ill-conditioned near-rigid link into and wrecking the solve — degenerate elements must be caught during meshing.
If a bar is perfectly transverse to a load (aligned so its axis is from the force), how does it enter ?
After the transform its stiffness lands entirely in one global direction; in the perpendicular direction it contributes zero, so it cannot carry that load component at all.
What if two elements share a node but you accidentally give them different global DOF numbers there?
You break compatibility — the shared point splits into two independent points. grows, the -style summation never happens, and the structure behaves as if disconnected at that node.
What does an all-zero row in the assembled, un-reduced tell you before you even solve?
That DOF is unrestrained by any element — either a genuine free/rigid mode or a modelling error (orphan node). Solvers will report singularity until it is constrained or connected.

Recall One-line survival summary

Assembly = transform each to global with , then scatter-add its entries into at the shared global DOFs picked out by ; symmetry and sparsity come from physics and topology; singularity is cured only by boundary conditions.

Back to the parent: FEM for structures — assembling global stiffness · overview in Finite Element Method Overview · element blocks in Element Stiffness Matrices.