Computing Library › Verification Validation
Verification Validation

Richardson Extrapolation

Combine solutions on two or three meshes to estimate the exact answer and the discretization error, using the known order of accuracy.

Estimating the Limit

If a scheme converges at a known order and the meshes are in the asymptotic range, solutions on successively finer meshes approach the exact answer in a predictable pattern. Richardson extrapolation exploits that pattern to estimate the exact continuous solution from a small number of finite-mesh solutions, and hence to estimate the discretization error on each.

The Two-Mesh Formula

For solutions f1 (fine) and f2 (coarse) with refinement ratio r and order p, the extrapolated estimate of the exact value is f1 plus the difference (f1 minus f2) divided by (r to the power p, minus one). The correction term is also an estimate of the discretization error remaining on the fine mesh.

python

def richardson(f_fine, f_coarse, r=2.0, p=2.0):
    correction = (f_fine - f_coarse) / (r**p - 1.0)
    exact_est = f_fine + correction
    error_est = abs(correction)   # error on the fine mesh
    return exact_est, error_est

print(richardson(1.0025, 1.0100))  # -> estimate and error

Conditions for Validity

From Estimate to Safe Bound

Richardson extrapolation gives a point estimate of the error, but design work needs a bound, not a best guess. The Grid Convergence Index wraps the Richardson estimate in a safety factor to turn it into a conservative error band. Used carefully, with the order verified rather than assumed, Richardson extrapolation is the standard tool for turning a convergence study into a quantitative discretization-error estimate for the error budget.