Tier-2 test evidence: analytic benchmarks and reference checks (WP45 item 26)
Tier-2 test evidence: analytic benchmarks and reference checks (WP45 item 26)¶
- [tested: tests/tier2/test_maxwell_sphere.py::test_ver20_the_dielectric_sphere_matches_its_closed_form] A dielectric sphere
ε_pin a uniform fieldE₀hasφ = −E₀z·3/(ε_p+2)inside andφ = −E₀z(1 − βa³/R³)outside,β = (ε_p−1)/(ε_p+2). With the far boundary carrying−E₀zrather than this closed form, the computed field differs from the unbounded one byβ(a/R)³, 3.3 × 10⁻⁴ at the test'sR. Source:tests/tier2/test_maxwell_sphere.py(test_ver20_the_dielectric_sphere_matches_its_closed_form). - [tested: tests/tier2/test_maxwell_sphere.py::test_ver20_a_charged_body_in_a_uniform_field_feels_q_e_zero] On the test's sphere mesh the magnitude anchor
F_z = qE₀misses by 0.19 % on the domain route and 0.53 % on the surface route, both set by the straight-sided facets; VER-20 leaves its tolerance open and the test states 1 %. The anchor's reference chargeq = −4eat 5.1 MV/m is 8.2 pN, inside RSK-04's range. Source:tests/tier2/test_maxwell_sphere.py. - [tested: tests/tier2/test_maxwell_sphere.py::test_ver20_the_net_force_on_a_dielectric_sphere_vanishes]
electrostatic_domain_forcecarries no consistency term, which is exact wherediv(T_M) = 0over the regionwvaries on; the fluid of the VER-20 problems is charge-free and uniform, so it is the right entry point. Source:tests/tier2/test_maxwell_sphere.py. - [tested: tests/tier2/test_mesh_backends.py::test_ver54_the_frozen_case_conducts_alike_on_both_backends_meshes] The Gmsh and netgen conductances of the reference fixture at
size_scale2 differ by 1.25 × 10⁻⁴; refining netgen fromsize_scale2 to 1 moves its own conductance by 2.0 × 10⁻⁴. The 1 × 10⁻³ bound in VER-54 is eight times the measured value, chosen from that comparison (WP23 plan, Design §4) and not fitted. Source:tests/tier2/test_mesh_backends.py. - [tested: tests/tier2/test_mms.py::test_ver18_taylor_hood_pressure_converges_at_its_own_order] The Taylor-Hood pressure of the MMS problem converges at
O(h²), the pair's own rate, and assertingO(h³)there would assert something untrue of a correct solver. The MMS sequence is a 2 × 4 nm cylinder atmaxh0.4, 0.2 and 0.1 nm, with the finest level near 2 × 10⁴ degrees of freedom, three orders below the 1.04 × 10⁶ at which WP3 measured 41 s and 6.2 GB for one factorisation. Source:tests/tier2/test_mms.py. - [tested: tests/tier2/test_pipeline_2wcd.py::test_ver53_2wcd_meshes_at_the_default_sizes] The prepared 2WCD structure meshes at the default sizes with VER-10 and the D9 wall gate passing (RSK-05 retired). Its axial registration places the C-alpha centroid of residues 8 to 292 at
Z_MD; WP21 used the trans tip plus 1.85 nm, which is 0.056 nm away. Source:tests/tier2/test_pipeline_2wcd.py. - [tested: tests/tier2/test_pipeline_2wcd.py::test_ver53_2wcd_walks_to_the_report_and_the_manifest_keys_every_stage] The 2WCD walk to stage 12 uses
pnpatsize_scale4, with flow and corrections off, because the electrostatic models refuse a solid domain with no transport to screen it (section 5.3.1 NOTE). Source:tests/tier2/test_pipeline_2wcd.py. - [tested: tests/tier2/test_pnp_benchmarks.py::test_ver16_current_saturates_at_the_limiting_value] Limiting current of the thin film. With the anion blocked at the electrode,
J₋ = 0givesc₋ = A exp(φ̃); electroneutrality outside the double layers givesJ₊ = −2D₊ grad c, linearc, and|J₊| = 2D₊c₀(1 − δ)/L, so|J̃₊| = 2D̃₊(1 − δ)/L̃. The factor 2 is migration doubling diffusion and depends on the reservoir convention, which is why the test states the derivation rather than a published number. Source:tests/tier2/test_pnp_benchmarks.py(test_ver16_current_saturates_at_the_limiting_value). - [tested: tests/tier2/test_pnp_benchmarks.py::test_ver16_current_saturates_at_the_limiting_value] The benchmark's two ionic diffusivities are set equal, a property of the test electrolyte; NaCl's
D_NaandD_Cldiffer by 52 %. Source:tests/tier2/test_pnp_benchmarks.py. - [tested: tests/tier2/test_pnp_benchmarks.py::test_ver16_current_saturates_at_the_limiting_value] The factor 2 holds only where
μ̃ᵢ = D̃ᵢ(infinite dilution, PHY-14, VER-05). With the concentration corrections active,μ/μ₀is 0.63 at 1 M againstD/D₀= 0.92, the factor falls to about 1.7 and the current drops by about 15 %. An earlier version of this benchmark passed because two errors cancelled: space-charge limitation raised the current by 14 % and silently active corrections lowered it by about as much. Source:tests/tier2/test_pnp_benchmarks.py. - [verified]1 At
δ= 10⁻³ and classical PNP, the current over the closed form is 1.138 atL= 100 nm, 1.050 at 400 nm, 1.026 at 1000 nm and 1.017 at 2000 nm.λ_Dis 0.30 nm at 1 M but goes asc^(−1/2), so at the electrode's 10⁻³ of bulk it is 9.6 nm, 32 times larger; a 100 nm film is then space-charge limited, which is why the benchmark uses 2000 nm. Source:tests/tier2/test_pnp_benchmarks.py(module docstring at3782c43, before WP45). - [tested: tests/tier2/test_pnp_benchmarks.py::test_ver16_the_plateau_is_the_departure_from_ohm_s_law] The ohmic prediction at the top of the sweep,
2Ṽ/L̃with conductivityΣ z²μ̃c̃ = 2, is twenty times what a depleting solve returns at 20V_T(514 mV). Source:tests/tier2/test_pnp_benchmarks.py(test_ver16_the_plateau_is_the_departure_from_ohm_s_law). - [tested: tests/tier2/test_pnp_benchmarks.py::test_ver16_current_saturates_at_the_limiting_value] The quality gate is off for the 2000 nm × 0.5 nm strip at
maxh50 nm: it is a chain of 100:1 triangles with minimum SICN 0.019, and the solution is constant along the stretched direction, so the interpolation error of those elements is zero. Source:tests/tier2/test_pnp_benchmarks.py. - [tested: tests/tier2/test_poisson_layers.py::test_ver56_the_closed_form_reproduces_the_plans_check_values] The three-layer capacitor:
D(z) = D₀ + ρ₀zwithD₀ = −(V + ρ₀I₂)/I₁,φ(z) = −[D₀F₁(z) + ρ₀F₂(z)],F₁ = ∫₀ᶻ ds/(ε₀ε_r),F₂ = ∫₀ᶻ s ds/(ε₀ε_r);φis piecewise quadratic, so P2 on a mesh with edges atz = aandz = bholds it exactly. Therweight addsRADIAL_WEIGHT_ORDERto both terms so that they integrate exactly (NUM-07 NOTE). Check values:L= 10,a= 4,b= 6 nm,ε_f= 78.15,ε_s= 3.2,ρ₀= −10⁷ C m⁻³,V= 0.05 V, 298.15 K. Source:tests/tier2/test_poisson_layers.py. - [tested: tests/tier2/test_poisson_layers.py::test_ver56_the_capacitor_distinguishes_the_permittivity_it_was_given] Without an entry for the membrane's permittivity, the membrane is ion-free water (
ε_r,f⁰) and its middle moves by volts; the three-layer test therefore discriminates a model that droppedsolid_permittivities. Source:tests/tier2/test_poisson_layers.py(test_ver56_the_capacitor_distinguishes_the_permittivity_it_was_given). - [tested: tests/tier2/test_reference_geometry.py::test_ver28_the_region_has_three_domains_and_carries_the_vocabulary] The reference region has three domains, not four: the cap's underside is re-entrant, and the membrane fills a cleft beneath it that opens downward past the cap edge at
z ≈ −0.7and is continuous with the bilayer. Source:tests/tier2/test_reference_geometry.py. - [tested: tests/tier2/test_reference_geometry.py::test_ver28_the_junction_is_conformal_and_lands_on_the_pore_outer_surface] The drawn membrane corners
(2, −1.4)and(3.5, +1.4)lie 0.275 and 0.540 nm inside the pore body, so gates read the junction from the fixture (r_out(−1.4) = 2.7524,r_out(+1.4) = 4.88). A coincident-chain junction gives conforming coordinates and a non-conformal mesh. Source:tests/tier2/test_reference_geometry.py. - [tested: tests/tier2/test_reference_geometry.py::test_ver28_the_assembled_topology_matches_the_section_5_2_1_count] The assembled topology adds three vertices and three edges to section 5.2.1's count of 190 vertices and 192 boundaries: two from splitting the axis at the pore's axial extent (the only way the 0.075 nm axis-in-pore size field applies) and one from the seam OCC places on the closed circle at
(250, 0). A glued three-face region lists 383 edges and 766 vertices for the 195 and 193 that exist, because OCC reports an edge once per face it bounds. Source:tests/tier2/test_reference_geometry.py(test_ver28_the_assembled_topology_matches_the_section_5_2_1_count). - [tested: tests/tier2/test_reference_geometry.py::test_ver28_the_junction_is_conformal_and_lands_on_the_pore_outer_surface]
membrane_outeris an arc, and its mid-height radius exceeds its ends by the sagitta of a 1.4 nm half-chord. Source:tests/tier2/test_reference_geometry.py. - [tested: tests/tier2/test_region_reference.py::test_ver53_the_wall_gate_passes_at_both_measured_sizes] The derived region's wall statistics were logged at 0.05 and 0.035 nm for the WP21 Outcomes; the derived chord mesh is within 0.1 % of the drawn one's element count. Source:
tests/tier2/test_region_reference.py. - [tested: tests/tier2/test_reproducibility.py::test_ver35_reproducing_into_the_store_that_holds_the_run_is_refused] A reproduction must not be served from the cache:
Store.get_or_computewould return the stored solution and show only that a dictionary lookup is deterministic, so the reproduction runs into a store that does not hold the run, and that the fresh store missed. Source:tests/tier2/test_reproducibility.py. - [tested: tests/tier2/test_reproducibility.py::test_ver35_an_input_whose_contents_moved_aborts_naming_it] An input whose contents moved since the run is fatal by name, because the reproduction would be a different sum. A library version that moved is recorded, and a quantity comparison catches it if it moved a number; refusing on the version would fail for a reason no number connects to. Source:
tests/tier2/test_reproducibility.py. - [tested: tests/tier2/test_reproducibility.py::test_ver35_a_run_reproduces_into_a_fresh_store] A deterministic direct solve in one process is expected to reproduce every scalar exactly; the measured worst relative difference is logged so that a drift is visible inside tolerance. Source:
tests/tier2/test_reproducibility.py. - [tested: tests/tier2/test_self_golden_round_trip.py::test_val01_self_golden_reproduces_its_own_solution] The VAL-01 round trip is exactly zero, not 1e-14:
%.17ground-tripsfloat64, so a one-ulp difference is a defect in the transport format. Source:tests/tier2/test_self_golden_round_trip.py. - [tested: tests/tier2/test_self_golden_round_trip.py::test_val01_the_round_trip_preserves_the_masked_points_as_nan] NGSolve returns
0outside adefinedonregion, so a masked point must travel asNaNthrough the text format,np.fromstringand the archive, or it enters the norm as fabricated agreement. The text reader was verified against the 77 MB reference table to 4.7 × 10⁻¹². Source:tests/tier2/test_self_golden_round_trip.py(test_val01_the_round_trip_preserves_the_masked_points_as_nan). - [tested: tests/tier2/test_stabilised_mode.py::test_ver42_the_stabilised_mode_loses_an_order_and_no_more] Stabilised mode, MMS: with
supg, the concentration rate is 2.012 and 2.040 onmaxh0.4, 0.2 and 0.1 nm (none: 3 on the same meshes), 26 s (208 s before the manufactured sources shared subexpressions,knowledge/06-numerics-fem/04-stabilisation.md#433-on-a-stable-element-pair-the-flow-terms-cost-an-order-and-20-the-time). Withreferencethe Na⁺ rate is 0.984 and the Cl⁻ rate 0.702 againstsupg's 2.012 and 1.908 on the same meshes, with 31 Newton iterations against 5, and 126 s and 436 s against 7 s and 25 s. Source:tests/tier2/test_stabilised_mode.py. - [tested: tests/tier2/test_stabilised_mode.py::test_ver42_withholding_the_manufactured_source_switches_the_term_off] Withholding the manufactured source
s̃ᵢfromR̃ᵢmakes the error footprinterror(mode)/error(none) − 1collapse. Intact it is 4.83 and 15.97 for Na⁺ and 2.99 and 15.77 for Cl⁻ atmaxh0.4 and 0.2 nm; withheld, 0.065, 0.666, 0.014 and 0.198, a ratio of 24 to 213. The gate's factor is a floor with five times that headroom. Source:tests/tier2/test_stabilised_mode.py. - [tested: tests/tier2/test_stabilised_mode.py::test_ver42_the_flow_pair_and_not_the_transport_term_sets_the_reference_rate] The velocity error of
supg(2.7617 × 10⁻⁴) is 0.2 % fromnone's (2.7567 × 10⁻⁴), so the flow pair owns any velocity error an order above both:referencemeasures 3.4483 × 10⁻², a factor of 125. Source:tests/tier2/test_stabilised_mode.py. - [tested: tests/tier2/test_stabilised_mode.py::test_num17_plain_galerkin_trips_positivity_where_reference_converges] On the coarse pore (313 elements,
max Pe_K= 4.71),nonereaches Na⁺ = −72.9 at(r, z)= (1.001, −4.376) nm and the NUM-17 gate stops it;referenceconverges in 126 Newton iterations over ten classical rungs, with the crosswind active at 125 of 1344 fluid samples for Na⁺ and 123 for Cl⁻ (peakν_K3.71 and 5.61). The fine pore (1491 elements,max Pe_K= 0.457) has no crosswind anywhere. Source:tests/tier2/test_stabilised_mode.py. - [tested: tests/tier2/test_stabilised_mode.py::test_num17_plain_galerkin_trips_positivity_where_reference_converges] The surface charge of
−0.05 C/m²is a benchmark choice. Below about−0.10 C/m²on that mesh both modes converge and the comparison measures nothing. Source:tests/tier2/test_stabilised_mode.py. - [tested: tests/tier2/test_stabilised_mode.py::test_ver42_the_two_modes_currents_converge_to_each_other_under_refinement] The climbs refine
wall_hand notmaxh, because the stabilisation is a double-layer effect by three orders of magnitude (knowledge/06-numerics-fem/04-stabilisation.md#42-the-ratio-supg-adds-is-pe_k2-exactly); the reservoir spacing is held at 5 nm. Source:tests/tier2/test_stabilised_mode.py. - [tested: tests/tier2/test_stabilised_mode.py::test_ver42_the_two_modes_currents_converge_to_each_other_under_refinement] The
reference-minus-nonecurrent difference at 0.5 M, +50 mV and−0.05 C/m²,maxh5 nm, falls with rates 1.44 and 1.89; the assertions are on the falling ratio and the measured rate, since the plan predicts the exponent and not the constant. Source:tests/tier2/test_stabilised_mode.py(test_ver42_the_two_modes_currents_converge_to_each_other_under_refinement). - [tested: tests/tier2/test_stabilised_mode.py::test_ver42_the_equal_order_pair_is_recorded_and_not_gated] An equal-order P1/P1 pair in
reference, against Taylor-Hood on 708 elements atwall_h0.4 nm, 0.5 M, +50 mV: 6.86 × 10⁻² relativer-weighted L² velocity difference, 34 Newton iterations either way. Recorded, not gated. Source:tests/tier2/test_stabilised_mode.py(test_ver42_the_equal_order_pair_is_recorded_and_not_gated). - [tested: tests/tier2/test_stabilised_mode.py::test_ver42_the_flow_pair_and_not_the_transport_term_sets_the_reference_rate] On the MMS mesh
max Pe_K≤ 0.084, so the crosswind viscosity is identically zero andsupgandreferencediffer by the flow pair alone; the first interval of the mode-to-mode convergence is pre-asymptotic, so the gate's finest-rate floor is 1.5, not the asymptotic 2. Source:tests/tier2/test_stabilised_mode.py. - [tested: tests/tier2/test_stern_layer.py::test_ver31_the_stern_layer_raises_the_wall_potential_by_the_closed_form] Gouy-Chapman-Stern: an ion-free layer of thickness
λ_Scarries no space charge, soφis linear across it andφ₀ = φ_d + σ_s λ_S/(ε₀ε_r),σ_s = (8εRTc₀)^(1/2) sinh(ζ̃_d/2). At 0.1 M,ζ̃_d= 2, 298.15 K,ε_r= 78.15 andλ_S= 0.25 nm:σ_s= 0.0435342 C m⁻²,Δφ_S= 15.7287 mV, and the wall potential rises from 51.3852 to 67.1139 mV, 30.6 %. A shell that is silently fluid is wrong by 24 %. Source:tests/tier2/test_stern_layer.py. - [tested: tests/tier2/test_stern_layer.py::test_ver31_the_shell_potential_drop_is_linear_in_the_thickness] The Stern profile is linear to the nonlinear solve's own tolerance (measured 2.5 × 10⁻⁶); a shell holding ions would curve by percent. The shell agreement is 2.8 × 10⁻⁵ at
λ/4, 7.2 × 10⁻⁷ atλ/8and 1.2 × 10⁻⁹ atλ/16. Source:tests/tier2/test_stern_layer.py. - [tested: tests/tier2/test_stokes_drag.py::test_ver19_a_uniform_far_field_measures_the_wall_correction_instead] The Stokes far field imposed on
R= 10ais the exact solution,u_r = −(3aU/4) z r/R³ + (3a³U/4) z r/R⁵,u_z = U − (3aU/4)(1/R + z²/R³) − (a³U/4)(1/R³ − 3z²/R⁵). A uniform stream there adds a wall correction of abouta/R, measured as 28.5 % on this domain and near 22 % in the negative control, against the1 + (9/4)(a/b)of a concentric container. Source:tests/tier2/test_stokes_drag.py. - [tested: tests/tier2/test_stokes_drag.py::test_ver19_stokes_drag_converges_to_the_closed_form] The domain route's error on the finest Stokes mesh is 2.0 × 10⁻⁵, so the 1 % gate has three orders of headroom. The classical model is required because
6πηaUassumes constant viscosity. Source:tests/tier2/test_stokes_drag.py. - [tested: tests/tier2/test_stokes_drag.py::test_ver19_stokes_drag_converges_to_the_closed_form] Sanity anchor: a 5 nm sphere at 0.1 m/s drags at about 4 pN. The test's
Ũ = 0.05inu₀ = εV_T²/(ηL₀), which is 0.0592 m/s on a 1 nm sphere, gives 0.43 pN. Source:tests/tier2/test_stokes_drag.py. - [tested: tests/tier2/test_sweep.py::test_ver37_a_warm_start_does_not_move_the_answer] The smallest admissible mesh with wall corrections has 392 elements:
wall_h0.4 nm gives a negative minimum distance and is refused, and 0.35 nm givesmin d= +9.5 × 10⁻⁶ nm. Source:tests/tier2/test_sweep.py. - [tested: tests/tier2/test_sweep.py::test_ver37_a_warm_start_does_not_move_the_answer] Warm against cold Newton solves of one fixed point differ by the residual each left, which
numerics.nonlinear.rtol(NUM-16) bounds; the test compares every reported scalar, not only the current. Source:tests/tier2/test_sweep.py(test_ver37_a_warm_start_does_not_move_the_answer). - [tested: tests/tier2/test_sweep.py::test_ver37_the_warm_path_costs_strictly_fewer_newton_iterations] Warm 34.3 s against cold 26.7 s when measured alongside the rest of the suite; on an idle machine the same code gave 10.0 s against 21.6 s. The warm test therefore asserts Newton iterations, which are a property of the solves. Source:
tests/tier2/test_sweep.py(test_ver37_the_warm_path_costs_strictly_fewer_newton_iterations). - [tested: tests/tier2/test_sweep.py::test_fr25_the_manifest_of_a_warm_member_records_how_it_was_reached] A
canonicalmanifest encodes each float as{"__f__": <hex>}for an exact digest, so a decoder is required beside it (§5.3.2) and a comparison against a recorded number has to use it. Source:tests/tier2/test_sweep.py. - [tested: tests/tier2/test_sweep.py::test_ver38_a_member_whose_parent_is_absent_falls_back_to_the_full_ladder] The cold pass runs members in reverse index order into an empty store, so no parent has been solved when its child looks for it: the state of a job-array member on a machine that has seen nothing else (FR-24). Source:
tests/tier2/test_sweep.py(swept). - [tested: tests/tier1/test_qoi.py::test_num26_round_off_currents_at_zero_bias_fail_the_relative_check] A zero-bias member makes the route check inapplicable:
I_ψ= 2.3 × 10⁻²⁷ A againstI_reaction= 4.6 × 10⁻²⁵ A is a relative difference of 0.995 and aborts the member. Source:tests/tier2/test_sweep_throughput.py. - [tested: tests/tier2/test_sweep_throughput.py::test_ver39_the_scaling_curve_is_measured_and_recorded] The throughput measurement uses 25 points in seven waves of widths 1, 3, 5, 5, 5, 4 and 2, over two axes; the one-worker point runs in-process so that
efficiency(1)does not payspawn. The development machine reports four cores, so N = 4 is the whole machine. Source:tests/tier2/test_sweep_throughput.py. - [tested: tests/tier2/test_sweep_generated_mesh.py::test_ver37_a_generated_mesh_sweep_warm_starts_from_its_parent] A sweep over a generated mesh keys its parent from the stored stage-6 artefact. Until that was fixed, the member runner keyed the parent from the bare case, raised for every such sweep, and fell back to cold starts silently, so every member climbed the full ladder. Source:
tests/tier2/test_sweep_generated_mesh.py. - [tested: tests/tier2/test_val05_2wcd.py::test_val05_2wcd_against_the_reference_polygon] VAL-05's predicted values from the plan's prototype are
ε_G= −8.08 %,Δr_c= −0.0205 nm and rms 0.158 nm; the isolevel steps are 2.0 to 5.3 percentage points against a conditioning rms of 0.01 nm. Source:tests/tier2/test_val05_2wcd.py. - [tested: tests/tier2/test_val05_2wcd.py::test_val05_2wcd_frozen_case_conductance] The frozen-case conductance on the generated mesh is recorded beside
ε_Gas a bulk-resistor proxy: access resistance dilutes the difference. Source:tests/tier2/test_val05_2wcd.py(test_val05_2wcd_frozen_case_conductance). - [tested: tests/tier2/test_val06_2wcd.py::test_val06_2wcd_a_focused_grid_confirms_apbs_converges_at_first_order_or_better] APBS's error is bounded by
|φ(h) − φ(2h)|only at first order or better; the focused check is a 193³ grid at 0.05 nm whose faces come from APBS's own 0.1 nm solution, and the ratio(φ(0.1) − φ(0.2))/(φ(0.05) − φ(0.1))is2^p. Source:tests/tier2/test_val06_2wcd.py(test_val06_2wcd_a_focused_grid_confirms_apbs_converges_at_first_order_or_better). - [tested: tests/tier2/test_val06_2wcd.py::test_val06_2wcd_apbs_is_unchanged_by_a_cubic_angstrom_slip_at_its_coarse_grid] The 0.2 nm APBS run tracks the 0.1 nm run within the budget; a cubic Ångström slip at its coarse grid would move it by a factor of 8. Source:
tests/tier2/test_val06_2wcd.py. - [tested: tests/tier2/test_val06_ring.py::test_val06_ring_every_broken_construction_exceeds_half_the_tolerance] At
h= 0.1 nm = 1 Å,eper node andeper cubic Ångström are the same number, so the charge-density row of the ring's construction table is invisible on the fine grid and runs on the nested 0.2 nm grid, where the factor is 8. Source:tests/tier2/test_val06_ring.py. - [tested: tests/tier2/test_val06_ring.py::test_val06_the_ring_series_is_grounded_continuous_and_kirkwood_at_infinity] The Gaussian ring's exterior is the point ring to
erfcof the gap overw, about 10⁻³⁵ here. The series inρis(b/a)^l= 0.56^l inside, so 80 terms converge; the APBS box is 6.4 nm at 0.1 nm, which holds the ring 1.8 nm inside every face. Source:tests/tier2/test_val06_ring.py. - [tested: tests/tier2/test_val06_ring.py::test_val06_the_ring_series_is_grounded_continuous_and_kirkwood_at_infinity] Ring coefficients per
l: withβ'ₗ = k pₗ (b/a)^l/(ε₁a)andγ = (a/R)^(2l+1), grounding givesB' = −γC', continuityA' = (1 − γ)C' − β', andC' = ε₁(2l+1)β'/(ε₁l(1 − γ) + ε₂(l(1 + γ) + 1)). AsR → ∞,C_ltends to Kirkwood'sk pₗ bˡ(2l+1)/(ε₁l + ε₂(l+1)). Source:tests/tier2/test_val06_ring.py. - [tested: tests/tier2/test_charge_potential_axis.py::test_ver58_the_closed_form_vanishes_on_the_sphere] The VER-58 oracle, one smeared atom in a uniform dielectric inside a grounded sphere of radius
R: a unit smeared charge at(r_i, z_i)hasφ = (q/4πε)⟨erf(d/w)/d⟩_θ − (qR/a)/(4πε)⟨1/d′⟩_θ, witha = (r_i² + z_i²)^(1/2), the image of each ring point a charge−qR/aatR²/aalong the same ray, and the azimuthal mean taken by the periodic trapezoid rule, spectrally accurate for these smooth periodic integrands. Source:tests/tier2/ver58_sphere.py. - [tested: tests/tier2/test_charge_potential_axis.py::test_ver58_deposited_potential_converges_at_the_potentials_own_rate_on_the_axis] VER-58's on-axis lattice spacing
H= 0.0025 nm is the one at which the disc-error rate reaches 2.99 (deposit and solve); at 0.005 nm the floor holds the rate to 2.80. Source:tests/tier2/ver58_sphere.py. - [tested: tests/tier1/test_stability_golden.py::test_ver62_fold_refuses_a_tolerance_above_the_ceiling] The folding procedure for the number-stability golden (
tests/tier2/data/merge_number_stability.py): a walk run withNANOPNP_RECORD_STABILITY=<dir>writes<dir>/<walk>.json, folded byuv run tests/tier2/data/merge_number_stability.py <dir>, with--entryfor a record a CI leg printed. Folding widens that walk's mesh-moved tolerance for every unseen mesh and is refused past the ceiling; a known mesh's values change only with--replace, which a G10 re-pin uses in the commit that rules the change (section 8.2.7 G10).
-
git show 3782c43:tests/tier2/test_pnp_benchmarks.py, module docstring (before WP45). ↩