Skip to content

KATAI 2D v0.9.0

Latest

Choose a tag to compare

@fkkarakurt fkkarakurt released this 31 Aug 20:24

KATAI 2D v0.9.0

Two things this program could not be given, and one thing it could not say.

It could not be given rock. A rock mass had to be entered as a Mohr-Coulomb
fit, which is a straight line through a curve — matchable over a narrow band of
confining stress and wrong outside it in both directions. It now has the
Hoek-Brown 2002 criterion, entered the way a geologist writes it down (σci, mi,
GSI, D) rather than as a c′/φ′ pair somebody had to derive.

It could not be given the ground data itself. Every geotechnical model starts
from borehole logs, and this program could only read polygons — so the logs had
to be redrawn by hand, which is the slowest step in setting a model up and the
easiest place in the whole workflow to put a number in the wrong row. That error
is the one nothing downstream can catch: the mesher meshes the wrong ground,
every phase converges on it, and the answer is a correct solution to a model
nobody meant. Logs are now an input, and the polygons are generated from them.

And a run could not say what its answer had actually satisfied. "Converged"
meant one global force residual. The two criteria beside it in the reference
formulation — the current stiffness parameter, which tightens the test as a
mechanism forms, and the local error at the stress points, which asks whether
the stress a point carries is the stress its own material law would return — had
never been consulted. Both are computed now, both are reported, and a result
file carries which of them were met.


Read this first if you have 0.8.1 files

  • Project files are now .k2d version 18 (from 14), in four steps that each
    added keys: v15 the constitutive integration tolerance, v16 borehole logs,
    v17 the consolidation stop criterion, v18 the rock model. Every one is written
    only when used, so a project that touches none of them produces the same
    bytes 0.8.1 produced. This build reads every older file; older builds refuse
    this one's, which is the version gate doing its job — an older build cannot
    read a rock material or a stop criterion, and would otherwise run a different
    problem from the same drawing.
  • Results files are now .res version 9 (from 6). Same rule: this build
    reads older ones, older builds refuse this one's. Re-open and re-calculate, or
    keep the older build for older result files.
  • SolveResult.stopped_by renamed a value. A solve abandoned because no step
    along the Newton direction reduced the out-of-balance force used to answer
    'mechanism'; it now answers 'stalled line search', because that ending
    happens on well-supported models too and the old name was a claim rather than
    a description. Code that tested stopped_by == 'mechanism' to decide whether
    a load factor is a capacity should read the current stiffness parameter beside
    it instead, as katai.summary() now does.
  • A Hardening Soil answer may move slightly on the same file: the stress-point
    integrator no longer freezes the stress-dependent moduli at the state each
    increment began from, and an increment abandoned for a stalled search is now
    retried with a non-monotone window rather than cut back. Both were adopted
    against a measurement, and both are in the changelog.

Rock, verified where it counts

Hoek-Brown was checked at the material point against the closed forms, then
through the whole path from a .k2d file — and then put into a boundary value
problem, which broke it three ways that element tests cannot see. The model had
never been integrated in axisymmetry at all (a missing switch branch handed the
caller's own values back, so the run merely failed to converge); the tangent was
elastic rather than consistent, which integrates correctly but will not iterate
an ill-conditioned problem to equilibrium; and the retry that would have used a
stronger tangent was armed by a flag that tested for one model by name.

KV-CST-016 is what the repair earned: a circular tunnel in a Hoek-Brown rock
mass under 28 MPa of hydrostatic ground, unloaded in stages, against the
closed-form elasto-plastic ground reaction solution. The radial stress lands on
the closed form to 0.59% inside the plastic annulus and 0.72% outside it.

Four analyses were refused for rock rather than approximated, each in the
schema and in the engine, each with a test: undrained (B) and (C), the safety
phase, EC7 design approaches that reduce a characteristic strength, and interface
strength defaulting to the schema's 1 kPa / 30°. A refusal that also blocks a
working path is another kind of bug, so each refusal test checks that the way
around it still runs.

What a run now says about itself

0.8.1 0.9.0
convergence criteria consulted 1 (global force residual) + current stiffness parameter, + local error at soil, interface and coupling points, + embedded-beam foot force
what the .res file records that it converged which criteria were met, with their values
a mesh that hit its refinement cap silently identical to one that did not says so, with the bound it was asked for
a consolidation phase told a duration can be asked how long until 90%, and answers

Verification

  • 207 automated tests, 69 declared verification cases over 26
    benchmark .k2d files that ship in the repository.
  • The portable composition reproduces the whole suite with the vendored Eigen
    solver — no proprietary component.
  • Full changelog: CHANGELOG.md
  • The record itself: docs/validation/verification-matrix.md

Stated rather than implied

The unsaturated zone is implemented — van Genuchten retention, Mualem relative
permeability, Bishop's χ = S_eff into effective stress, all reachable from the
file — but its verification record covers the saturated limit of that
formulation, not the unsaturated regime itself. Automatic step size from the
iteration band, and arc-length control, are not in this release: both change how
every existing answer is reached, so they open the next line rather than close
this one.


Downloads

file SHA-256
katai2d-0.9.0-win64.zip 57147c8a98e8734a9acfb1096668874628e133fdba7a5115f22230d860382032
katai2d-0.9.0-cp312-abi3-win_amd64.whl 82cab1d8cda73224d1ab3cca76d7d6c5df4f07612cdd2d7f2d92412a197b9441
irm https://raw.githubusercontent.com/fkkarakurt/katai2d/main/install.ps1 | iex
katai info      # KATAI 2D 0.9.0 (2026-08-31)
pip install katai2d-0.9.0-cp312-abi3-win_amd64.whl