adaptive mesh refinement
A solution is rarely equally hard everywhere. Most of a domain may be smooth and boring, while all the action — a sharp boundary layer, a crack tip, a moving shock — crowds into a tiny region. Putting a uniformly fine mesh everywhere to resolve that one region wastes enormous effort on the easy parts. Adaptive mesh refinement is the smarter alternative: let the computation itself discover where it is struggling and put the small elements only there, leaving big cheap elements where the solution is gentle.
The engine that makes this possible is the a posteriori error estimator — 'a posteriori' meaning 'after the fact', computed from the numerical solution you already have, unlike the a priori bounds of Cea's lemma which need the unknown true solution. A typical residual-based estimator computes, on each element, how badly the discrete solution fails to satisfy the original PDE (the element residual) plus a jump term measuring the mismatch in fluxes across element edges. Big estimator means big error there. The loop is then SOLVE, ESTIMATE, MARK, REFINE: solve on the current mesh, estimate the per-element error, mark the elements with the largest estimators, refine just those (split each marked triangle into smaller ones), and repeat. The mesh grows fine exactly where it needs to, automatically.
The payoff is efficiency: to reach a target accuracy you may need orders of magnitude fewer unknowns than a uniform mesh, and for singular problems (re-entrant corners, point loads) adaptivity can RESTORE the optimal convergence rate that a uniform mesh loses. It is essential wherever the solution has localized features and the geometry is complex. The honest caveats: the estimator only bounds the true error up to constants (reliability and efficiency constants), good estimators are problem-specific and harder for nonlinear or non-self-adjoint equations, and refinement must keep the mesh conforming and well-shaped or it introduces its own errors. There are cousins — p-refinement (raise the polynomial degree instead of splitting elements) and hp-adaptivity (do both) — that can converge even faster for smooth solutions.
On an L-shaped domain, the solution of Laplace's equation has a singularity at the re-entrant corner; a uniform mesh converges only at the crippled rate h^(2/3). Adaptive refinement, repeatedly clustering tiny elements at that corner, recovers the optimal rate and reaches the same accuracy with a fraction of the unknowns.
Refine where the error lives — small elements at the corner, large elements elsewhere.
An error estimator estimates error; it does not guarantee it. Most estimators bound the true error only up to unknown constants, so 'estimator below tolerance' is a heuristic stopping rule, not a rigorous certificate, unless you use the rarer guaranteed/equilibrated estimators.