Worked examples — FEM for structures — assembling global stiffness
This page is the "battle-tested" companion to the parent topic on assembling global stiffness. The parent showed you how the scatter-add works. Here we drill every situation you might meet: shared nodes, disconnected pieces, parallel bars, rotated bars, degenerate (rigid-body) matrices, and the exam twists that trip people up.
Before we start, one promise: no symbol is used before it is drawn. If you have never seen a stiffness matrix, read the parent's "Core Idea" first — but everything below re-earns its notation.
Recall Three words we will lean on constantly
Node ::: a point in the mesh where elements meet; displacements are measured here. DOF (degree of freedom) ::: one independent way a node can move (e.g. horizontal, or vertical). We number them across the whole mesh. Scatter-add ::: take the small element matrix and add each of its numbers into the big global matrix , at the rows/columns given by that element's global DOF numbers.
The scenario matrix
Every assembly problem is a mix of the cells below. The worked examples that follow are labelled with the cell(s) they hit, so together they cover the whole table.
| Cell | What makes it tricky | Covered by |
|---|---|---|
| A. Series chain (shared interior node) | overlapping entries must be summed | Ex 1 |
| B. Disconnected / no shared node | zero coupling entry; block-diagonal | Ex 2 |
| C. Sign bookkeeping | why off-diagonals are negative, diagonals positive | Ex 3 |
| D. Zero / degenerate (rigid-body) matrix | before boundary conditions | Ex 4 |
| E. Rotated element (transformation) | local global, angle ; and the limit | Ex 5 |
| F. Vertical bar (limiting angle ) | : which entries survive? | Ex 6 |
| G. Parallel bars (same node pair) | two elements share both nodes stiffnesses add | Ex 7 |
| H. Real-world word problem | spacecraft bracket, pick DOFs yourself | Ex 8 |
| I. Exam twist (DOFs mis-numbered) | non-adjacent nodes scattered off-diagonals | Ex 9 |
Cell A — series chain (shared interior node)
Forecast: guess which single entry will be instead of before reading on.

Step 1 — place Bar I at DOFs . Why this step? Bar I only touches DOFs 1 and 2, so its block lands in that corner; row/col 3 stays zero because Bar I "doesn't know" node 3 exists.
Step 2 — place Bar II at DOFs . Why this step? Bar II touches DOFs 2 and 3. Its top-left lands on top of the already at — that is the overlap.
Step 3 — sum the overlap (the whole point). Why this step? Node 2 belongs to both bars, so its self-stiffness . Look at the middle node in the figure: two springs tug on it, so it is twice as resistant.
Verify: every row sums to (, , ). A rigid slide of the whole chain stretches nothing, so zero net force — correct. because nodes 1 and 3 share no element. ✓
Compare with Sparse Matrix Storage: notice is tridiagonal — most entries are already zero.
Cell B — disconnected pieces (no shared node)
Forecast: will (coupling the two pieces) be zero or nonzero?
Step 1 — scatter both blocks. Why this step? Bar I fills the top-left ; Bar II fills the bottom-right . Nothing overlaps.
Step 2 — read off the coupling entry. . Why this step? only if DOFs share an element. DOFs 2 and 3 belong to different, unconnected bars.
Verify: is block-diagonal — two independent springs, exactly as physics demands. Each block is singular (a lone bar can slide freely), foreshadowing Cell D. ✓
Cell C — sign bookkeeping
Forecast: predict the sign of the force on node when node moves forward.
Step 1 — impose . Force vector . Why this step? Column of is the force answer to "unit push at ."
Step 2 — interpret the two numbers. (the stretched bar pulls back — restoring, positive diagonal). (the same bar drags forward — negative off-diagonal). Why this step? Newton's third law: the bar pulls its two ends toward each other.
Verify: : no external agent, internal forces cancel. This is why every off-diagonal coupling is negative and diagonals are positive for spring-like elements. ✓
Cell D — zero / degenerate matrix (rigid-body mode)
Forecast: guess the determinant before computing.
Step 1 — test the rigid-body vector . Why this step? If sliding the whole structure produces zero force, that displacement is a zero-energy (rigid-body) mode, so .
Step 2 — confirm . Expand: . Why this step? A zero eigenvalue zero determinant no unique solution — the structure would float in space.
Step 3 — apply a boundary condition (fix node 1). Delete row/col 1: , . Why this step? Removing the rigid-body freedom (nailing one node) makes positive-definite and invertible — see Boundary Conditions in FEM.
Verify: original determinant (singular ✓), reduced determinant (solvable ✓). This is exactly why FEM code always applies BCs before solving in Direct vs Iterative Solvers. ✓
Cell E — rotated element (transformation), with the limit
Forecast: will the horizontal-only entry at be the full , or a fraction of it?

Step 1 — why we need a transformation at all. A bar only resists motion along its own length. In its local axis , the stiffness relates the two axial displacements : Why this step? The global directions are not aligned with the bar, so a global push only partly stretches it. We must project.
Step 2 — write the transformation matrix explicitly. Let . The axial displacement of a node is its motion projected onto the bar direction: . Stacking this projection for both nodes A and B (global DOF order ): Why this step? is the rectangular dictionary that turns 4 global movements into the 2 axial ones the bar actually feels. Its top row projects node A, its bottom row node B.
Step 3 — sandwich to get the global stiffness . Why this step? (a matrix) pushes the axial stiffness back out into the 4 global DOFs — each entry is " scaled by how much those two directions line up with the bar." This is the standard bar result from Coordinate Transformations in FEM.
Step 4 — plug : , so . Why this step? At a horizontal push and a vertical push each stretch the bar equally, so and share the stiffness fifty-fifty.
Step 5 — the limit (horizontal bar): . , so Why this step? A horizontal bar has no vertical stiffness (its -rows/cols vanish); only the -DOFs carry the 1-D pattern — exactly the plain bar of Cell A embedded horizontally.
Verify: at , — a fraction of , confirming the forecast. At , (full) and vertical stiffness . Both matrices have zero row sums (rigid slide stretches nothing). Together with Cell F below (), the three angles bracket the whole range. ✓
Cell F — vertical bar (limiting angle )
Forecast: guess whether the horizontal stiffness is zero or nonzero.
Step 1 — substitute . , so Why this step? A vertical bar cannot resist horizontal motion — pushing a vertical rod sideways just swings it, no stretch. So all -rows/cols are zero.
Step 2 — interpret the surviving block. Only the -DOFs (rows/cols 2 and 4) carry the familiar . Why this step? This matches Cell C's 1-D bar, just embedded in the vertical direction.
Verify: compare with Ex 5 as sweeps : the -stiffness slides and the -stiffness slides — perfectly complementary, no jumps. Zero -stiffness is physically correct, and warns you an unbraced vertical bar is a singular sub-system needing bracing/BCs. ✓
Cell G — parallel bars (same node pair)
Forecast: will the two stiffnesses add or average?
Step 1 — scatter Bar I (DOFs ). Why this step? Bar I touches both DOFs, filling the whole .
Step 2 — scatter Bar II onto the same DOFs . Why this step? Both elements share both nodes, so every entry overlaps and we sum entry-by-entry. This is the parallel-spring rule falling straight out of scatter-add.
Verify: the combined stiffness is — springs in parallel add (not average), exactly as elementary physics says. Row sums still . If (no doubler) we recover the single bar. ✓
Cell H — real-world word problem
Forecast: will the tip move more or less than a single bar of the same load would?
Step 1 — compute the spring constant. . Why this step? Turns material + geometry into one number; both bars share it.
Step 2 — assemble & apply BC (reuse Ex 1 + Ex 4). Reduced system (drop DOF 1): Why this step? Node 1 is fixed, so its row/column is removed before solving.
Step 3 — solve. From row 1: . Row 2: . Substitute: , . Why this step? Two bars in series are softer (add compliances), so the tip moves twice a single bar's stretch.
Verify: units ✓. Series check: each bar stretches , total ✓. Forecast confirmed: more than a single bar. ✓
Cell I — exam twist (non-adjacent DOF numbers)
Forecast: will still be tridiagonal, or will nonzeros appear off the diagonal band?
Step 1 — scatter Bar I into rows/cols . Why this step? The block entries of map to global using the DOF list .
Step 2 — scatter Bar II into rows/cols . Why this step? Node 3 (the shared one) is index 3 globally, so accumulates from both bars.
Step 3 — write the assembled matrix. Why this step? Reorder rows/cols and you recover Ex 1's tridiagonal matrix — same physics, permuted labels.
Verify: (shared node ✓); row sums zero ✓; the nonzero sit off the tight band — bad numbering widens the bandwidth, hurting Sparse Matrix Storage and solver cost. Good node ordering matters — connect this to Mesh Refinement and Convergence. ✓
Recall Rapid self-test
Why is in the series chain? ::: Node 2 is shared by both bars; each adds . When is guaranteed? ::: When DOFs share no common element. Two bars between the same node pair — do stiffnesses add or average? ::: They add: (parallel springs). Why is unconstrained singular? ::: Rigid-body motion is a zero-energy mode . At what is the -stiffness of the bar? ::: , then , then .
For the mechanics of each see Element Stiffness Matrices; for the big-picture pipeline see Finite Element Method Overview.