Choosing a limiter
Which slope limiter should bound the second-order reconstruction of the compressible solver?
What a limiter does
At second order the solver builds each face state from the cell value plus an increment taken from the cell gradient; see Reconstruction. In smooth flow this increment is accurate. Across a shock or a contact the gradient is large. The extrapolated face value can then overshoot the values in the neighbouring cells. The overshoot creates a new maximum or minimum. This grows into oscillations on either side of the discontinuity and can drive density or pressure negative.
A slope limiter prevents this. It multiplies the increment by a factor between 0 and 1. The factor is chosen so that the face value creates no new maximum or minimum. In smooth regions the factor stays at or near 1, so the reconstruction keeps its second-order accuracy. At a discontinuity it falls towards 0, and the face takes the cell value, as at first order.
The limiter has two costs. It also acts at smooth extrema, such as the peak of a vortex or the suction peak on an aerofoil. It clips them, which lowers the accuracy there. Where its factor switches between iterations, the residual can stall at a noise floor instead of converging.
The limiters
The limiters fall into two families. A one-dimensional limiter works face by face. It compares the jump across the face with a backward difference taken from the cell gradient. A cell-based limiter bounds every face value of a cell by the range of values over all of its neighbours. This is the stricter guarantee.
limiter | Family | Behaviour |
|---|---|---|
van albada (the default) | one-dimensional | smooth; the most diffusive of the three in the shock-tube comparison below |
van leer | one-dimensional | smooth; slightly more compressive than van Albada |
symmetric ratio | one-dimensional | no limiting over a wide range of difference ratios; the least dissipative of the three |
none | — | no limiting: second order everywhere, with overshoots at discontinuities |
barth jespersen | cell-based | bounded by the neighbours; limits wherever the bound is active, and can stall the residual |
michalak gooch | cell-based | bounded by the neighbours; smooth; switches off in smooth flow |
venkatakrishnan | cell-based | bounded by the neighbours; switches off in smooth flow; its shape has one kink |
Which to use
Keep the default, van albada, for general work. Where the reconstructed face values must stay within the range of
the neighbouring cells, as they must across a strong shock, use michalak gooch: it is bound preserving, smooth enough
not to stall the residual, and switches itself off in smooth flow so that second-order accuracy survives mesh
refinement. Use none only for smooth flow with no shocks or strong gradients.
The choice is made with limiter in numerical_scheme:
{ "numerical_scheme": { "order": "second", "limiter": "michalak gooch" } }
The limiter acts on the second-order reconstruction only. It has no effect when
order is "first", nor during the cycles covered by
first_order_cycles; see
Choosing a spatial scheme. It belongs to the compressible solver;
the incompressible solver limits its gradients through
gradient_limiter_type and
gradient_limiter in equations instead.
limiter does From the shocktube caseEvery run is second-order Roe with implicit dual time stepping on the same mesh; only the limiter changes.
limitervalues van albada, van leer, symmetric ratio, barth jespersen, michalak goochcase shocktubeOne-dimensional limiters
van albada, van leer and symmetric ratio are functions of two directional differences: is the
jump across the face and a backward difference reconstructed from the cell gradient. Each is applied independently
to every reconstructed variable and to each side of every face, and scales the whole reconstruction increment on
that side.
They are regularised by a threshold
which is proportional to the magnitude of the variable itself; symmetric ratio uses its absolute value. For a
variable that changes sign, a velocity component for example, becomes small where the variable passes
through zero, and the limiter then acts on correspondingly smaller variations.
The symmetric-ratio plateau
Writing for the ratio of the two differences, symmetric ratio is
It is zero for , rises as , is exactly 1 across the whole plateau , and then
decays as . It satisfies . The wide plateau is why it is the least dissipative of the
one-dimensional limiters: van albada and van leer reach only at exactly.
symmetric ratio | van albada | van leer | |
|---|---|---|---|
| 0.1 | 0.364 | 0.198 | 0.331 |
| 1/3 | 1.000 | 0.600 | 0.750 |
| 1 | 1.000 | 1.000 | 1.000 |
| 3 | 1.000 | 0.600 | 0.750 |
| 10 | 0.364 | 0.198 | 0.331 |
Cell-based limiters
barth jespersen, michalak gooch and venkatakrishnan are multidimensional. They bound the reconstructed face value
by the range of values over the cell's whole set of face neighbours, which the one-dimensional limiters do not. They
are evaluated per cell, in a pass of their own, and the reconstruction then reads the result.
For cell , take and over its face neighbours, and write
for the unlimited extrapolation to face . Define
Then , where the shape distinguishes the three limiters:
limiter | Continuity | |
|---|---|---|
barth jespersen | : a kink at | |
michalak gooch | for , otherwise 1 | , and never above |
venkatakrishnan | : the clip adds a kink at |
A kink makes the limiter value flicker between cycles, which can hold the residual at a noise floor. That is the case
against barth jespersen, and the reason michalak gooch is preferred.
Switching off in smooth flow
michalak gooch and venkatakrishnan blend towards 1 wherever the flow is smooth. A cell counts as smooth
when the range over its neighbours, normalised by the reference state, is small against the
threshold
where is limiter_coefficient, the cell length scale
and the reference_length of the reference
condition named by reference in initialisation. defaults to 5.0. A larger value treats more of the flow as
smooth, and so limits less. The cube falls faster than the reconstruction error, so under refinement the
limiter switches itself off in smooth regions and formal order is kept. barth jespersen has no such switch and limits
wherever the bound binds; the one-dimensional limiters ignore limiter_coefficient.
Freezing the limiter
If a few cells whose limiter switches between iterations hold the residual at a noise floor, freeze the limiter with
freeze_limiter_cycle. With a cell-based limiter the values
are held per cell rather than per face. See Limiter switching
for when the freeze applies under each kind of time marching.
Reference entries
limiter, with the formula for each optionlimiter_coefficientfreeze_limiter_cycleorder, on Choosing a spatial scheme