Limiter face contracts

ROI priority 1 (solver / numerical): the slope limiter sits on every reconstructed face value. Pure scalar policies and neighbor-range construction are already isolated; this page locks the face geometry steps shared by Barth and Venkat.

Pipeline

[neighbor offset bounds] --> [per face]
     |                          |
     |                          +--> dq_f = g . (x_f - x_c)
     |                          +--> (Barth only) s = orient * (n . d) / (|d|+eps)
     |                          +--> phi_face = Barth/Venkat(dq_f, ...)
     |                          +--> phi_cell = min(phi_cell, phi_face)
     v
global eps for Venkat from offset range (once per equation)

Formulas

Unlimited face increment:

\[\Delta q_f = \nabla q_c \cdot (\mathbf{x}_f - \mathbf{x}_c)\]

Barth side direction factor:

\[s = \sigma \frac{\mathbf{n}\cdot\mathbf{d}}{|\mathbf{d}| + \varepsilon}, \quad \sigma = +1 \text{ (left)},\ -1 \text{ (right)}\]

Venkat regularization (global, once per field):

\[\varepsilon_{\mathrm{reg}} = \big(c \cdot \max(\Delta_{\max}-\Delta_{\min}, 1)\big)^2 + \delta\]

where \(\Delta\) are global neighbor offset ranges.

Pure entry points (ULimiterPolicy.h)

  • ReconstructFaceIncrement

  • FaceSideDirectionDot

  • TightenLimiter

  • BarthFunction / VencatFunction / VencatRegularizationEpsilon

  • BuildCellNeighborOffsetBounds (ULimiterRange.h)

Header tags @doc-algorithm slope-limiter-face mark the face stages for optional extraction. Tests: limiter_policy_test, limiter_range_test.