# DFG 2D-1 (Re 20) against the official reference intervals `tests/validation/run_dfg_re20.py` runs the steady DFG 2D-1 case on the refined channel root (D40 root, D80 wide fine patch) and on the uniform D80 grid. Geometry, inflow, initial state, layout and observation are those of the pinned Re100 runner (`run_refined_dfg.py`, `re100_helpers.py`, both unchanged); only the lattice viscosity is set for Re 20 (root tau 0.56, fine 0.62, uniform 0.62, lattice speed 0.01). This is a comparison with the official intervals, not a full benchmark certification: the outlet is pressure-NEQ (`neq_extrap`), not do-nothing, and the inlet is local Zou-He. ## Quantities - Cd = 2 Fx / (rho U^2 D), Cl = 2 Fy / (rho U^2 D), interval means over each sample. - p_diff = p(0.15, 0.2) - p(0.25, 0.2), linear extrapolation to the exact surface points (`re100_helpers.pressure_probes`). The helper returns dp / (rho U^2) in scaled units; p_diff = dp * 0.04 for U = 0.2 m/s, rho = 1. Both are reported. - Official intervals (Schaefer & Turek 1996): Cd [5.57, 5.59], Cl [0.0104, 0.0110], p_diff [0.1172, 0.1176]. ## Bounds and steady rule (frozen before any run) - End time t* = 60 (30 s physical): 240,000 refined root steps, 480,000 uniform steps. - One sample every t* = 0.5; trailing window t* = 10 (5 s, 20 samples). - Steady: in the window, max - min of each of Cd, Cl, p_diff is at most one tenth of its official interval width (0.002, 0.00006, 0.00004). Absolute ranges, so the small Cl is never used as a divisor. - Not steady at t* = 60: status `NOT_STEADY`, no interval verdict. Health limits (Mach <= 0.2, rho in [0.5, 1.5]) stop the run with `UNHEALTHY`. - Steady: `WITHIN_INTERVALS` or `OUTSIDE_INTERVALS`, with the per-quantity verdict. ## Run ``` python tests/validation/run_dfg_re20.py --output --plan CUDA_VISIBLE_DEVICES= python tests/validation/run_dfg_re20.py --case both \ --collision SRT --output --max-wall-seconds ``` `--plan` writes `plan.json` only. A GPU run writes `plan.json` and `result.json` (per case: lattice parameters, every sample, window ranges, status, verdict). Host contract tests: `tests/unit/test_dfg_re20.py`.