Releases: fkkarakurt/katai2d
Release list
KATAI 2D v0.9.0
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
.k2dversion 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
.resversion 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_byrenamed 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 testedstopped_by == 'mechanism'to decide whether
a load factor is a capacity should read the current stiffness parameter beside
it instead, askatai.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.k2dfiles that ship in the repository. - The
portablecomposition 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.whlKATAI 2D v0.8.1
KATAI 2D v0.8.1
Two things a result can be wrong about without looking wrong — and one of them
had been deciding which of the two linear-solver backends was right.
The first is a verdict. A load-controlled analysis that stops short of full
load reports the fraction it reached, and this program was calling that fraction
the soil's capacity whichever of the three ways it had stopped: because no
descent direction existed, because the tangent went singular along a mechanism,
or because the per-increment iteration limit ran out. Only the first two are
statements about the ground. The third is a statement about a setting — and it
was the one KV-STR-004's refined-mesh run was making, on a mesh where the same
model carries its full load once the limit is adequate.
The second is a field. The degree of saturation was drawn, tabulated and
printed for runs that never computed it — a static analysis has no saturation
field, and the reader answered 1.0 when asked anyway. Above a phreatic surface
that is not merely uncomputed; it is certainly wrong. Both reached the
calculation report, which is the document that leaves the building.
If you have .res files from 0.8.0, read this first
- Results files are now version 6. This build reads every older one; 0.8.0
and earlier refuse one written by this build, which is the forward-version
guard doing its job. Re-open the project and re-calculate, or keep the older
build for older result files. Project files are unaffected —.k2dstays at
version 14. - The per-increment iteration limit is now derived from the material class
(200 where the tangent is nonsymmetric — nonlinear soil, interfaces, embedded
beams — and 80 otherwise) instead of always being 80. A run that reported a
collapse at a low load factor may now converge. To reproduce a 0.8.0 run
exactly, set that phase's Max iterations to 80. τmaxis nowτmax (in-plane), andSis no longer offered by runs
that did not compute it.
What a collapse report says now
An analysis that stops short names which of the three things happened, and only
two of them keep the limit-load reading. The two messages, as the solver writes
them (the numbers are from the runs they were taken from):
Did not fully converge: equilibrated 41% of the applied load. No increment of
the remaining load could be equilibrated at any step size: the tangent
stiffness went singular along a mechanism … This equilibrated fraction is the
incremental limit (collapse) load.
Did not fully converge: equilibrated 0% of the applied load. The last
increment ran out of iterations (4 per increment) while its out-of-balance
force was still falling, so this fraction is a limit of the iteration budget
and NOT a collapse load. Raise the phase's iteration limit and re-run
before reading it as a capacity.
The reason travels with the result — SolveResult.stopped_by in C++, in Python
and in the .res file — so the Studio's panels and both reports ask it instead
of inferring a capacity from a number.
Measurements behind the change
| before | after | |
|---|---|---|
| KV-STR-004, refined mesh, MKL | converges, 66 s | converges, 37 s |
| KV-STR-004, refined mesh, portable (Eigen) | "collapse at 10% of the load" | converges |
| both backends agree on max|u| | — | 0.1822167 m (7 figures) |
| tension cut-off on / off, same file | 561 / 57 Newton iterations | — |
Verification
- 153/153 on the MKL composition, 151/151 on
portable(the vendored
Eigen solver, no proprietary component) — the first full run of the suite on
that composition. - 58 declared verification cases over 26 benchmark
.k2dfiles. - Full changelog:
CHANGELOG.md - What the backend disagreement was, and what closed it:
docs/validation/numerical-uncertainty.md§10
Downloads
| file | SHA-256 |
|---|---|
katai2d-0.8.1-win64.zip |
af52d11f38151d71c9652d37f7fd6e330c28e3ff172a637ef2b4fc00282ea6e1 |
katai2d-0.8.1-cp312-abi3-win_amd64.whl |
d41169af526eb261b2323048ac9e0cd93cb5171b1b74c248dc5e85928d23ff4a |
irm https://raw.githubusercontent.com/fkkarakurt/katai2d/main/install.ps1 | iex
katai info # KATAI 2D 0.8.1 (2026-08-19)pip install katai2d-0.8.1-cp312-abi3-win_amd64.whlKATAI 2D v0.8.0
KATAI 2D v0.8.0
Verification release, and the first one in which the Python surface reaches the
whole engine.
Six capabilities — the interface, the plate, the geogrid, the embedded beam,
HS small, and Soft Soil with its creep — were implemented and tested at the
element, but had never been run along the path a user actually takes: from a
file, through the mesher and the driver. Run that way for the first time,
five of the six were wrong. Each one converged, reported success and
returned a number.
The verification record grows from 45 declared cases over 17 input files to
57 cases over 26 files; the suite is 152 tests. The project file moves
from v12 to v14.
If you script KATAI 2D, read this first
The Python builder now covers the whole model. Before this release a script
could build soil, water, loads and phases — and for a wall, an anchor, a
geogrid, a pile row or an interface you had to drop to the raw bindings and
assemble the material list, the element list and the index between them by
hand. The pleasant layer covered the tutorial and gave up at the first real job.
wall = prj.structures.plate((12, 20), (12, 6), EA=1.2e7, EI=1.0e5,
interfaces="both", name="Diaphragm wall")
anchor = prj.structures.anchor((12, 18), (20, 14), EA=2.0e5, spacing=2.5,
prestress=300.0)
prj.phases.plastic("Excavate", activate=[anchor], deactivate=[pit])
print(katai.summary(prj.run(), prj))New on the Python surface: prj.structures (plate · anchor · geogrid · pile ·
interface), katai.summary() and katai.extremes(), the bound structural
forces (StructForce / ForceStation — a wall's moment and a pile's axial
force were previously readable from everywhere except a script),
prj.phases.transient_flow(...) and .fully_coupled(...), and the per-phase
design= (EC7 / TBDY 2018 partial factors) and water= (staged dewatering).
These are new in 0.8.0. If prj.structures raises AttributeError on your
machine, you are on an older wheel — check with python -c "import katai; print(katai.__version__)" and reinstall from the assets below. The release gate
now proves this from the installed wheel: a fresh virtual environment with the
environment scrubbed must run the anchored-excavation example, wall, anchor,
interfaces and all, before the wheel is allowed to leave the build.
Wrong answers this release fixes
Each of these produced a converged run and a green suite.
- An interface drawn along a fixed boundary was welded shut. Both sides of
the split sit at identical coordinates, and boundary conditions are applied
by coordinate, so both were fixed: the block sheared elastically against its
own base instead of sliding. PLAXIS's own sliding-block case returned
5,401,612 kN/m where the manual's arithmetic gives 60. - Deactivating the soil welded the beams standing in it. The run converged,
reported "ok" and handed back max|u| = 0.000000e+00 with no diagnostic. - HS small rode the virgin backbone — Masing's rule was not applied, and the
E₀/E_ur ceiling was missing. Measured +5.7% / +12.9% / +34.8% too much
heave at three unloading sizes. - The tension cut-off did not reach the models it belongs to. Every
Hardening Soil, HS small, Soft Soil and Soft Soil Creep run allowed tension
past σ_t, while the schema switches the cut-off on by default — a systematic
difference from the reference code, in the unsafe direction. - Every embedded-beam interface spring was 2.5× too stiff, and a pile row
could not be loaded at its head at all. - The installer compared a real hash against the number 55. Windows
PowerShell 5.1 returns a.sha256attachment as a byte array without
-UseBasicParsing, so the integrity check was comparing a hash against one
byte of itself. It would have "passed" for any file whose hash began with a
matching byte.
Also new: "Reset small strain" as a phase option (Material Models Manual
sec. 7.6), the Li & Dafalias dilatancy below the phase-transformation line
for HS small, and numerical-uncertainty cases on axes other than the mesh — one
of which measured a prediction of ours wrong and is recorded that way.
Full detail, with the citation for every clause: CHANGELOG.md.
One limitation found while preparing this release, declared rather than quietly fixed
A verification case was asserting a result that only one of the two solver
backends could produce. Halving the element size on the pile-capacity case under
its 1500 kN/m overload converges on the MKL build and returns the pile's
600.0000 kN/m capacity; on the vendored Eigen solver — same source, same file,
same mesh — the run reports a collapse mechanism after equilibrating 10% of the
load. Continuous integration builds the Eigen composition, which is why it had
been red while every local run was green.
The case has been moved to a load where both backends return the capacity
exactly. The disagreement itself is open, and the practical consequence is
worth stating: a number computed within a few percent of a model's own limit
load should be treated as backend-dependent on this build. Iterative refinement
in the Eigen solver was tried as the obvious fix and did not recover the run, so
it was reverted rather than shipped on a hypothesis the measurement refused. The
whole account, with the measurements, is in
numerical-uncertainty.md §10.
Upgrading
Files are guarded in one direction only. This build reads every older .k2d
unchanged; an older build refuses a v14 file rather than misreading it,
which is the point of the guard — each bump marks an input the older build
would have dropped in silence and solved a different problem for.
Assets
| File | What it is |
|---|---|
katai2d-0.8.0-win64.zip |
Self-contained command line for Windows: one executable, no runtime dependency, Eigen solver backend. |
katai2d-0.8.0-cp312-abi3-win_amd64.whl |
Python package (pip install), CPython ≥ 3.12, with the katai console script. Verified in a fresh virtual environment. |
*.sha256 |
Checksums, also used by install.ps1. |
katai2d-0.8.0-win64.zip
dedb4dac27ea88bec754050ae0e8026568645df7fed15bd7104d2b7ef45c3908
katai2d-0.8.0-cp312-abi3-win_amd64.whl
4e19dd9c7943eae6e07dab8d13db7e841c53ad36de3525296955002ca9141a04
The Windows executable is still unsigned, so SmartScreen or Defender may
warn about it — v0.7.0 drew a generic Trojan:Win32/Wacatac.B!ml verdict, which
is what a reputation heuristic says about an unknown unsigned binary rather than
an identification of anything. Verify the checksum above, upload the asset to
VirusTotal if you want an independent opinion, or use the wheel, which has never
been flagged. Code signing is on the roadmap; it is a purchase, not a patch.
KATAI 2D v0.7.1
KATAI 2D v0.7.1
Packaging release. No engine change: the same solver, the same results, the
same verification record (150 automated tests, 45 declared verification cases).
If v0.7.0 runs for you, there is nothing new to compute here.
Why this release exists
The v0.7.0 Windows executable shipped with an empty version resource — no
product name, no version, no publisher, no copyright. That is poor practice on
its own, and on a binary that is also unsigned and newly published it is what a
reputation heuristic reads as anonymous: Microsoft Defender flagged
katai2d-0.7.0-win64.zip as Trojan:Win32/Wacatac.B!ml and removed it.
Wacatac.B!ml is a generic machine-learning label, not an identification of any
known malware — the !ml suffix says the verdict came from a heuristic. The
downloaded file's SHA-256 matched the published checksum exactly, so what was
flagged was this project's own build, unmodified.
What changed
- The executable now declares its product name, version, publisher, copyright
and origin, generated at build time fromversion.hpp, so the binary's
Properties tab cannot drift from whatkatai infoprints. The rebuilt
executable and its zip both scan clean.
That is a mitigation, not a guarantee. An unsigned binary from a project with no
download history can be flagged again by any engine, and the honest answers are:
- Verify what you downloaded. Every release publishes a SHA-256 beside each
asset:(Get-FileHash .\katai2d-0.7.1-win64.zip -Algorithm SHA256).Hash.ToLower()
- Get an independent opinion if you want one: the assets are public, so
uploading one to VirusTotal discloses nothing private. - Use the wheel, which has never been flagged:
pip install katai2d-0.7.1-cp312-abi3-win_amd64.whl. - Code signing is on the roadmap; it is the only real fix for the underlying
reputation problem, and it is a purchase, not a patch.
The detection has been reported to Microsoft as a false positive.
Assets
| File | What it is |
|---|---|
katai2d-0.7.1-win64.zip |
Self-contained command line for Windows: one executable, no runtime dependency, Eigen solver backend. Smoke-tested with PATH scrubbed to C:\Windows\System32. |
katai2d-0.7.1-cp312-abi3-win_amd64.whl |
Python package (pip install), CPython ≥ 3.12, with the katai console script. Verified in a fresh virtual environment. |
*.sha256 |
Checksums, also used by install.ps1. |
katai2d-0.7.1-win64.zip
7112f4784ee2f6dd1154f183e9d50de91fece59a5e62f8db41d732b8caca7faf
katai2d-0.7.1-cp312-abi3-win_amd64.whl
572f1c8a2ba1d4b8d6e37472d8c4e75ed29c9da67803e221c5150741e3c7edb5
What is in 0.7.0, if you are coming from 0.6.x
Ten inputs a geotechnical model needs and could not express — wells and drains,
a wall that blocks water, rainfall boundaries, anchor prestress, per-phase water
conditions, Undrained (C), per-material undrained stiffness, a dilatancy
cut-off, a staged-construction target and per-phase numerical controls — plus
the diagnostics that stop an input from being discarded in silence, and a
numerical uncertainty band for published numbers. See the v0.7.0 notes.
KATAI 2D v0.7.0
KATAI 2D v0.7.0
Capability release. Ten inputs a geotechnical model needs — and this program
could not express — are now in the file format. Four of them closed a silently
wrong answer rather than a missing convenience: the analysis ran, converged and
reported a plausible number for a model the engineer had not drawn.
Every closure arrives with a verification case and a citation to the manual
clause it implements. The verification record grows from 27 to 45 declared
cases over 17 checked-in .k2d benchmark inputs, re-asserted by 150
automated tests on every build.
What you can model now that you could not
- Dewatering from inside the model — wells (a prescribed discharge, stopping
ath_min) and drains (a held head, normal or vacuum), switched per phase. - A cut-off wall that actually blocks water — cross permeability on walls and
interfaces: impermeable, semi-permeable (hydraulic resistanced/k), or fully
permeable. Until now the flow net ran straight through a diaphragm wall. - Rainfall and recharge boundaries — a prescribed flux (Neumann) flow
boundary condition. - An anchored, dewatered excavation as it is actually built — anchor lock-off
force, and water conditions per phase, so the pit is dewatered before it is
dug. Every anchored excavation built before this was the model of a slacker,
weaker structure. - Undrained (C) — a total-stress analysis with undrained parameters, for the
Linear Elastic and Mohr-Coulomb models. - Per-material undrained stiffness — the equivalent undrained Poisson ratio
or Skempton's B, per material, instead of one fixed 0.495 for everybody. - A dilatancy cut-off, a staged-construction target (Σ Mstage < 1),
"ignore undrained behaviour", and per-phase numerical controls so a
published run carries the numerics it was computed with.
Silently wrong answers this release removes
- The Hardening Soil family sized its pore fluid from the
E/nuboxes that
model never reads — a factor of 7.6 on an otherwise ordinary data set. - A dense sand dilated without limit, over-predicting bearing capacity.
- Sixteen input paths were discarded without a word — a load drawn above the
surface, a wall the mesh never sees, a prescribed displacement that catches no
node. They are now refused or reported through stable diagnostic codes
(docs/diagnostics.md). - A verification case that measured nothing: the strength-reduction search
hard-coded its own trial tolerance, so a published tolerance sweep had been
setting a number nothing read. Re-measured with the control connected: the
factor of safety is bit-identical at and below 1e-3, but +2.0% at 1e-2 and
+45.6% at 1e-1 — always on the unsafe side.
Numbers now carry a numerical uncertainty
Published results can state how far they are from the exact answer of the same
equations: the Grid Convergence Index after Roache (1994) and Celik et al.
(2008), in the ASME V&V 20 sense, fed by nested (uniform) mesh refinement. No
geotechnical vendor manual defines a discretisation-error estimator; this one is
taken from the verification literature and is itself verified against
manufactured triplets whose answer is known.
Measured with it on the Giroud rigid-footing benchmark: the converged force is
15.244 kN/m ± 0.21%, which is 0.03% from the published PLAXIS 2D value —
while the input file's own mesh reads 0.5% higher. The difference was the mesh,
not the physics.
A factor of safety computed with a non-associated flow rule is mesh-dependent
and falls as the mesh is refined (−7.9% over a fourfold refinement on Griffiths
& Lane). The run says so, on every such phase (K2D-A005).
File format
The project file moves from version 8 to version 12. This build reads every
older .k2d unchanged. An older build refuses these files, which is the point:
each bump marks an input that an older build would have dropped in silence and
solved a different problem for. The .res results format is unchanged (v5).
Assets
| File | What it is |
|---|---|
katai2d-0.7.0-win64.zip |
Self-contained command line for Windows. One 1.6 MB executable, no runtime dependency, Eigen solver backend. Verified on a scrubbed PATH. |
katai2d-0.7.0-cp312-abi3-win_amd64.whl |
Python package (pip install), Python ≥ 3.12, with the katai console script. Verified in a fresh virtual environment with a scrubbed environment. |
*.sha256 |
Checksums, verified by install.ps1. |
katai2d-0.7.0-win64.zip
b0894263bbc0e5840c6cdd0079542371ed2cf8e6fc00576ace093e8c076e6b58
katai2d-0.7.0-cp312-abi3-win_amd64.whl
100f504537210bbf36ff5919fba4f379ee09a48342f8dfc22c9932016ed85f14
Compatibility
No breaking change to the Python surface or the command-line contract; both
gained the new inputs. Files written by 0.7.0 are refused by 0.6.x by design.
KATAI 2D v0.6.1
KATAI 2D v0.6.1
Patch release. The v0.6.0 release assets were built before the axisymmetric
staged-phase fix landed on main; these binaries catch up with the tree.
Fixed
- The command line and the Python package refused axisymmetric staged
(Plastic) phases that the engine itself supports — an over-broad guard.
The guard is now narrow: what is genuinely unsupported is still refused,
by name. This is the difference that matters for the published benchmark
walkthroughs:katai solve tests/corpus/kv-fnd-013-cox-circular-footing.k2d
runs with these binaries.
Added since the v0.6.0 assets were built
- Three published benchmarks checked in as plain
.k2dcorpus files, each
re-solved and asserted on every build: Cox (1962) circular footing
(KV-FND-013), Davis & Booker (1973) strip footing on clay with strength
increasing with depth (KV-FND-014), and Griffiths & Lane (1999) Example 1
slope (KV-SLP-002). The verification matrix now records 27 cases over 16
checked-in benchmark inputs. docs/validation/three-published-benchmarks.md— the three cases end to
end from the command line, with transcripts and reading recipes.docs/validation/plaxis-2d-validation-comparison.md— four problems from
the PLAXIS 2D Validation Manual, Version 8 (Bentley Systems), reproduced
input for input: closed form, published PLAXIS 2D value and KATAI 2D
result side by side.- CMake: the test suite is optional for embedders (
KATAI_WITH_TESTS,
default ON); script paths resolve viaPROJECT_SOURCE_DIR.
Verification
- Full suite on the release commit: 133/133.
- The wheel is exercised in a fresh virtual environment before packaging:
documented CLI exit codes hold (0/0/0/5) and the slope corpus case
reproduces its verification band (FoS 1.010).
Assets
| File | SHA-256 |
|---|---|
katai2d-0.6.1-win64.zip |
2e03b10c3de0ef745b8a797dbf3806fd2236b3b61d83494fb424fb0f13e3ff7e |
katai2d-0.6.1-cp312-abi3-win_amd64.whl |
94922caac356c699af402cdc08c0283a62926d3176e4994b8c80d15e176c6b2e |
The zip is the self-contained command line (win64, static CRT, Eigen
solver backend — no proprietary component, no runtime dependency). The
wheel is abi3 and serves every CPython >= 3.12 on Windows x64. Each asset
ships with a .sha256 file; install.ps1 verifies the hash on install.
v0.6.0
KATAI 2D 0.6.0 — the first published version: the engine, the command line,
the Python surface and the verification record.
Install
Command line (Windows x64, self-contained — no dependencies):
irm https://raw.githubusercontent.com/fkkarakurt/katai2d/main/install.ps1 | iexor unzip katai2d-0.6.0-win64.zip anywhere and run katai.exe.
Python (CPython ≥ 3.12, Windows x64 — one abi3 wheel serves every version;
it ships the katai package and the same katai command line):
pip install katai2d-0.6.0-cp312-abi3-win_amd64.whlWhat is in it
- Staged construction (plastic phases with inherited activation), K0 procedure
and gravity initial stress. - Constitutive models: Linear Elastic, Mohr–Coulomb with a tension cut-off,
Hardening Soil, HS-small, Soft Soil, Soft Soil Creep; drained, undrained
(A/B) and non-porous drainage types. - Groundwater: steady-state and transient flow with free surfaces and seepage
faces, Biot consolidation (elastoplastic), fully coupled flow–deformation. - Dynamics: seismic time histories with compliant-base and free-field
boundaries, Rayleigh damping, optional full plasticity during shaking,
response spectra. - Safety: phi–c strength reduction with an honest lower-bound flag.
- Structural elements: plates with elastoplastic Mp/Np hinges, embedded beam
rows, node-to-node anchors, geogrids, Coulomb interfaces; 6- and 15-node
triangles, plane strain and axisymmetric. - Design codes: EC7 (EN 1997-1) and TBDY 2018 partial-factor catalogues.
- The
kataiCLI (solve/validate/info) with a documented,
test-pinned exit-code contract; the Pythonkatai.Projectbuilder writes
the same.k2dcontract byte for byte.
Verification
Every capability is checked in CTest against a closed-form solution, an
Verification
Every capability is checked in CTest against a closed-form solution, an
independent computation path that shares no code with the solver, or a
published benchmark — self-consistency does not count. The record is the
generated verification matrix
with its bibliography; the 13 benchmark inputs are checked in under
tests/corpus/. Both artifacts below reproduced the corpus numbers in a
clean environment before upload.
Checksums (SHA-256)
| asset | sha256 |
|---|---|
katai2d-0.6.0-win64.zip |
83194773834a5fc417a506dd8988917f9e2b67bca16976b341b1199e0a5fc445 |
katai2d-0.6.0-cp312-abi3-win_amd64.whl |
9cd490181175200e370fde4342c0acb60ed2c38918e33511b800a1ac5f84fd16 |
This release is Windows x64 only. Full changelog:
CHANGELOG.md