The Direct Stiffness Method: An Introduction
Ask a structure a question — how far does this joint move, what moment does this column carry — and the honest answer is that you cannot know one without knowing all of them. A frame is not a set of separate members; push on one and every other one takes a share. The direct stiffness method is the way that mutual dependence is written down so that a computer can solve it: every member's resistance to displacement becomes a small matrix, the matrices are added together in one set of axes, and the structure becomes a system of linear equations.
The direct stiffness method turns a structure into one matrix equation, K u = F: displacements are the unknowns, and everything an engineer actually wants — reactions, member forces, deflections — is recovered from them afterwards.
Forces or displacements: which are the unknowns?
There are two ways to analyse an indeterminate structure, and they differ in what they choose not to know.
The force method — the one taught as consistent deformation or virtual work — picks redundant forces as unknowns, releases them, and imposes compatibility. It is excellent by hand on a small frame and awkward to program: choosing which forces to release is a judgement, and a different choice gives a different set of equations.
The displacement method — slope deflection, moment distribution, and the stiffness method — picks joint displacements as unknowns and imposes equilibrium at each joint. The unknowns pick themselves: they are the ways each joint can move. There is no judgement to make, which is exactly what makes it programmable. The direct stiffness method is the displacement method arranged as matrix algebra.
Degrees of freedom
A degree of freedom is one way one joint can move. In a plane frame every joint has three: a translation along global x, a translation along global y, and a rotation about the z axis out of the page. A structure with n joints therefore has 3n degrees of freedom, and the same number of equilibrium equations — one for each.
That is the size of the problem. Ten joints is thirty unknowns; a hundred joints is three hundred. No one solves those by hand, and no one has to: they are linear, and linear systems of that size are trivial for a computer.
| Plane truss | Two degrees of freedom per joint. Members carry axial force only, so joint rotation has nothing to resist it. |
|---|---|
| Plane frame | Three per joint: two translations and a rotation. This is what the analysis tool on this site solves. |
| Space frame | Six per joint: three translations and three rotations. The same method, larger matrices. |
What "stiffness" means here
Stiffness is force per unit displacement. A spring with k = 5 kN/mm needs 5 kN to stretch it one millimetre; that number is its stiffness, and F = k u is the whole of its behaviour.
A structural member is a spring with several ends and several ways of moving, so one number is not enough. A plane frame member has three degrees of freedom at each of its two ends, six in all, and its stiffness is a 6×6 matrix. Each column answers one question: if this one degree of freedom is displaced by one unit and all five others are held at zero, what forces must be applied at the six ends to hold that shape? That is all a stiffness matrix ever is — six answers to six questions, side by side.
The two-spring structure
The whole method fits into an example small enough to check on paper. Two springs in a line: spring 1 from joint A to joint B with stiffness k1, spring 2 from B to C with stiffness k2. Joint A is held; a force P is applied at C.
Each spring's stiffness matrix, in the one direction it can move, is
| +k | −k |
| −k | +k |
The signs say what everyone already knows: pulling the far end away stretches the spring, and holding the near end takes the same force back. Now add the two into a structure matrix over the three joints A, B, C — spring 1 contributes to rows and columns A and B, spring 2 to B and C — and the joint they share simply gets both:
| A | B | C | |
|---|---|---|---|
| A | k1 | −k1 | 0 |
| B | −k1 | k1+k2 | −k2 |
| C | 0 | −k2 | k2 |
This addition — each member's terms dropped into the rows and columns of the joints it connects, overlapping where members meet — is the "direct" in direct stiffness. A frame differs from this only in that its members are inclined, so their matrices have to be rotated first, and its members are 6×6 rather than 2×2.
The six steps
Every program that solves a frame does these, in this order. The five guides after this one are these steps, one at a time.
- Member stiffness in local axes. Write each member's 6×6 matrix along and across itself, where the terms are simple: EA/L for stretching, 12EI/L³ and 4EI/L for bending.
- Rotate into global axes. A column and a beam meeting at a corner must be described in one common set of axes before their stiffnesses can be added.
- Deal with loads between the joints. The equation only has room for loads at joints, so a load along a member is replaced by the joint loads that produce the same joint displacements — and the member's own share is added back at the end.
- Assemble. Add every member's matrix into the structure matrix through the joints it connects, exactly as the two springs above.
- Apply the supports and solve. A structure floating in space has no unique answer; the restraints are what make the equations solvable. Partition them off and solve for the free displacements.
- Recover what was wanted. Reactions from the restrained rows, member end forces from each member's own matrix, and the axial, shear, moment and deflection diagrams from those.
Why it is worth understanding, not just running
A program will answer any model you give it, including a wrong one. Knowing where the equations come from is what lets you read its answers:
- "The structure is a mechanism." The stiffness matrix turned out singular — some displacement costs no force. That is a missing restraint or a member missing from a joint, not a numerical hiccup.
- A joint that moves far more than expected. Usually a section property entered in the wrong unit: I in mm⁴ where the program expected m⁴ is a factor of 10¹².
- Load combinations are free. Because the method is linear, a combination is the factored sum of the cases, and each case costs almost nothing once the matrix has been factorised — which is why checking twenty combinations is not twenty times the work.
Next: where a single member's stiffness comes from, term by term, and why 12EI/L³ appears where it does.