---
title: Output error estimation
summary: The adjoint-weighted-residual estimate predicts the change of an output between polynomial degree p and p + 1 from a single linear solve. Its effectivity is measured against the actually converged p + 1 solution.
section: verification
order: 9
level: 2
study: output_error
keywords: [error estimate, effectivity, adjoint-weighted residual, superconvergence]
---
<!-- gyre docs: expanded Markdown of verification/output-error.md (generated tables, verification numbers and chart data are written out). Base level of this page: L2 Practice; passages at another level are bracketed by 'begin level N' / 'end level N' comments and start with [LN Name]. Built from revision ceb1f4b0be. -->

**Verification status: Output error estimation** (study `output_error`): **PASSED**, 5 of 5 checks passed, 367.7 s.

Inviscid subsonic flow over a smooth Gaussian bump. The exact flow is isentropic, so the entropy error measures solution accuracy directly. For the drag coefficient the adjoint-weighted residual predicts the change of the output between degree p and p + 1 from a single linear solve; effectivity compares that prediction with the actually converged p + 1 solution.

| Check | Value | Expected | Result |
|---|---|---|---|
| p = 1: effectivity on finest mesh | 0.93304 | 0.7 … 1.3 | pass |
| p = 1: error remaining after correction (finest mesh) | 0.0486938 | < 0.25 | pass |
| p = 2: effectivity on finest mesh | 0.966676 | 0.7 … 1.3 | pass |
| p = 2: error remaining after correction (finest mesh) | 0.0216164 | < 0.25 | pass |
| p = 2: entropy-error order | 3.80336 | >= 2.5 (design rate p + 1 = 3, tolerance 0.5) | pass |

Run notes: With p = 1 the wall is piecewise linear, and the entropy-error order is reported, not required: it was 0.09 on these meshes, against a design rate of 2. Spurious entropy generated at the kinks of a polygonal wall need not decay at the design rate, the classical argument for curved elements. The effectivity checks do apply at p = 1: the p = 2 space that the estimate targets has a curved wall.

Provenance: gyre 0.4.0; revision `39979fcf90` (commit `39979fcf902ad6116eb550b881b4278d4599c8e2`); 2026-11-12T11:33:17-0500; device cpu; quick suite. **Revision check: Same code as this build.** Produced by 39979fcf902ad6116eb550b881b4278d4599c8e2. Every commit between it and the commit this site was built from (ceb1f4b0bed41de53e586df10858079f5a2bcdd8) changes only documentation text, evidence records or bookkeeping: the code is the same. Full record: [output_error.json](../data/verification/output_error.json).

The test case is inviscid subsonic flow over a smooth Gaussian bump in a channel. The exact
flow is isentropic, so the entropy error is a direct measure of solution accuracy:

**Chart: Entropy error** (Output error estimation). Convergence chart of L2 entropy error against h (1 / nx), x axis log, y axis log; 2 series. The table holds the plotted data. Reference slopes drawn: 2 (h^2), 3 (h^3).

| h (1 / nx) | p = 1 | p = 2 |
|---|---|---|
| 0.0833333 | 0.00199609 | 0.0011528 |
| 0.0416667 | 0.00188038 | 8.2571e-05 |

Provenance: gyre 0.4.0; revision `39979fcf90` (commit `39979fcf902ad6116eb550b881b4278d4599c8e2`); 2026-11-12T11:33:17-0500; device cpu; quick suite. **Revision check: Same code as this build.** Produced by 39979fcf902ad6116eb550b881b4278d4599c8e2. Every commit between it and the commit this site was built from (ceb1f4b0bed41de53e586df10858079f5a2bcdd8) changes only documentation text, evidence records or bookkeeping: the code is the same. Full record: [output_error.json](../data/verification/output_error.json).

<!-- begin level 2 (Practice) -->
**[L2 Practice] Why p = 1 stands apart**

Elements are isoparametric: the geometry is interpolated at the solution degree. At $p = 1$ the
wall is therefore a polygon, and each kink generates spurious entropy that need not decay at
the design rate — the classical observation that motivated curved elements (Bassi and Rebay,
1997). The entropy-order check applies to $p \ge 2$; at $p = 1$ the order is reported, not
required, and the run notes under the status state the order that was measured. The
effectivity checks do apply at $p = 1$: the $p = 2$ space that the estimate targets has a
curved wall. On curved walls, use $p \ge 2$.

<!-- end level 2 -->

## Effectivity

**Table: Adjoint-weighted-residual estimate versus the p + 1 solution** (Output error estimation)

| mesh | p | cd (p) | estimate δ | corrected | cd (p + 1, converged) | effectivity | remaining / original error |
|---|---|---|---|---|---|---|---|
| 12x4 | 1 | 0.0177275 | -0.00857008 | 0.00634203 | 0.00569478 | 0.929779 | 0.0537907 |
| 24x8 | 1 | 0.012233 | -0.00806656 | 9.2333e-04 | 3.4443e-04 | 0.93304 | 0.0486938 |
| 12x4 | 2 | 0.00569478 | -0.0026344 | 5.0612e-04 | 1.4077e-04 | 0.878207 | 0.065781 |
| 24x8 | 2 | 3.4443e-04 | -2.0704e-04 | 2.1391e-05 | 1.4254e-05 | 0.966676 | 0.0216164 |

Provenance: gyre 0.4.0; revision `39979fcf90` (commit `39979fcf902ad6116eb550b881b4278d4599c8e2`); 2026-11-12T11:33:17-0500; device cpu; quick suite. **Revision check: Same code as this build.** Produced by 39979fcf902ad6116eb550b881b4278d4599c8e2. Every commit between it and the commit this site was built from (ceb1f4b0bed41de53e586df10858079f5a2bcdd8) changes only documentation text, evidence records or bookkeeping: the code is the same. Full record: [output_error.json](../data/verification/output_error.json).

<!-- begin level 2 (Practice) -->
**[L2 Practice] How to read the table**

For each mesh and degree $p$: the output computed at degree $p$; the adjoint estimate $\delta$ of
the change to degree $p+1$; the corrected output; and the output of an actual, fully converged
$p+1$ computation. **Effectivity** is the ratio of the predicted to the actual change — one is
perfect. The last column is the error that remains after correction relative to the error
before.

<!-- end level 2 -->

**Chart: Drag error: raw and adjoint-corrected** (Output error estimation). Convergence chart of |cd − reference| against h (1 / nx), x axis log, y axis log; 4 series. The table holds the plotted data. Reference: finest mesh at degree 4, a solution used by no plotted point and no estimate. It differs from the degree-3 output on the same mesh by 1.4e-05; the reference is itself a computed value, and differences of that size or below are not resolved. Corrected outputs are the injected p + 1 output plus the adjoint estimate.

| h (1 / nx) | p = 1: cd | p = 2: cd | p = 1: corrected | p = 2: corrected |
|---|---|---|---|---|
| 0.0833333 | 0.0177271 | 0.00569443 | 0.00634168 | 5.0577e-04 |
| 0.0416667 | 0.0122327 | 3.4408e-04 | 9.2298e-04 | 2.1043e-05 |

Provenance: gyre 0.4.0; revision `39979fcf90` (commit `39979fcf902ad6116eb550b881b4278d4599c8e2`); 2026-11-12T11:33:17-0500; device cpu; quick suite. **Revision check: Same code as this build.** Produced by 39979fcf902ad6116eb550b881b4278d4599c8e2. Every commit between it and the commit this site was built from (ceb1f4b0bed41de53e586df10858079f5a2bcdd8) changes only documentation text, evidence records or bookkeeping: the code is the same. Full record: [output_error.json](../data/verification/output_error.json).

<!-- begin level 3 (Mechanics) -->
**[L3 Mechanics] Raw and corrected outputs**

The chart plots the distance of the raw and of the corrected drag from a reference. The
correction is designed to remove the leading error term; how far it does is measured by the
last column of the effectivity table and its check (error remaining after correction below a
quarter of the original on the finest mesh). The reference is the finest mesh at a degree two
above the highest plotted one, a solution used by no plotted point and no estimate. It is
itself a computed value: the chart note states its distance from the solution one degree
lower, and differences of that size or below are not resolved. If that reference solve does
not converge, the chart falls back to the solution one degree lower and omits the one corrected
point that would be measured against its own target; the note says so.

<!-- end level 3 -->

<!-- begin level 4 (Theory) -->
**[L4 Theory] What limits the estimator**

The estimate is first order in the difference between the injected and the converged
fine-space solutions, so its relative accuracy improves as the mesh is refined (asymptotic
exactness) and degrades on meshes too coarse for the linearisation to hold. It measures the
error relative to the $p+1$ space, not to the exact solution; where the solution is singular
(a sharp trailing edge) enrichment in $p$ alone captures less of the true error.

<!-- end level 4 -->
