Home / Articles / Finite Elements FEM-01
Refining the Mesh Is Not Always the Answer
When a finite element result is wrong, the reflex is more elements. This article describes a case where one element gives the exact answer and thirty-two do not. The difference is not in the mesh but in how the distributed load is carried to the nodes.
1. What finite elements solve
In the direct stiffness method a structure is divided into elements connected at their ends. For each element a stiffness matrix relating end displacements to end forces is written; these are summed at shared nodes to assemble the system matrix, and
Programs such as ETABS, SAP2000 and ABAQUS do this in the background. The "black box" feeling usually comes from that transfer being invisible.
2. The hidden privilege of the beam element
The bending part of a 2D frame element rests on cubic Hermite shape functions. This is not an arbitrary choice: with no distributed load inside the element, the Euler–Bernoulli beam equation is
This is a marked difference from continuum elements (plane stress, solid). There the shape functions do not reproduce the true solution and mesh refinement is genuinely necessary. The beam element is privileged — and that privilege is lost in the next section.
3. The problem: a distributed load does not sit at a node
When a uniformly distributed load acts on a beam, d⁴v/dx⁴ = 0 no longer holds inside the element:
But it does not end entirely. If the {F} vector is built correctly, the cubic approximation can still give the exact answer at the nodes. The question is how w is carried to the nodes.
4. Two routes: lumped and consistent
The lumped approach
The intuitive route: share the load out to the nodes. For an element of length ℓ the total load is wℓ; half goes to one end, half to the other.
The consistent load vector
The correct route builds the equivalence not from force balance but from virtual work: the nodal loads are chosen so that they do the same virtual work as the actual distributed load. Integrating over the shape functions produces a moment term as well:
5. Numerical comparison
Fixed cantilever, uniformly distributed load. The closed-form solution is δ = wL⁴/(8EI) = —. The table below is produced by the solver when the page loads.
| Elements | Lumped | Error | Consistent | Error |
|---|---|---|---|---|
| computing… | ||||
6. Why the consistent load is exact
The consistent load vector represents exactly the effect at the nodes of the distributed load inside the element. The fixed-end moment of a beam is wℓ²/12; the consistent vector transfers precisely that to the node. The system equation then becomes identical to the one that gives the nodal displacements under the real loading.
Because the lumped approach omits that pair of moments, it leaves the element ends freer than they really are in a cantilever. A freer end rotates more and produces more deflection — which is why the lumped column runs high in this table.
7. Convergence order: O(h²)
The lumped approach is wrong but not inconsistent: it approaches the correct answer as the mesh is refined. Watch the error column — at each refinement the error is divided by exactly four.
A useful tool follows from this: you do not need to know the exact solution to know whether a model is converging. It is enough to watch how the difference between successive meshes shrinks.
8. The limit: the element INTERIOR is not exact
The direct consequence: if you care about the maximum moment or deflection inside an element, mesh refinement is still required. The tip deflection of a single-element cantilever is exact, but the mid-span deflection is not. Internal force diagrams likewise improve as the element count rises.
So we are not saying "mesh refinement is unnecessary". We are saying that mesh refinement does not fix a wrong load vector; it only slowly covers it up.
9. The engine's own audit
The figures in this article come from the site's solver, engine/frame-solver.js. While preparing the article, the solver was audited against six independent closed-form solutions:
| Check | Closed form | Solver | Status |
|---|---|---|---|
| computing… | |||
10. What to do in practice
- Define the distributed load to the program itself rather than splitting it to nodes by hand. Commercial programs build the consistent vector themselves; a user who "shares the load out to the nodes" loses that advantage.
- If a result looks suspicious, look at the load definition first, not the mesh. Refining is expensive and does not fix a wrong load vector.
- Test convergence by the error ratio. Solve two meshes; a division by four is the expected behaviour. If it does not divide, something else is wrong with the model.
- Refine the mesh for quantities inside the element. Exact nodal results do not mean exact diagrams.
- Test the program with a simple closed-form case. The first thing to do with new software is to run a known solution such as δ = PL³/3EI.
11. Test yourself
- If you split a cantilever with a tip point load into two elements, does the result change? Why?
- Why are the moment terms of the consistent load vector equal and opposite, −wℓ²/12 and +wℓ²/12?
- You doubled the mesh and the result changed by 8%; you doubled it again and it changed by 2%. Is this the expected behaviour? How would you estimate the converged value?
- If the tip deflection of a single-element cantilever is exact, why is the mid-span deflection not?
- Does a single plane-stress element also give the exact answer? How does it differ from the beam element?
References
- The direct stiffness method and Hermite shape functions — standard finite element results, independent of any national code.
- Derivation of the consistent load vector through virtual work, and its identity with the fixed-end moment wℓ²/12.
- For course modules and MATLAB applications: Kwon, Y.W. & Bang, H., The Finite Element Method using MATLAB. The exposition and derivations here are our own, and all figures come from our own engine; the source is cited for topic coverage and sequence.
All figures in this article are produced by engine/frame-solver.js and separately pinned in tests/frame-solver.test.js (20/20). Verification is not by comparison with third-party output but against closed-form elasticity solutions.
Mesh refinement does not fix a wrong load vector; it only slowly covers it up.