Verification & Validation

Every number, reproduced.

A number someone may build on must be right. This page mirrors the public verification record of KATAI 2D: each row cites its primary source, states its tolerance band and names the automated test that asserts it on every build. The benchmark inputs are plain .k2d files checked into the open repository — nothing here is hand-picked, and all of it can be rerun.

207automated tests in the suite
69declared verification cases
26benchmark .k2d files checked in
3oracle classes — closed form, independent path, published benchmark

How it is verified

The suite is the specification.

Three kinds of oracle are admitted: a closed-form solution, stated in full in the test; an independent computation path that shares no code with the solver; or a published benchmark, with the primary source cited. Self-consistency — the code agreeing with itself — does not count.

The verification matrix and its bibliography are generated from declarations inside the tests themselves, and a suite gate fails the build when they drift. Continuous integration rebuilds and runs the full suite on every push, on a configuration with no proprietary component — so every number below is reproducible from the public tree alone.

01 · Foundations & collapse

The sharpest test: limit loads.

Bearing capacity and stress distribution against the classical solutions — several of them run from benchmark files checked into the repository.

Benchmark Reference KATAI · error Automated test
Prandtl strip footing Nc (φ = 0), loaded past collapse from the checked-in file 2 + π = 5.142 (Prandtl 1921) +0.6% test_input_corpus
Prandtl Nc, structured tri15 mesh (120 elements) 2 + π +1.1% test_prandtl
Rigid strip footing on elastic soil — force at 10 mm settlement, via prescribed displacement and the reaction output Giroud (1972) 15.15 15.32  ·  +1.1% test_input_corpus
Smooth rigid circular footing, axisymmetric — limit pressure from the reaction output at a prescribed 0.35 m punch, from the checked-in file Cox (1962) slip-line 225.6 kPa; PLAXIS publishes 220.0 233.9 kPa  ·  +3.7% test_input_corpus
Strip footing on clay with strength increasing with depth (c = 1 + 2z) — limit pressure via the c/E depth profiles, from the checked-in file Davis & Booker (1973) 7.80 kPa; PLAXIS publishes 7.86 7.91 kPa  ·  +1.4% test_input_corpus
Strip load on incompressible Gibson soil (E = 299 z) — centreline settlement Gibson (1967); half-space 0.050 m, finite layer 0.047 m 0.0454 m  ·  −3.4% test_input_corpus
Boussinesq uniform strip load — σz at depth, from the checked-in file integrated Boussinesq closed form +0.9% … +1.4% test_input_corpus
Flamant line load — σz at depth, tri15, from the checked-in file Flamant (1892) +0.0% … +1.3% test_input_corpus

02 · Slopes & staged construction

Failure mechanisms and construction sequence.

Strength reduction against the published multi-method consensus, staged unloading against the closed form, and the K0 state to round-off.

Benchmark Reference Result Automated test
Griffiths & Lane (1999) Example 1 — the homogeneous 2:1 slope (c′/γH = 0.05, φ′ = 20°), FoS by φ‑c reduction from the checked-in file their FE 1.4; Bishop & Morgenstern (1960) charts 1.380 FoS 1.384  ·  +0.3% vs 1.380 test_input_corpus
Slope factor of safety by φ‑c reduction, run as the file’s initial procedure Griffiths & Lane (1999); Bishop 0.988, Spencer 0.987, Phase2 T6 0.997 FoS 1.010  ·  +2.1% vs 0.99 test_input_corpus
The same Example 1 on a nested mesh family of 142, 568 and 2272 elements — how far the factor moves with the mesh grid-convergence procedure (Celik et al. 2008) 1.4210 → 1.3867 → 1.3645  ·  band ±3.7% test_slope_fos_convergence
Staged excavation — pit-floor heave and base total stress after deactivating a layer 1D elastic unloading closed form +0.0% / −0.0% test_input_corpus
Partial stage, ΣMstage = 1 / 0.5 / 0.25 on a linear soil — proportionality of the response linear superposition to 10−12 test_staged_options
K0 procedure on a submerged block — effective stresses, pore pressure, residual displacement geostatic equilibrium; Terzaghi effective stress ~5×10−13 kPa residual test_input_corpus

03 · Groundwater flow & consolidation

Seepage and time, verified.

Free-surface flow against the exact discharge theorem, and time-dependent consolidation against the Terzaghi series — from checked-in inputs.

Benchmark Reference Result Automated test
Unconfined rectangular dam with a seepage face — discharge Charny (1951) exact theorem: q = k(h1²−h2²)/2L +1.02%  ·  mass balance 8×10−14 test_input_corpus
Terzaghi 1D consolidation — U(Tv) at Tv = 0.2 / 0.4 / 0.6 / 0.9, from the checked-in file Terzaghi (1943) series −1.2% … −0.4% test_input_corpus
Undrained (A) confined column — settlement and mid-column effective stress Skempton 1D closed form +0.0% / +0.0% test_input_corpus
Consolidation phase asked to stop at 90% degree of consolidation — the time it stops closed form: 14.566 day 14.776 day  ·  +1.45% test_consolidation_stop
Drain line in a confined aquifer — drawdown and extracted discharge Dupuit–Forchheimer 1D closed form −0.00% / +0.00% test_wells_drains
Flow across a semi-permeable barrier — discharge Darcy in series −0.10% / −0.15% test_flow_barrier
Lowering the water table in a staged phase — settlement Terzaghi effective stress, closed form +0.01% test_phase_water
Terzaghi 1D consolidation — degree of consolidation U against time factor Tv
0 25 50 75 100 0.00.51.01.52.0 Time factor Tₕ Consolidation U (%)
Terzaghi series (analytical) KATAI 2D v0.9.0 wheel, from the checked-in file

Constitutive models

Each soil and rock model, on a problem with a known answer.

Hardening Soil, HS small, Soft Soil, Soft Soil Creep and Hoek–Brown, each through the whole path from a project file to a boundary value problem — with the equations they are checked against.

Benchmark Reference Result Automated test
Hardening Soil oedometer column, 50 → 200 kPa — settlement, from the checked-in file the Eoed power law, integrated in closed form −0.93% test_input_corpus
HS small — heave of an excavated floor at three points of the stiffness-degradation curve inverted secant law (Santos & Correia 2001) with Masing’s rule −0.14% / −0.30% / −0.72% test_input_corpus
Soft Soil oedometer — primary loading, swelling and reloading over the same stress range λ* and κ* logarithmic laws −0.01% / −1.01% / −1.63% test_input_corpus
Soft Soil Creep column — settlement after 100 days at constant load μ* ln(1 + t/τ) H = 0.018460 m +1.81% test_input_corpus
Hoek–Brown — circular tunnel under 28 MPa, radial stress through the plastic annulus and the elastic field closed-form elasto-plastic solution (Carranza-Torres & Fairhurst 1999) 0.59%  ·  0.72% test_hoek_brown_tunnel
Hoek–Brown — triaxial plateau from a project file at two cell pressures the 2002 criterion −0.0000% test_hoek_brown_gui
Mohr–Coulomb dilatancy cut-off — volumetric strain at which dilation stops ln((1+emax)/(1+einit)) = 0.018576 0.018635  ·  then isochoric to 10−16 test_dilatancy_cutoff
Undrained (A) against Undrained (C) for one soil — ratio of settlements 2(1 + νu)/3, exact +0.00% at three νu test_undrained_c
Two-layer undrained column, νu below and Skempton B above closed form per layer +0.00% on four quantities test_undrained_stiffness

Structural elements

Walls, anchors, piles and reinforcement.

Every structural element verified on a problem small enough to have an exact answer, then used unchanged in the full model.

Benchmark Reference Result Automated test
Two beams in bending — mid-span deflection and peak moment from one run beam theory; published 50 kNm −0.000%  ·  +0.00% / +1.04% test_input_corpus
Prestressed anchor locked off at 500 kN on a stiff block equivalent point load, independent path 499.919 kN  ·  0.016% test_anchor_prestress
Block sliding on an interface — horizontal failure force Coulomb joint closed form −0.59%, converging with refinement test_input_corpus
Pile row loaded far above its capacity — axial force at the head skin + base capacity 600.0000 kN/m  ·  −0.00% test_input_corpus
Geogrid in tension, and the cut-off it stops at plane-strain closed form 2.000000 kN/m  ·  +0.000% test_input_corpus
Plate, anchor and geogrid at the end of a consolidation phase the same model solved as a drained phase moment 21.621032 = 21.621032 kNm/m test_consolidation_structures
Raft in a fully coupled phase, saturated limit the consolidation phase and the drained reference +0.00000% test_fully_coupled_structures

04 · Seismic dynamics

Shaking, against closed forms and a real record.

Resonance against the damped shear-column solution, and a checked-in El Centro 1940 digitisation whose identity and response spectrum are pinned against the published values — the accelerogram travels inside the benchmark file.

Benchmark Reference Result Automated test
Resonant column at f1 = Vs/4H — peak |u| and |a| at the surface damped SH closed form (Kramer 1996, ch. 7) −0.6% / −0.2% test_input_corpus
El Centro 1940 NS record identity — PGA and timing of the shipped digitisation published PGA ≈ 0.319 g at t ≈ 2 s 0.31882 g at 2.02 s test_real_record
El Centro 5%-damped response spectrum — peak amplification and long-period ordinate published band: peak Sa/PGA in 2.0–3.5; Sa(3 s) small 2.87× at 0.19 s  ·  Sa(3 s) 0.118 g test_real_record
Two-layer compliant-base site response, the record travelling inside the .k2d file the verified path’s surface response reproduced within 5% test_input_corpus

05 · Published validation cases

Documented cases, reproduced from scratch.

The PLAXIS 2D Validation Manual (Version 8, Bentley Systems) publishes analytic references alongside its own results for a set of canonical problems. Four of those cases are rebuilt from their problem statements and asserted inside the suite — against the analytic solution first, the published finite element value second. All four are also reproduced in depth on a dedicated page: problem statements, formulas, result tables, CLI transcripts and the address of every artefact.

Benchmark Reference KATAI · error vs analytic / published Automated test
§2.1 — Smooth rigid strip footing on elastic soil [kN/m] Giroud (1972) 15.15  ·  PLAXIS 15.24 15.35  ·  +1.4% / +0.8% test_plaxis_validation
§2.2 — Strip load on incompressible Gibson soil [m] Gibson (1967) 0.050 (half-space)  ·  PLAXIS 0.047 (finite layer) 0.0451  ·  −4.0% test_plaxis_validation
§3.1 — Bearing capacity of a smooth circular footing, axisymmetric [kPa] Cox (1962) 225.6  ·  PLAXIS 220.0 234.4  ·  +3.9% test_plaxis_validation
§3.2 — Strip footing on clay with strength increasing with depth [kPa] Davis & Booker (1973) 7.80  ·  PLAXIS 7.86 8.02  ·  +2.8% test_plaxis_validation

Stated plainly, as the record states it: the circular-footing case over-predicts by +3.9% at the fine mesh and +9% at the coarse one (two elements across the radius) — the mesh sensitivity is recorded in the matrix, in the same place as the agreement. All four cases also run end to end from checked-in .k2d files through the command line (+1.1%, −3.4% against the finite-layer PLAXIS value, +3.7% and +1.4% on the files’ own meshes) — see the four cases, input for input, or the write-ups in the repository: the comparison document and three published benchmarks, end to end.

06 · Independent numerics

The machinery, cross-examined.

Below the physics: the linear algebra and the material registry are checked against oracles that share no code with them.

Benchmark Reference Result Automated test
Sparse solves (every backend) against dense FullPivLU on an independent path no shared code, different storage layout 4.4×10−16 test_linsolve
Material registry — every constructed field, per model and drainage class the former inline construction, duplicated verbatim bitwise equal test_material_registry
Grid Convergence Index — observed order and Richardson extrapolation on manufactured triplets φ = φexact + C hp (Roache 1994; Celik et al. 2008) to 10−14 test_grid_convergence
Time-step refinement of the Terzaghi column — observed order of the scheme backward Euler: 1 0.985 / 0.992  ·  band ±0.25% test_phase_numerics
Factor of safety against the tolerated force residual, 10−3 … 10−8 independence of the stopping rule 1.421021, bit-identical test_tolerance_independence
Hardening Soil oedometer against the number of load increments, 10 → 160 independence of the load path 0.020% test_phase_numerics
Local against global convergence error when only the global criterion is enforced the stress-point error of the constitutive law factor 63 000  ·  0.0048% with both test_convergence_criteria
Mesh quality — minimum angle of every generated element against the 20° bound Ruppert (1995) termination guarantee bound met and reported test_mesh_quality_signal
No input dropped in silence — one perturbed field per diagnostic, with equilibrium of what remains the same problem drawn where the mesh takes it exact on code  ·  10−13 on equilibrium test_no_silent_drop

07 · One contract, every front end

The CLI, Python and the engine agree — bit for bit.

The suite pins the script-built project against the checked-in .k2d byte for byte, and the CLI’s results file against the in-process solve bit for bit. The packaged artifacts are held to the same standard before release.

Measured on the published v0.9.0 artifacts in a clean environment: the wheel installs into a fresh virtual environment, Python runs isolated from the user’s paths, and the shipped examples reproduce their verification bands there — slope FoS 1.010, Terzaghi |UFEM − Useries| ≤ 0.0061 at the sampled times, staged-excavation heave +0.00% against the closed form, and an anchored excavation built entirely through prj.structures — a diaphragm wall with interfaces on both faces and a prestressed anchor row — holding its own invariants. That last one is a release gate rather than a demonstration: a wheel whose documented API is absent from the build someone downloads passes an import check and fails the first real job, so the gate runs the real job. The release CLI solves the slope corpus case — a safety analysis driven to failure — in about 8 s on a 2017 laptop CPU with the vendored Eigen backend, no proprietary component involved.

Rerun it yourself. All of it.

The matrix, the bibliography and every benchmark input on this page are in the open repository — and the suite that asserts them runs on every push.