KATAI 2D
Open-source finite element engine for two-dimensional geotechnical analysis, where every capability is pinned to a published benchmark or a closed form.
- Status
- Active development
- Role
- Sole author and maintainer
- Built with
- C++, Python, Finite element method
- Licence
- Apache-2.0
- DOI
- 10.5281/zenodo.20692282
- Source
- github.com/fkkarakurt/katai2d
- Website
- kataigeo.com
- Updated
KATAI 2D is a two-dimensional finite element platform for geotechnical analysis. It is built around one commitment: the formulation is stated openly and every capability is verified against published theory before it ships.
The distinction matters because geotechnical software is usually consumed as a black box. An engineer supplies parameters, receives a settlement or a factor of safety, and has no practical way to establish whether the number follows from the model they think they specified. KATAI 2D is written so that the path from governing equation to printed result is inspectable at every step, and so that the claim “this is correct” is backed by a test rather than by a brochure.
ScopePermalink to “Scope”
| Capability | Coverage |
|---|---|
| Idealisations | Plane strain, axisymmetric |
| Analysis types | Deformation, stability, groundwater flow, consolidation, coupled flow–deformation, seismic dynamics |
| Elements | 6-node and 15-node triangles (quadratic and quartic interpolation) |
| Constitutive models | Linear elastic; Mohr-Coulomb with a tension cut-off; Hardening Soil; HS small; Soft Soil; Soft Soil Creep |
| Drainage | Drained, undrained (A/B/C), non-porous |
| Structural elements | Plates with Mp/Np hinges, embedded beam rows, node-to-node anchors, geogrids, Coulomb interfaces |
| Initial state | K₀ procedure, gravity loading, single-phase safety |
| Nonlinear analysis | Plastic analysis, strength-reduction factor of safety |
| Construction sequence | Multi-phase staged construction with inherited activation |
| Design codes | EC7 (EN 1997-1) and TBDY 2018 partial-factor catalogues, applied per phase |
| Front ends | katai command line and an engineer-facing Python package, over one input contract |
The fifteen-node triangle is included deliberately. Lower-order elements lock in near-incompressible plastic flow, and collapse loads computed with them are systematically high. Where a limit load is the answer being sought, element choice is not a performance preference — it changes the result, and the platform is explicit about that.
Constitutive modelsPermalink to “Constitutive models”
Six models are implemented, in increasing order of what they ask of the user:
- Linear elastic — for verification work and for stiff structural elements, not for soil at working loads.
- Mohr-Coulomb — implemented with exact return mapping in principal stress space, so the edges and the apex of the yield pyramid are handled in closed form rather than smoothed away, with a tension cut-off and an optional dilatancy cut-off. The criterion itself is best understood through the Mohr circle it is drawn from.
- Hardening Soil — for problems where unloading–reloading stiffness governs the answer, which is most excavation and retaining-wall work.
- HS small — the small-strain stiffness overlay, with Masing’s rule, a ceiling on G₀/G_ur, the phase option that resets a strain history whose cause has gone, and the Li & Dafalias dilatancy below the phase-transformation line.
- Soft Soil and Soft Soil Creep — logarithmic compression, and the time-dependent settlement that a normally consolidated clay keeps producing after the load has stopped changing.
Each of the six is verified twice: at the stress point against the equations as published, and again through a checked-in input file that walks the whole path from the file through the mesher and the driver. The second one is where the faults were.
SolverPermalink to “Solver”
A sparse direct solver with pattern-aware factorisation and parallel assembly. Staged and time-dependent analyses reuse the sparsity pattern between phases and between time steps, which is where most of the cost sits in a multi-phase run: the pattern is established once and the numerical factorisation is repeated against it.
Direct rather than iterative is a deliberate choice for problems of this size. It removes an entire class of question — whether a result reflects the model or the convergence tolerance of the linear solver — from the interpretation of a run.
VerificationPermalink to “Verification”
Three kinds of oracle are admitted, and only three: a closed-form solution stated in full inside 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 record is 58 declared verification cases over 26 benchmark input files
checked into the repository as plain .k2d text, asserted by 153 automated tests
that run on every build, on a configuration containing no proprietary component. The
matrix and its bibliography are generated from declarations inside the tests
themselves, so the table cannot drift from the suite; a gate fails the build when it
tries.
| Benchmark | Reference | Result |
|---|---|---|
| Prandtl strip footing Nc (φ = 0) | 2 + π (Prandtl 1921) | +0.6% |
| Slope factor of safety (φ–c reduction) | Griffiths & Lane (1999), published ≈ 0.99 | 1.010 |
| Rigid strip footing on elastic soil | Giroud (1972) 15.15 | +1.1% |
| Unconfined dam discharge with a seepage face | Charny (1951) exact theorem | +1.02% |
| Terzaghi 1D consolidation U(Tv) | Terzaghi series | −1.2% … −0.4% |
| El Centro 1940 NS record identity | published PGA ≈ 0.319 g | 0.31882 g at 2.02 s |
Stating the tolerance alongside the benchmark is the part that matters. A verification claim without a number is a marketing claim. The full record is public at kataigeo.com/benchmarks, and I have written up what building that suite actually found — including the cases where the thing that turned out to be wrong was the oracle, not the code. A more recent one works the rock model through a tunnel against its closed-form ground reaction curve, which is also the comparison that showed a model verified at the material point is not yet a model that works in a boundary value problem.
Documentation and citationPermalink to “Documentation and citation”
The scientific manual documents the theoretical foundations, numerical methods, element families, constitutive models, solvers, groundwater flow and consolidation theory, together with the verification protocol. It is archived on Zenodo under CC-BY-4.0 and has a permanent identifier:
Küçükkarakurt, F. (2026). KATAI 2D — Scientific Manual (Version 0.2). Zenodo. https://doi.org/10.5281/zenodo.20692282
An edition covering the capabilities added since is in preparation. A CITATION.cff
ships in the repository, so GitHub’s “Cite this repository” button produces the same
entry the DOI resolves to.
StatusPermalink to “Status”
Version 0.8.1, released under the Apache License 2.0 at
github.com/fkkarakurt/katai2d — free for
commercial and academic use. Two artifacts ship for Windows x64: a self-contained
katai.exe with no runtime dependency, and one abi3 Python wheel that serves every
CPython ≥ 3.12 and carries the same command line. Both must reproduce the
verification-corpus numbers in a clean environment before they are allowed to leave the
build.
It is pre-release software and says so: interfaces and the input format may still change, and the format is versioned so that an older build refuses a newer file rather than misreading it.
A desktop application — modelling, meshing, results and reporting on the same verified engine — is a separate track, still in development. Early access registration for it is open at kataigeo.com and carries no payment or commitment.