7.3 Tier 2 analytic benchmarks
7.3 Tier 2 analytic benchmarks¶
These verify the model against closed-form solutions, establishing that the axisymmetric weak forms, the axis treatment and the coupling are correct without reference to another code's mesh, discretisation or stabilisation.
| ID | Benchmark | Reference form | Acceptance criterion |
|---|---|---|---|
| VER-12 | Gouy–Chapman, 1D | φ̃(x) = 4 artanh(tanh(ζ̃/4) e^(−x/λ_D)), Grahame σ_s = √(8εRTc₀) sinh(ζ̃/2) |
Poisson–Boltzmann equilibrium reproduced to solver tolerance under mesh refinement |
| VER-13 | Debye–Hückel in a cylinder | φ(r) = ζ I₀(r/λ_D)/I₀(a/λ_D) |
Axisymmetric Poisson weak form and axis condition (§6.2) reproduced to solver tolerance |
| VER-14 | Rice & Whitehead (1965) capillary electro-osmosis | thick and thin EDL regimes | Coupled Poisson and Stokes velocity profile reproduced in both regimes |
| VER-15 | Helmholtz–Smoluchowski limit | u_slip = −εζE_t/η as λ_D/a → 0 |
Computed slip velocity approaches the limit at the expected asymptotic rate |
| VER-16 | 1D steady PNP with limiting current | Bazant, Chu & Bayly, SIAM J. Appl. Math. 65, 1463 (2005) | Full PNP current-voltage response including the limiting-current plateau |
| VER-17 | Maxwell–Hall access conductance | G = σ[L/(πa²) + 1/(2a)]⁻¹ (radius form) ≡ σ[4L/(πd²) + 1/d]⁻¹ (diameter form) |
Uncharged pore at 1 M reproduced to better than 2 % |
| VER-18 | Method of manufactured solutions, full coupled axisymmetric system | manufactured φ, c_i, u, p with consistent source terms |
Observed convergence O(h³) in L² for P2; the only route that verifies the u_r/r² term and the axis treatment |
| VER-19 | Stokes drag on a sphere | F = −6πηaU |
Drag on the analyte body in creeping flow to better than 1 % on the finest mesh, falling monotonically under refinement |
| VER-20 | Maxwell stress on a dielectric sphere in a uniform field | analytic potential for a sphere of permittivity ε_p in medium ε_m, and F_z = qE₀ for a uniformly charged body at ε_p = ε_m |
Field matched to the closed form, net force below 10⁻³ pN by both routes, and the qE₀ magnitude anchor to better than 1 % |
| VER-21 | Electrophoretic mobility limits | Hückel μ_e = 2εζ/3η (κa ≪ 1) and Smoluchowski μ_e = εζ/η (κa ≫ 1), with Henry's μ_e = (2εζ/3η) f(κa) as the reference between them |
Henry's function recovered to better than 5 % at every κa tested and the Hückel limit to 5 % at κa ≲ 0.5; μ_e/(εζ/η) rising monotonically towards 1 with the residual gap at the largest κa under 15 % and no larger than Henry's own gap there |
| VER-26 | Artefact cache and manifest against a real run | the key computed before the stage runs against the artefact it produces | On a converged solve: the two hashes are equal and the key carries no payload; re-running the same case is a store hit that does not re-enter Newton; a changed bias, or a mesh whose contents changed, misses, while the same mesh under another path hits; a cancelled run leaves no artefact in the store at either cancellation granularity; two writers of one key with differing payload bytes, interleaved at each step of a put and raced in two processes, leave one entry whose recorded digests match its files, and both return it (WP46); the manifest names every input hash the artefact was keyed on, from the same source (§5.3.2, FR-25, FR-26, FR-27, QR-08 in part) |
| VER-22 | Force-evaluation route agreement | domain form F_z = −∫_Ω (T_M + T_H) : ∇w dV against surface form F = ∮_S (T_M + T_H)·n dS, with the variational reaction force on the no-slip surface as a third route for the hydrodynamic half |
Agreement to better than 0.1 pN absolute on the same solution, on a solution whose two halves are individually of order 10 pN and opposite in sign; the reaction route confirming F^hd to better than 10⁻³ pN |
| VER-31 | Gouy–Chapman–Stern, 1D | φ_0 = φ_d + σ_s λ_S/(ε₀ε_r) with φ_d and σ_s from VER-12's Grahame relation, the shell carrying no space charge so φ is linear across it |
The wall potential reproduced to better than 1 % at 0.1 M, ζ̃_d = 2, λ_S = 0.25 nm — a 30.6 % effect, so a shell the solver treats as fluid fails by 24 %; λ_S = 0 reproduces VER-12 on the same mesh to solver tolerance; the shell generated by stage 5's construction from the wall's body, clipped to the slab, is the drawn one to 10⁻¹² nm and gives the same φ_0 (FR-15; the last clause WP30, with the cylindrical form through the pipeline in VER-59) |
| VER-35 | End-to-end reproduction from the manifest | a case run to convergence, then reproduced from its run directory alone | Every scalar quantity of interest reproduced to better than the 1 × 10⁻⁶ nonlinear relative tolerance of §5.3.1, with the measured difference reported rather than only the verdict; run against a fresh store, with the store miss and the re-entry into Newton asserted, so that the cache cannot satisfy the check (the §5.3.2 QR-08 NOTE); an input file whose contents have moved aborts naming it; a library-version difference is reported and non-fatal unless the run asks for a strict environment (QR-08, IF-08) |
| VER-39 | Sweep throughput and parallel scaling | one grid, run at several worker counts into a fresh store each time | Points per worker-hour over the members actually solved, and the parallel efficiency T(1)/(N·T(N)), reported with the core count, the thread pinning and the wave widths beside them. Recorded, never gated: completing the sweep is the assertion, and a scaling figure measured on shared hardware is a statement about that hardware (QR-06, §8.3) |
| VER-42 | The reference-matching stabilised mode | the mode of NUM-14 exercised against the manufactured solution of VER-18, against the unstabilised solve on the same geometry under refinement, and against a mesh coarse enough to activate every term | On VER-18's manufactured solution the transport stabilisation converges at a measured L² rate, reported rather than asserted exact and gated only from below, one order short of VER-18's own rate by the NUM-14 NOTE on the approximate residual. That rate SHALL be measured in the mode that assembles the streamline term alone, because the prediction is about that term: the full reference mode additionally assembles the flow pair, whose own approximate residual costs a further order on a stable element pair, so a rate measured there would be the flow pair's wearing the transport term's name. The full mode's rate on the same problem SHALL also be measured and recorded rather than gated, together with the evidence attributing the difference to the flow pair — that the crosswind viscosity is identically zero on those meshes, and that the velocity error, which no transport term can reach, is the quantity that moves. The unstabilised mode on the same meshes still gives VER-18's rate, unchanged. The same run with the manufactured source withheld from the stabilisation residual SHALL be shown to change the term's effect visibly; the direction of that change is regime-dependent and SHALL NOT be assumed — where the manufactured problem is diffusion-dominated the source is the dominant part of the residual and withholding it switches the term off rather than corrupting it, raising the rate towards the unstabilised one, which a floor with no ceiling would pass. The assertion SHALL therefore be on the term's footprint against the unstabilised error on the same mesh rather than on the rate. On a mesh whose cell Péclet number exceeds 1 in the double layer, plain Galerkin trips the NUM-17 positivity gate and the stabilised mode converges without tripping it — the spurious negative concentrations §6.4.1 cites — and the crosswind term is active on a reported non-zero fraction of the sampled fluid and nowhere at or below unit cell Péclet number, which is the assertable form of "the same elements the NUM-12 warning names": that warning is a point sample and the viscosity is an element quantity, so the two counts are not comparable but the inclusion follows from the Cauchy–Schwarz bound of NUM-14 and SHALL be asserted sample by sample; on a mesh meeting NUM-30 the crosswind contributes exactly zero, asserted on the assembled term. The stabilised and unstabilised currents approach each other under refinement, with the measured rate reported and the difference asserted to fall at every level rather than against a fixed exponent, because the sequence reaches O(h²) from below and its coarsest interval is pre-asymptotic; the two extraction routes of NUM-24 and NUM-25 agree to NUM-26's tolerance in the stabilised mode, and disagree by the reported stabilisation contribution when that term is removed from the indicator route, so the identity is measured rather than assumed. The equal-order velocity–pressure pair converges in the mode that permits it and its velocity field is compared against the Taylor–Hood solve, recorded and not gated: it is an input to the §7.4 attribution rather than a verdict (NUM-03, NUM-11, NUM-12, NUM-14, NUM-15, NUM-24, NUM-26, VER-18) |
| VER-62 | Number stability | the quantities seven gated walks compute — examples 01, 02 (both cases), 03 (the charged sweep, every member) and 07, and the charged 2WCD walk with and without the ion-exclusion shell and a derived χ — recorded on a tree that computes as v0.4.0 does, in tests/tier2/data/number_stability.json, keyed per walk by the deployed mesh's content hash, each mesh listing the environments (<sys.platform>-<machine>/<NumPy SIMD level>) that deployed it |
Every scalar of current_A, currents_A, conductance_S, transport_number and eof_m3_s the walk produces, and the 2WCD walks' q_mesh_e. On a mesh the golden holds, each within 10⁻⁸ relative of that mesh's value. On a mesh it does not hold, each within the walk's mesh-moved tolerance of its reference mesh's value: 10 times the largest relative spread between the walk's recorded meshes, at least 10⁻⁸ and never above 10⁻³; a walk with one recorded mesh has none, and an unseen mesh fails. In the reference environment, linux-x86_64/X86_V3, which CI and the gate pin (§7.6), an unseen mesh always fails. A failure prints the record to fold in; a gate never records itself, and a fold that would derive a tolerance above 10⁻³ is refused. A difference or an error estimate is never held, nor a value recorded as zero. A Tier-1 check asserts that every walk of the file is asserted by exactly one test, that no value is zero, that every mesh of a walk holds the same quantities, that each walk's reference mesh was deployed in the reference environment, and that each mesh-moved tolerance equals the one its meshes derive. A miss is investigated and reverted, or ruled a deliberate fix that amends its clause and re-pins the golden in the same commit (§8.2.7 G10; WP35). Where WP57 moves examples 01 to 04 onto a cylinder that stage 6 meshes, the ruling is taken in advance: a moved walk is re-pinned only if its new mesh has the same element count as the recorded one and each of its quantities agrees with the old pin within the walk's mesh-moved tolerance, the pull request reporting both; a larger drift stops the package for investigation (§8.2.22 X4) |
| VER-77 | A wall surface charge (PHY-09's NOTE) | Grahame's relation of VER-12 inverted, ζ̃ = 2 asinh(σ_s / √(8 ε RT c₀)), with ε = ε_0 ε_r,f⁰ at constant permittivity and c₀ in mol m⁻³; and Gauss's law for the electrolyte of a long cylindrical lumen, Q_ion = −σ_s · 2π R ℓ between two planes ℓ apart |
(a) On a planar slab of 1:1 electrolyte with no solid domain (PHY-20's NOTE on pb), its wall normal along z under the axisymmetric measure so that the surface term's r weight is exercised, the wall carrying σ_s and the far boundary at least 20 λ_D away at φ = 0, the pb model reproduces Grahame's ζ̃ to solver tolerance under mesh refinement, as VER-12 does, at 0.1 M and ζ̃ = 2 (σ_s ≈ 0.0435 C m⁻²); the opposite σ_s gives the opposite ζ̃ to solver tolerance. Behind a solid whose outer boundary has n·D = 0 a planar solid carries no field, so the fluid-only slab is the same problem. (b) Through stages 5 and 6 on a geometry.pore cylinder of radius R ≥ 5 λ_D, geometry.membrane.thickness_nm ≥ 10 R, the classical model (every correction and the steric term none) and physics.solid_permittivities.membrane set to 10⁻², a test device and not a material, which holds the displacement through the solid below 10⁻⁴ of the wall's charge by the coaxial estimate (ε_r,s/ε_r,f⁰)(λ_D/R) ζ̃/(2 sinh(ζ̃/2))/ln(ℓ_m/R): the ionic charge between two lumen planes at least 5 λ_D and 2R from either mouth balances the wall's charge between them within QR-03's budget, 10⁻³ relative. At a material's permittivity the solid carries part of the flux, so the balance is not posed there. σ_s = 0 adds no term: the assembled residual equals the one without the key to round-off (FR-20; §8.2.22 X3; WP57) |
NOTE: Hall's result is R_access = ρ/(4a) per side, so the two sides give ρ/(2a). The form
G = σ[L/(πa²) + 1/a]⁻¹ substitutes radius for diameter in the access term and is wrong there by a
factor of two; for a = 2 nm, L = 13 nm it under-predicts G by about 16 %. Used as a target it
would fail a correct solver.
NOTE (VER-19): the far field SHALL be the exact Stokes solution imposed on the outer boundary, not a
uniform stream. A uniform u = U e_z at R = 10a confines the return flow and raises the drag by
about 28 %, of order a/R — the 1 + (9/4)(a/b) wall correction of a sphere in a concentric
container — so a benchmark posed that way measures the domain truncation and not the discretisation.
NOTE (VER-20): the zero test and the magnitude anchor are both required. F^em has no reaction-route
oracle, because φ is not constrained on the analyte surface, so the Maxwell route's scale rests on
quadrature alone; a net force of zero on a polarised sphere is invariant under a uniform factor and
cannot catch a scale error. The anchor is exact — the self-force of a symmetric charge distribution
vanishes — and in the NUM-09 variables reads F/(εV_T²) = ρ̃ Ṽ Ẽ₀, which pins the 2π of NUM-27, the
r weight and Scales.force_N together in one number. Neither VER-20 problem needs the NUM-28
consistency term: the fluid is charge-free with a uniform permittivity in both, and the anchor's charge
lies inside the body, where w is constant.
NOTE (VER-21): the acceptance is stated against Henry's function rather than against the two limits
alone, because the limits are limits. μ_e = (2εζ/3η) f(κa) with f(0) = 1 and f(∞) = 3/2 is the
closed form at every κa in the low-ζ limit, and Ohshima's approximation to it,
f(x) = 1 + 1/(2[1 + 2.5/(x(1 + 2e^{−x}))]³), is the reference used. The approach to Smoluchowski goes
as 1/κa and is slow: at κa = 16.5, the largest a Tier-2 budget affords, Henry is still 11.5 % below
εζ/η, so a 5 % gate against Smoluchowski there would be asserting something untrue. The 15 % gate is
the honest one, and the monotone approach carries the rest of the claim. The Hückel end needs no such
allowance: at κa = 0.5, f = 1.014.
NOTE (VER-21): the far field for this benchmark SHALL be a uniform stream, reversing VER-19's rule, and
the reversal is not an inconsistency. VER-19 measures one confined solve, where a uniform stream adds
the a/R wall correction that NOTE (VER-19) quantifies. VER-21 measures the ratio of two solves, whose
force-free combination has a far field that is uniform to O((a/R)³) — a force-free particle radiates
no Stokeslet — so imposing the exact translating-sphere field would inject the O(a/R) Stokeslet the
physical solution does not have. The wall corrections common to the field and drag solves divide out of
the ratio. ζ SHALL be measured as the r-weighted mean of φ over the body surface rather than
prescribed there: a prescribed potential makes the body an equipotential, which expels the applied
field instead of refracting it through the dielectric, and solves a different problem with a different
f(κa).
NOTE (VER-22): the third route is the oracle on the split, which is what RSK-04 is about. The analyte
surface is a Dirichlet boundary for u, so the assembled momentum residual paired with a velocity-block
test function equal to e_z there equals ∮_S (T_H·n)·e_z dS discretely, and — because the residual
vanishes on every free degree of freedom — it is exactly independent of w. It therefore disagrees with
the domain route precisely when the NUM-28 consistency term is missing or mis-signed, which is the
failure mode invisible in the total. The agreement threshold is absolute: the total is a small
difference of two large numbers by construction, so a relative test on it measures nothing.
NOTE (VER-26): this is a property test, not an analytic benchmark, and it is in Tier 2 by runtime rather than by kind — it needs a converged solve, and §7.2 is seconds. It is listed here because §7.1 maps Tier 2 to this section; the tier a test belongs to is decided by which directory it is placed in, and this one is placed in Tier 2. Its acceptance criteria are equalities and exceptions, so it carries no tolerance.